tests/testthat/test-setInitialValues.R

params <- NS_params
sim <- project(params, t_max = 0.1, t_save = 0.1, effort = 1)

test_that("We can set and get initial values from sim object", {
    no_t <- dim(sim@effort)[[1]]
    gear_names <- names(params@initial_effort)
    expect_identical(initialN(sim), initialN(params))
    expect_identical(initialNResource(sim), initialNResource(params))
    initialN(params) <- params@metab
    expect_identical(initialN(params), params@metab)
    initialNResource(params) <- params@cc_pp
    expect_identical(initialNResource(params), params@cc_pp)
    params <- setInitialValues(params, sim)
    expect_identical(finalN(sim), initialN(params))
    expect_identical(finalNResource(sim), initialNResource(params))
    expect_identical(sim@effort[no_t, ], params@initial_effort)
    expect_named(params@initial_effort, gear_names)
    names(params@initial_effort) <- NULL
    expect_error(setInitialValues(params, sim),
                 "The gears in the simulation in `sim` have different names")
    params@initial_effort <- 1
    expect_error(setInitialValues(params, sim),
                 "The number of gears in the simulation in `sim` is different")
})

test_that("setInitialValues gives correct errors", {
    params1 <- newMultispeciesParams(NS_species_params, no_w = 20)
    sim <- project(params1, t_max = 2, dt = 1)
    params2 <- newMultispeciesParams(NS_species_params, no_w = 30)
    expect_error(setInitialValues(params2, sim),
                 "The consumer size spectrum of the simulation in `sim` has a different size from that in `params`")
    
    params3 <- newMultispeciesParams(NS_species_params, no_w = 20,
                                     min_w_pp = 1e-4)
    expect_error(setInitialValues(params3, sim),
                 "The resource size spectrum of the simulation in `sim` has a different size from that in `params`.")
    params4 <- setComponent(params1, "test",
                            initial_value = 0, dynamics_fun = "sum")
    expect_error(setInitialValues(params4, sim),
                 "The number of other components in the simulation in `sim` is different from that in `params`.")
    gear_params(params1)$gear[1] <- "test"
    expect_error(setInitialValues(params1, sim),
                 "The number of gears in the simulation in `sim` is different from that in `params`.")
    gear_params(params1)$gear <- "test"
    expect_error(setInitialValues(params1, sim),
                 "The gears in the simulation in `sim` have different names from those in `params`.")
    
})

test_that("Can set initial values in a model with a single species", {
    species_params <- NS_species_params[1, ]
    params <- newMultispeciesParams(species_params)
    sim <- project(params, t_max = 0.1, t_save = 0.1)
    p <- setInitialValues(params, sim)
    expect_identical(finalN(sim), initialN(p))
})

test_that("Can set initial values in a model with a single other component", {
    e <- globalenv()
    e$test_dyn <- function(params, ...) {
        111
    }
    params <- setComponent(params, 
                           component = "test",
                           initial_value = 1,
                           dynamics_fun = "test_dyn")
    sim <- project(params, t_max = 0.1, t_save = 0.1)
    p <- setInitialValues(params, sim)
    expect_identical(initialNOther(p), list(test = 111))
})

test_that("setInitialValues averages correctly over time range", {
    time_sel <- c(24:33)
    time_range <- getTimes(NS_sim)[time_sel]
    # arithmetic mean
    params <- setInitialValues(NS_sim@params, NS_sim, time_range = time_range)
    expected_n <- mean(NS_sim@n[time_sel, 1, 50])
    expect_equal(params@initial_n[1, 50], expected_n)
    # geometric mean
    params <- setInitialValues(NS_sim@params, NS_sim, time_range = time_range,
                               geometric_mean = TRUE)
    expected_n <- exp(mean(log(NS_sim@n[time_sel, 1, 50])))
    expect_equal(params@initial_n[1, 50], expected_n)
})

Try the mizer package in your browser

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

mizer documentation built on April 26, 2023, 5:12 p.m.