context("checkInt")

test_that("checkInt", {
  myobj = 1L
  expect_succ_all(Int, myobj)
  myobj = 1.1
  expect_fail_all(Int, myobj)

  expect_false(testInt(integer(0)))
  expect_false(testInt(NULL))
  expect_false(testInt(FALSE))
  expect_false(testInt(TRUE))

  expect_true(testInt(1L))
  expect_true(testInt(1.))
  expect_false(testInt(NA))
  expect_true(testInt(NA_real_, na.ok = TRUE))
  expect_false(testInt(1:2))
  expect_false(testInt(""))

  expect_false(is.integer(assertInt(5)))
  expect_true(is.integer(assertInt(5, coerce = TRUE)))

  expect_error(assertInt(2+3i), "integerish")
})


test_that("bounds of vectors with only missings are not checked", {
  expect_true(checkInt(NA, na.ok = TRUE, lower = 1))
  expect_true(checkInt(NA_character_, na.ok = TRUE, upper = 10))
  expect_fail_all(Int, 0L, lower = 1L)
  expect_fail_all(Int, 100L, upper = 10L)
})

test_that("Coercion works", {
  expect_identical(assertInt(2, coerce = TRUE), 2L)
  expect_error(assertInt("lkajsd"), "single integerish")
  expect_error(assertInt("lkajsd"), "not 'character'")

  # check that names are not dropped (#157)
  x = c("a" = 1)
  expect_identical(assertInt(x, coerce = TRUE), setNames(1L, "a"))
})
