test_that("pollination value follows the dependence-ratio method", { pv <- pollination_value(c("a", "b"), c(10, 20), c(2, 1), c("essential", "modest"), decline = 0.5) expect_equal(pv$by_crop$pollination_value, c(20 * 0.95, 20 * 0.25)) expect_equal(pv$summary[["vulnerability_ratio"]], (19 + 5) / 40) expect_equal(pv$summary[["value_at_risk"]], 12) pn <- pollination_value(c("a", "b"), c(10, 20), c(2, 1), c(0.95, 0.25)) expect_equal(pn$summary[["ipev"]], 24) expect_error(pollination_value("a", 1, 1, "huge")) expect_error(pollination_value("a", 1, 1, 1.5)) expect_output(print(pv), "Vulnerability ratio") }) test_that("replacement cost converts nutrients and fertiliser correctly", { rc <- replacement_cost(100, c(N = 1, P = 1, K = 1), fertiliser_price = c(N = 10, P = 10, K = 10), fertiliser_grade = c(N = 0.5, P = 0.5, K = 0.5)) b <- rc$by_nutrient expect_equal(b$cost, c(100 / 0.5 * 10, 100 * 2.2914 / 0.5 * 10, 100 * 1.2046 / 0.5 * 10)) expect_equal(rc$total, sum(b$cost)) oc <- replacement_cost(1000, c(OC = 10), fertiliser_price = c(N = 1), carbon_price = 100) expect_equal(oc$total, 10 * 44 / 12 * 100) expect_error(replacement_cost(1, c(OC = 1), c(N = 1))) expect_error(replacement_cost(1, c(Z = 1), c(N = 1))) expect_output(print(rc), "Total replacement cost") }) test_that("carbon value discounts correctly", { cv <- carbon_value(c(10, 10), scc = 100, discount_rate = 0.1) expect_equal(cv$present_value, 1000 / 1.1 + 1000 / 1.21) cc <- carbon_value(c(12, 12), scc = 1, discount_rate = 0, unit = "C") expect_equal(cc$total_flow, 88) cg <- carbon_value(c(1, 1), scc = 100, scc_growth = 0.1, discount_rate = 0) expect_equal(cg$by_year$scc, c(100, 110)) expect_equal(carbon_value(c(1, 1), 50, discount_rate = 0)$annual_equivalent, 50) expect_error(carbon_value(1:3, scc = 1:2)) expect_output(print(cv), "Present value") })