tests/testthat/test-regional_epinow.R

skip_on_cran()

generation_time <- get_generation_time(disease = "SARS-CoV-2", source = "ganyani", max_value = 5)
reporting_delay <- dist_spec(
  mean = log(3), mean_sd = 0.1,
  sd = log(2), sd_sd = 0.1, max = 5
)

futile.logger::flog.threshold("FATAL")

## Uses example case vector
cases <- EpiNow2::example_confirmed[1:30]
cases <- data.table::rbindlist(list(
  data.table::copy(cases)[, region := "testland"],
  cases[, region := "realland"]
))

df_non_zero <- function(df) {
  expect_true(nrow(df) > 0)
}

test_that("regional_epinow produces expected output when run with default settings", {
  out <- suppressWarnings(
    regional_epinow(
      reported_cases = cases,
      generation_time = generation_time_opts(generation_time),
      delays = delay_opts(reporting_delay),
      rt = rt_opts(rw = 10), gp = NULL,
      stan = stan_opts(
        samples = 100, warmup = 100,
        cores = 1, chains = 2,
        control = list(adapt_delta = 0.8)
      ),
      logs = NULL, verbose = FALSE
    )
  )
  expect_equal(names(out$regional), c("testland", "realland"))
  expect_equal(names(out$summary), c(
    "latest_date", "results", "summarised_results", "summary_plot",
    "summarised_measures", "reported_cases", "high_plots", "plots"
  ))
  expect_equal(names(out$regional$realland), c("estimates", "estimated_reported_cases", "summary", "plots", "timing"))
  expect_type(out$regional$realland$timing, "double")
  df_non_zero(out$regional$realland$estimates$samples)
  df_non_zero(out$regional$realland$estimates$summarised)
  df_non_zero(out$regional$realland$estimated_reported_cases$samples)
  df_non_zero(out$regional$realland$estimated_reported_cases$summarised)
  df_non_zero(out$regional$realland$summary)
  expect_equal(names(out$regional$realland$plots), c("infections", "reports", "R", "growth_rate", "summary"))
})

test_that("regional_epinow runs without error when given a very short timeout", {
  output <- capture.output(suppressMessages(
    out <- regional_epinow(
      reported_cases = cases,
      generation_time = generation_time_opts(generation_time),
      delays = delay_opts(reporting_delay),
      stan = stan_opts(
        samples = 1000, warmup = 100,
        cores = 1, chains = 2,
        control = list(adapt_delta = 0.8),
        max_execution_time = 1
      ), logs = NULL, verbose = FALSE
    )
  ))
  expect_true(all(vapply(out$regional, function(x) !is.null(x$error), TRUE)))
  output <- capture.output(suppressMessages(
    out <- regional_epinow(
      reported_cases = cases,
      generation_time = generation_time_opts(generation_time),
      delays = delay_opts(reporting_delay),
      stan = stan_opts(
        samples = 1000, warmup = 100,
        cores = 1, chains = 2,
        control = list(adapt_delta = 0.8),
        max_execution_time = 1, future = TRUE
      ), logs = NULL, verbose = FALSE
    )
  ))
  expect_true(all(vapply(out$regional, function(x) !is.null(x$error), TRUE)))
})


test_that("regional_epinow produces expected output when run with region specific settings", {
  gp <- opts_list(gp_opts(), cases)
  gp <- update_list(gp, list(realland = NULL))
  rt <- opts_list(rt_opts(), cases, realland = rt_opts(rw = 7))
  out <- suppressWarnings(
    regional_epinow(
      reported_cases = cases,
      generation_time = generation_time_opts(generation_time),
      delays = delay_opts(reporting_delay),
      rt = rt, gp = gp,
      stan = stan_opts(
        samples = 100, warmup = 100,
        cores = 1, chains = 2,
        control = list(adapt_delta = 0.8)
      ),
      logs = NULL, verbose = FALSE
    )
  )
  expect_equal(names(out$regional), c("testland", "realland"))
  expect_equal(names(out$summary), c(
    "latest_date", "results", "summarised_results", "summary_plot",
    "summarised_measures", "reported_cases", "high_plots", "plots"
  ))
  expect_equal(names(out$regional$realland), c("estimates", "estimated_reported_cases", "summary", "plots", "timing"))
  expect_type(out$regional$realland$timing, "double")
  df_non_zero(out$regional$realland$estimates$samples)
  df_non_zero(out$regional$realland$estimates$summarised)
  df_non_zero(out$regional$realland$estimated_reported_cases$samples)
  df_non_zero(out$regional$realland$estimated_reported_cases$summarised)
  df_non_zero(out$regional$realland$summary)
  expect_equal(names(out$regional$realland$plots), c("infections", "reports", "R", "growth_rate", "summary"))
})

Try the EpiNow2 package in your browser

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

EpiNow2 documentation built on Sept. 26, 2023, 5:11 p.m.