test_that("Monte Carlo simulation is reproducible", { x <- agri_pam_example() one <- pam_monte_carlo(x, cv = 0.1, n = 100, seed = 99, index = "Paddy") two <- pam_monte_carlo(x, cv = 0.1, n = 100, seed = 99, index = "Paddy") expect_s3_class(one, "agri_pam_mc") expect_equal(one$draws, two$draws) expect_equal(nrow(one$draws), 100) expect_equal(nrow(one$summary), 10) expect_equal(nrow(one$probabilities), 4) expect_true(all(one$probabilities$probability >= 0 & one$probabilities$probability <= 1)) }) test_that("a supplied seed does not alter the caller RNG state", { set.seed(1234) before <- .Random.seed invisible(pam_monte_carlo( agri_pam_example(), cv = 0.1, n = 20, seed = 5, index = "Paddy" )) expect_identical(.Random.seed, before) }) test_that("named CV values hold omitted components fixed", { x <- agri_pam_example() mc <- pam_monte_carlo( x, cv = c(social_revenue = 0.2), n = 100, seed = 2, index = "Paddy" ) expect_gt(stats::sd(mc$draws$social_revenue), 0) expect_equal(unique(mc$draws$private_revenue), 123400) expect_equal(unique(mc$draws$social_domestic_factors), 71000) }) test_that("zero uncertainty reproduces the deterministic PAM", { x <- agri_pam_example() mc <- pam_monte_carlo(x, cv = 0, n = 20, seed = 1, index = "Paddy") expect_equal(unique(mc$draws$private_profit), 27600) expect_equal(unique(mc$draws$drc), pam_indicators(x)$drc[1]) expect_equal(as.data.frame(mc), mc$draws) }) test_that("Monte Carlo arguments are validated", { x <- agri_pam_example() expect_error(pam_monte_carlo(x, cv = -0.1, n = 10), "non-negative") expect_error(pam_monte_carlo(x, cv = 0.1, n = 1), "greater than") bad <- diag(6) bad[1, 2] <- 0.5 expect_error(pam_monte_carlo(x, n = 10, correlation = bad), "symmetric") })