test_stan_delays <- function(generation_time = generation_time_opts(Fixed(1)), delays = delay_opts(), truncation = trunc_opts(), params = c()) { data <- EpiNow2:::create_stan_delays( generation_time = generation_time, delays = delays, truncation = truncation, time_points = 10 ) return(unlist(unname(data[params]))) } delay_params <- c("delay_params_mean", "delay_params_sd", "delay_max", "delay_np_pmf") test_that("generation times can be specified in different ways", { expect_equal( test_stan_delays(params = delay_params), c(0, 1, 1, 1) ) expect_equal( test_stan_delays( generation_time = generation_time_opts(Fixed(value = 3)), params = delay_params ), c(0, 0, 0, 1, 1, 1) ) expect_equal( round(test_stan_delays( generation_time = generation_time_opts( LogNormal(meanlog = 3, sdlog = 1, max = 4) ), params = delay_params ), digits = 2), c(0.01, 0.08, 0.20, 0.32, 0.40, 1.00, 1.00) ) }) test_that("delay parameters can be specified in different ways", { expect_equal( tail(test_stan_delays( delays = delay_opts(Fixed(value = 3)), params = delay_params ), n = -2), c(0, 0, 0, 1, 1) ) expect_equal( tail(round(test_stan_delays( delays = delay_opts( LogNormal(meanlog = 3, sdlog = 1, max = 4) ), params = delay_params ), digits = 2), n = -2), c(0.01, 0.08, 0.20, 0.32, 0.40, 1.00) ) }) test_that("truncation parameters can be specified in different ways", { expect_equal( tail(round(test_stan_delays( truncation = trunc_opts( dist = LogNormal(meanlog = 3, sdlog = 1, max = 4) ), params = delay_params ), digits = 2), n = -2), c(1.00, 0.01, 0.08, 0.20, 0.32, 0.40) ) }) test_that("distributions incompatible with stan models are caught", { expect_error(generation_time_opts( Gamma(2, 2) ), "maximum") expect_error(delay_opts( Normal(2, 2, max = 10) ), "lognormal") })