tests/testthat/test-unvalidated-input_checking.R

# input_check_scalar() ---------------------------------------------------------

test_that("input_check_scalar() passes a single non-negative number", {
  expect_silent(input_check_scalar(0))
  expect_silent(input_check_scalar(1))
  expect_silent(input_check_scalar(1L))
  expect_silent(input_check_scalar(100))
})

test_that("input_check_scalar() passes a single missing value", {
  expect_silent(input_check_scalar(NA))
})

test_that("input_check_scalar() fails multiple values", {
  two_na_var <- c(NA, NA)
  expect_error(
    input_check_scalar(two_na_var),
    "two_na_var must be a single non-negative number \\(or NA\\)"
  )
  two_num_var <- c(1, 2)
  expect_error(
    input_check_scalar(two_num_var),
    "two_num_var must be a single non-negative number \\(or NA\\)"
  )
  na_num_var <- c(NA, 2)
  expect_error(
    input_check_scalar(na_num_var),
    "na_num_var must be a single non-negative number \\(or NA\\)"
  )
})

test_that("input_check_scalar() fails non-numeric input", {
  logical_var <- TRUE
  expect_error(
    input_check_scalar(logical_var),
    "logical_var must be a single non-negative number \\(or NA\\)"
  )
  string_var <- "string"
  expect_error(
    input_check_scalar(string_var),
    "string_var must be a single non-negative number \\(or NA\\)"
  )
})

test_that("input_check_scalar() fails negative numbers", {
  neg_num_var <- -1
  expect_error(
    input_check_scalar(neg_num_var),
    "neg_num_var must be a single non-negative number \\(or NA\\)"
  )
  neg_num_vec_var <- c(-1, -2)
  expect_error(
    input_check_scalar(neg_num_vec_var),
    "neg_num_vec_var must be a single non-negative number \\(or NA\\)"
  )
})

test_that("input_check_scalar() can check for whole numbers", {
  whole <- 1
  missing <- NA
  notwhole <- 1.1

  expect_silent(input_check_scalar(whole))
  expect_silent(input_check_scalar(missing))
  expect_silent(input_check_scalar(notwhole))
  expect_silent(input_check_scalar(whole, require_whole_number = TRUE))
  expect_silent(input_check_scalar(missing, require_whole_number = TRUE))
  expect_error(
    input_check_scalar(notwhole, require_whole_number = TRUE),
    "notwhole must be a single non-negative whole number \\(or NA\\)"
  )
})

# input_check_vector() ---------------------------------------------------------

test_that("input_check_vector() passes a vector of positive numbers", {
  expect_silent(input_check_vector(1:3))
  expect_silent(input_check_vector(c(1.1, 2.2, 3.3)))
})

test_that("input_check_vector() passes a vector of positive numbers and missing values", {
  expect_silent(input_check_vector(c(NA, 1)))
  expect_silent(input_check_vector(c(1, NA)))
})

test_that("input_check_vector() passes a single missing value", {
  expect_silent(input_check_vector(NA))
})

test_that("input_check_vector() passes a vector of missing values", {
  expect_silent(input_check_vector(c(NA, NA)))
})

test_that("input_check_vector() fails with zero", {
  with_zero_var <- 0:3
  expect_error(
    input_check_vector(with_zero_var),
    "with_zero_var must be a vector with only positive numbers and missing values"
  )
})

test_that("input_check_vector() fails with negative numbers", {
  negative_var <- -3:3
  expect_error(
    input_check_vector(negative_var),
    "negative_var must be a vector with only positive numbers and missing values"
  )
})

test_that("input_check_vector() fails with non-numeric vectors", {
  logical_var <- TRUE
  expect_error(
    input_check_vector(logical_var),
    "logical_var must be a vector with only positive numbers and missing values"
  )
  string_var <- "string"
  expect_error(
    input_check_vector(string_var),
    "string_var must be a vector with only positive numbers and missing values"
  )
})

test_that("input_check_vector() can check for whole numbers", {
  whole <- c(1, 2, NA, 4, 5)
  notwhole <- c(1, 2.2, NA, 4, 5)

  expect_silent(input_check_vector(whole))
  expect_silent(input_check_vector(notwhole))
  expect_silent(input_check_vector(whole, require_whole_number = TRUE))
  expect_error(
    input_check_vector(notwhole, require_whole_number = TRUE),
    "notwhole must be a vector with only positive whole numbers and missing values"
  )
})

# is_whole_number() ------------------------------------------------------------

test_that("is_whole_number() can distinguish between whole and decimal numbers", {
  x <- c(1.1, -1.1, 0, 2, NA)
  observed <- is_whole_number(x)
  expected <- c(FALSE, FALSE, TRUE, TRUE, NA)
  expect_equal(observed, expected)
})

test_that("is_whole_number() can tolerate minute computational inaccuracies from arithmetic operations", {
  expect_false(is_whole_number(3.0000001))
  expect_true(is_whole_number(3.00000001))

  expect_false(is_whole_number(3.000000000000001, tol = 1e-16))
  expect_true(is_whole_number(3.0000000000000001, tol = 1e-16))
})
Merck/simtrial documentation built on April 14, 2025, 5:37 a.m.