context("checkDisjunct")

test_that("checkDisjunct", {
  myobj = 1:3
  expect_succ_all(Disjunct, myobj, letters)
  myobj = "b"
  expect_fail_all(Disjunct, myobj, letters)

  expect_true(testDisjunct(character(0), letters))
  expect_true(testDisjunct(letters, character(0)))
  expect_true(testDisjunct(character(0L), character(0)))

  expect_false(testDisjunct(factor("a"), letters))
  expect_false(testDisjunct(1., 1:2))
  expect_false(testDisjunct(factor("a"), factor(letters)))

  expect_true(testDisjunct(NA_integer_, 1:10))
  expect_false(testDisjunct(NA_integer_, c(1:10, NA_integer_)))

  expect_error(assertSubset(1L, list()), "atomic")

  expect_true(testDisjunct(integer(0), character(0)))
  expect_error(assert_disjunct("a", "a"), "disjunct from")
})


test_that("checkSubset / fastmatch", {
  skip_if_not_installed("fastmatch")
  x = "c"
  y = letters[1:5]

  res = testDisjunct(x, y)
  expect_false(res)
  expect_null(attr(y, ".match.hash"))

  res = testDisjunct(x, y, fmatch = TRUE)
  expect_false(res)
  expect_class(attr(y, ".match.hash"), "match.hash")
})

test_that("checkDisjunct / NAs (#158)", {
  expect_false(test_disjunct(NA_character_, NA))
  expect_false(test_disjunct(NA, NA_character_))
})
