tests/testthat/test-stan-secondary.R

skip_on_cran()
skip_on_os("windows")

# test primary reports and observations
reports <- rep(10, 20)
obs <- rep(4, 20)
delay_rev_pmf <- reverse_mf(discretised_pmf(c(log(3), 0.1), 5, 0))
scaled <- reports * 0.1
convolved <- rep(1e-5, 20) + convolve_to_report(scaled, delay_rev_pmf, 0)

check_equal <- function(args, target, dof = 0, dev = FALSE) {
  out <- do.call(calculate_secondary, args)
  out <- round(out, dof)
  if (dev) {
    return(out)
  }
  expect_equal(out, target)
}

test_that("calculate_secondary can calculate prevalence as expected", {
  check_equal(
    args = list(scaled, convolved, obs, 1, 1, 1, 1, 1, 20),
    target = c(1, 5, 5.3, 5.7, rep(6, 16)), dof = 1
  )
})

test_that("calculate_secondary can calculate incidence as expected", {
  check_equal(
    args = list(scaled, convolved, obs, 0, 1, 1, 1, 1, 20),
    target = c(1, 1, 1.3, 1.7, rep(2.0, 16)), dof = 1
  )
})

test_that("calculate_secondary can calculate incidence as expected", {
  check_equal(
    args = list(scaled, convolved, obs, 0, 1, 1, 1, 1, 20),
    target = c(1, 1, 1.3, 1.7, rep(2.0, 16)), dof = 1
  )
})

test_that("calculate_secondary can calculate incidence using only historic reports", {
  check_equal(
    args = list(scaled, convolved, obs, 0, 1, 1, 0, 1, 20),
    target = c(0, 0, 0, rep(1, 17)), dof = 0
  )
})

test_that("calculate_secondary can calculate incidence using only current reports", {
  check_equal(
    args = list(scaled, convolved, obs, 0, 0, 1, 1, 1, 20),
    target = rep(1, 20), dof = 0
  )
})

test_that("calculate_secondary can switch into prediction mode as expected", {
  check_equal(
    args = list(scaled, convolved, obs, 1, 0, 1, 1, 1, 20),
    target = c(1, rep(5, 19)), dof = 0
  )
  check_equal(
    args = list(scaled, convolved, obs, 1, 0, 1, 1, 1, 10),
    target = c(1, rep(5, 9), 6:15), dof = 0
  )
})
epiforecasts/EpiNow2 documentation built on May 13, 2024, 3:11 a.m.