test_that("vld_subset", {
  expect_true(vld_subset(integer(0), 1))
  expect_false(vld_subset(1:3, 1:2))
  expect_true(vld_subset(numeric(0), 1L))

  expect_false(vld_subset(-1, c(0, 1, NA)))
  expect_false(vld_subset(1L, 0L))
  expect_false(vld_subset(1, NA))

  expect_false(vld_subset(c(NA, 1), 1))
  expect_true(vld_subset(NA, NA))
  expect_true(vld_subset(c(NA, 1), c(1, NA)))

  expect_false(vld_subset(c(NA, 1), 1:2))
})

test_that("chk_subset", {
  expect_identical(chk_subset(integer(0), 1), integer(0), 1)
  expect_invisible(chk_subset(integer(0), 1))
  expect_chk_error(chk_subset(NA, c(0, Inf)), "^`NA` must match 0 or Inf, not NA[.]$")
  expect_chk_error(chk_subset(1:3, c(0, 1, NA)), "`1:3` must have values matching 0, 1 or NA[.]$")
  expect_chk_error(chk_subset(-1, c(0, 1, NA)), "^`-1` must match 0, 1 or NA, not -1[.]$")
  expect_chk_error(chk_subset(c(1L, 1L), 0L), c("^`c[(]1L, 1L[)]` must have values matching 0[.]$"))
  expect_chk_error(chk_subset(1, ""), "^`1` must match '', not 1[.]$")
  expect_chk_error(
    chk_subset(1, NA),
    "^`1` must match NA, not 1[.]$"
  )
  expect_chk_error(
    chk_subset(c(NA, 1), 1),
    "^`c[(]NA, 1[)]` must have values matching 1[.]$"
  )
  expect_chk_error(
    chk_subset(c(NA, 1), 1:2),
    "^`c[(]NA, 1[)]` must have values matching 1 or 2[.]$"
  )
  expect_chk_error(
    chk_subset(3L, values = c(1L, 1L, 7L)),
    "^`3L` must match 1 or 7, not 3[.]$"
  )
  expect_chk_error(
    chk_subset(3L, values = c(1L, 1L, 7L), x_name = "1"),
    "^1 must match 1 or 7, not 3[.]$"
  )
})
