test_that("perturb_trans works correctly", { x_sens <- perturb_trans(mat_u, mat_f) expect_type(x_sens, "list") expect_identical(length(x_sens), 5L) expect_true(is.na(x_sens$clonality)) x_elas <- perturb_trans(mat_u, mat_f, type = "elasticity") expect_type(x_elas, "list") expect_identical(length(x_elas), 5L) expect_true(is.na(x_elas$clonality)) x_f_zero <- suppressWarnings( perturb_trans(mat_u, matF = mat_f_zero, matC = mat_c) ) expect_true(is.na(x_f_zero$fecundity)) # check no stasis/retrogression in age-only model x_age <- perturb_trans(mat_u_age, mat_f_age) expect_true(is.na(x_age$stasis)) expect_true(is.na(x_age$retro)) # check works with custom demog_stat function fn_custom <- function(x) { return(1) } x_cust <- perturb_trans(mat_u, mat_f, mat_c, demog_stat = "fn_custom") expect_true(all(x_cust == 0)) }) test_that("perturb_trans warns and fails gracefully", { notfn <- "rtpsqwpaclfkhamw" expect_error(perturb_trans(mat_u, mat_f, demog_stat = notfn)) })