tests/testthat/test-07-simulate.R

test_that("surv_simulate produces expected structure", {
  sim <- surv_simulate(n_regions = 3, n_weeks = 4, seed = 1)
  expect_type(sim, "list")
  expect_named(sim, c("sequences", "population", "truth", "parameters"))
  expect_s3_class(sim$sequences, "tbl_df")
  expect_true(all(c("sequence_id", "region", "source_type", "lineage",
                     "collection_date", "report_date", "epiweek") %in%
                    names(sim$sequences)))
  expect_true(nrow(sim$sequences) > 0)
  expect_s3_class(sim$population, "tbl_df")
  expect_equal(nrow(sim$population), 3)
  expect_true(all(sim$population$seq_rate > 0))
  expect_true(all(sim$population$seq_rate <= 1))
})

test_that("surv_simulate is reproducible with seed", {
  sim1 <- surv_simulate(n_regions = 3, n_weeks = 4, seed = 42)
  sim2 <- surv_simulate(n_regions = 3, n_weeks = 4, seed = 42)
  expect_identical(sim1$sequences, sim2$sequences)
})

test_that("surv_simulate uses custom sequencing rates", {
  rates <- c(0.5, 0.01, 0.001)
  sim <- surv_simulate(n_regions = 3, n_weeks = 10,
                       sequencing_rates = rates, seed = 1)
  by_region <- table(sim$sequences$region)
  expect_true(by_region["Region_A"] > by_region["Region_C"] * 3)
})

test_that("simulated delays are non-negative", {
  sim <- surv_simulate(n_regions = 3, n_weeks = 10, seed = 1)
  delays <- as.integer(sim$sequences$report_date - sim$sequences$collection_date)
  expect_true(all(delays >= 0))
})

test_that("true prevalence sums to ~1 per region-week", {
  sim <- surv_simulate(n_regions = 3, n_weeks = 8, seed = 1)
  sums <- sim$truth |>
    dplyr::group_by(.data$epiweek, .data$region) |>
    dplyr::summarise(total = sum(.data$true_prevalence), .groups = "drop")
  expect_true(all(abs(sums$total - 1) < 0.01))
})

Try the survinger package in your browser

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

survinger documentation built on April 27, 2026, 9:10 a.m.