tests/testthat/test-empty_result.R

test_that("empty_result returns correctly structured list for non-empty outcomes", {
  outcomes <- c("y1", "y2")
  res <- empty_result(outcomes)

  # top-level keys
  expect_type(res, "list")
  expect_true(all(c(
    "selected_variables",
    "by_outcome",
    "selected_lambdas",
    "penalty_factors",
    "models",
    "goodness_of_fit",
    "interaction_metadata"
  ) %in% names(res)))

  # selected_variables
  expect_identical(res$selected_variables, character(0))

  # by_outcome: named list with one element per outcome; elements are NULL by design
  expect_type(res$by_outcome, "list")
  expect_length(res$by_outcome, length(outcomes))
  expect_identical(names(res$by_outcome), outcomes)
  lapply(res$by_outcome, function(x) expect_null(x))

  # selected_lambdas: named numeric vector of NA_real_
  expect_type(res$selected_lambdas, "double")
  expect_length(res$selected_lambdas, length(outcomes))
  expect_identical(names(res$selected_lambdas), outcomes)
  expect_true(all(is.na(res$selected_lambdas)))

  # penalty_factors: empty numeric
  expect_identical(res$penalty_factors, numeric(0))

  # models: empty list
  expect_type(res$models, "list")
  expect_length(res$models, 0)

  # goodness_of_fit: empty list (to be filled per outcome later)
  expect_type(res$goodness_of_fit, "list")
  expect_length(res$goodness_of_fit, 0)

  # interaction_metadata
  expect_type(res$interaction_metadata, "list")
  expect_true(all(c(
    "interaction_terms",
    "main_effects_in_interactions",
    "full_formula"
  ) %in% names(res$interaction_metadata)))

  expect_identical(res$interaction_metadata$interaction_terms, character(0))
  expect_identical(res$interaction_metadata$main_effects_in_interactions, character(0))
  expect_null(res$interaction_metadata$full_formula)
})

test_that("empty_result handles zero-length outcomes", {
  outcomes <- character(0)
  res <- empty_result(outcomes)

  # by_outcome and selected_lambdas should be length 0 with no names
  expect_identical(res$by_outcome, setNames(list(), character(0)))
  expect_identical(res$selected_lambdas, setNames(numeric(0), character(0)))

  # still returns the same fixed shapes for other fields
  expect_identical(res$selected_variables, character(0))
  expect_identical(res$penalty_factors, numeric(0))
  expect_type(res$models, "list")
  expect_length(res$models, 0)
  expect_type(res$goodness_of_fit, "list")
  expect_length(res$goodness_of_fit, 0)

  expect_identical(res$interaction_metadata$interaction_terms, character(0))
  expect_identical(res$interaction_metadata$main_effects_in_interactions, character(0))
  expect_null(res$interaction_metadata$full_formula)
})

test_that("empty_result preserves outcome order in names", {
  outcomes <- c("b", "a", "c")
  res <- empty_result(outcomes)
  expect_identical(names(res$by_outcome), outcomes)
  expect_identical(names(res$selected_lambdas), outcomes)
})

Try the auxvecLASSO package in your browser

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

auxvecLASSO documentation built on Aug. 28, 2025, 9:09 a.m.