tests/testthat/test-utils.R

# ==============================================================================
# tests/testthat/test-utils.R
# ==============================================================================

# Create test data
create_test_data <- function(n = 1000) {
  set.seed(123)
  data.frame(
    id = 1:n,
    outcome = rbinom(n, 1, 0.2),
    exposure = factor(sample(c("No", "Yes"), n, replace = TRUE)),
    age = rnorm(n, 40, 10),
    sex = factor(sample(c("Male", "Female"), n, replace = TRUE))
  )
}

test_that("input validation works correctly", {
  data <- create_test_data()

  # Valid inputs should not error
  expect_silent(.validate_inputs(data, "outcome", "exposure", NULL, NULL, "auto", 0.05))

  # Invalid data frame
  expect_error(.validate_inputs("not_df", "outcome", "exposure", NULL, NULL, "auto", 0.05))

  # Missing variables
  expect_error(.validate_inputs(data, "missing", "exposure", NULL, NULL, "auto", 0.05))

  # Invalid alpha
  expect_error(.validate_inputs(data, "outcome", "exposure", NULL, NULL, "auto", 1.5))

  # Invalid link
  expect_error(.validate_inputs(data, "outcome", "exposure", NULL, NULL, "invalid", 0.05))
})

test_that("data preparation works correctly", {
  data <- create_test_data()
  data$outcome_logical <- as.logical(data$outcome)

  prepared <- .prepare_data(data, "outcome_logical", "exposure", "age", NULL)

  expect_true(is.data.frame(prepared))
  expect_true(is.numeric(prepared$outcome_logical))
  expect_true(is.factor(prepared$exposure))
  expect_true(all(prepared$outcome_logical %in% c(0, 1)))
})

test_that("formula building works correctly", {
  # Simple formula
  formula1 <- .build_formula("outcome", "exposure", NULL)
  expect_equal(deparse(formula1), "outcome ~ exposure")

  # With adjustment
  formula2 <- .build_formula("outcome", "exposure", "age")
  expect_equal(deparse(formula2), "outcome ~ exposure + age")
})

test_that("starting values calculation works", {
  data <- create_test_data()

  start_vals <- .get_starting_values(data, "outcome", "exposure")

  expect_true(is.numeric(start_vals))
  expect_equal(length(start_vals), 2)  # Intercept + 1 predictor
  expect_true(all(start_vals >= 0 & start_vals <= 1))
})

test_that("safe confint works", {
  data <- create_test_data()
  model <- stats::glm(outcome ~ exposure, data = data, family = stats::binomial())

  ci <- .safe_confint(model)

  expect_true(is.matrix(ci))
  expect_equal(nrow(ci), 2)  # Intercept + exposure
  expect_equal(ncol(ci), 2)  # Lower and upper bounds
})

Try the riskdiff package in your browser

Any scripts or data that you put into this service are public.

riskdiff documentation built on June 30, 2025, 9:07 a.m.