test_that("input classes", {
expect_error(calculate_allocation(sraster = "error", nSamp = 100), "'sraster' must be type SpatRaster.")
expect_error(calculate_allocation(sraster = sraster, nSamp = 100, existing = "error"), "'existing' must be a data.frame or sf object.")
expect_error(calculate_allocation(sraster = sraster, nSamp = 100, existing = existing.df.n), "'existing' must have an attribute named 'strata'. Consider using extract_strata().")
})
test_that("output df names", {
expect_named(calculate_allocation(sraster = sraster, nSamp = 100, existing = existing.df), c("strata", "total", "need"))
expect_named(calculate_allocation(sraster = sraster, nSamp = 100), c("strata", "total"))
})
test_that("Expect output", {
expect_true(nrow(calculate_allocation(sraster = sraster, nSamp = 100)) == 4)
})
test_that("proportional allocation", {
expect_equal(sum(calculate_allocation(sraster = sraster, nSamp = 100)$total), 100L)
expect_message(calculate_allocation(sraster = sraster, nSamp = 100), "Implementing proportional allocation of samples.")
expect_message(calculate_allocation(sraster = sraster, nSamp = 101, force = TRUE), "Forcing 101 total samples.")
})
test_that("optimal allocation", {
expect_equal(sum(calculate_allocation(sraster = sraster, allocation = "optim", mraster = mraster$zq90, nSamp = 100, force = TRUE)$total), 100L)
expect_message(calculate_allocation(sraster = sraster, allocation = "optim", mraster = mraster$zq90, nSamp = 100, force = TRUE), "Implementing optimal allocation of samples based on variability of 'zq90'")
expect_error(calculate_allocation(sraster = sraster, allocation = "optim", nSamp = 100), "'mraster' must be supplied if 'allocation = optim'.")
expect_error(calculate_allocation(sraster = sraster, allocation = "optim", mraster = mraster, nSamp = 100), "Multiple layers detected in 'mraster'. Please define a singular band for allocation.")
})
test_that("manual allocation", {
expect_equal(sum(calculate_allocation(sraster = sraster, allocation = "manual", weights = weights, nSamp = 100)$total), 100L)
expect_message(calculate_allocation(sraster = sraster, allocation = "manual", weights = weights, nSamp = 100), "Implementing allocation of samples based on user-defined weights.")
expect_error(calculate_allocation(sraster = sraster, allocation = "manual", weights = 1, nSamp = 100), "'weights' must be the same length as the number of strata in 'sraster'.")
expect_error(calculate_allocation(sraster = sraster, allocation = "manual", weights = c(1, 2, 3, 4), nSamp = 100), "'weights' must add up to 1.")
})
test_that("equal allocation", {
expect_equal(sum(calculate_allocation(sraster = sraster, allocation = "equal", nSamp = 100)$total), 400L)
expect_message(calculate_allocation(sraster = sraster, allocation = "equal", nSamp = 100), "Implementing equal allocation of samples.")
expect_message(calculate_allocation(sraster = sraster, allocation = "equal", nSamp = 100, force = TRUE), "`force = TRUE` has no effect when `allocation = equal'. Ignoring.")
})
test_that("Check error for incorrect class inputs", {
expect_error(calculate_allocation(sraster = sraster, nSamp = "A"))
expect_error(calculate_allocation(sraster = mraster, nSamp = 100))
expect_error(calculate_allocation(sraster = sraster, nSamp = 100, allocation = "error"))
expect_error(calculate_allocation(sraster = sraster, nSamp = 100, allocation = "manual", weights = "A"))
expect_error(calculate_allocation(sraster = sraster, nSamp = 100, allocation = "manual", weights = c(1, 2, 3, 4)))
expect_error(calculate_allocation(sraster = sraster, nSamp = 100, existing = TRUE))
expect_error(calculate_allocation(sraster = sraster, nSamp = 100, force = "error"))
})
test_that("Check error for incorrect class inputs", {
expect_message(calculate_allocation(sraster = sraster, nSamp = 100, weights = weights), "'weights' was specified but 'allocation = prop' - did you mean to use 'allocation = manual'?")
expect_message(calculate_allocation(sraster = sraster, nSamp = 100, mraster = mraster), "'mraster' was specified but 'allocation = prop' - did you mean to use 'allocation = optim'?")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.