Nothing
testMagpie <- function(regions = "AFR.1", years = "y2000", names = "test", values = c(123), ...) {
# The special handling of null is necessary, as new.magpie creates 0-length
# magpie objects when arguments are NULL
if (is.null(regions)) regions <- "dummy"
if (is.null(years)) years <- 0
if (is.null(names)) names <- "dummy"
newObject <- new.magpie(regions, years, names, values, ...)
if (all(regions == "dummy")) newObject <- collapseDim(newObject, dim = 1)
if (all(years == 0)) newObject <- collapseDim(newObject, dim = 2)
if (all(names == "dummy")) newObject <- collapseDim(newObject, dim = 3)
names(dimnames(newObject)) <- c("region", "year", "data")
return(newObject)
}
expect_pmin_result <- function(a, b, result) { # nolint: object_name_linter. Mimics testthat style.
pminResult <- pmin(a, b)
expect_equal(!!result, !!pminResult)
return(pminResult)
}
test_that("pmin on simple magpie objects", {
# Equal
expect_pmin_result(testMagpie(values = 123),
testMagpie(values = 123),
testMagpie(values = 123))
# One is smaller
expect_pmin_result(testMagpie(values = 121),
testMagpie(values = 123),
testMagpie(values = 121))
})
test_that("variadic pmin", {
# Single argument is fine, but simply returns the same object
expect_equal(pmin(testMagpie()), testMagpie())
# More than two arguments are also fine
expect_equal(pmin(testMagpie(values = 123),
testMagpie(values = 1),
testMagpie(values = 123)),
testMagpie(values = 1))
})
test_that("pmin on magpie objects with different orderings in one dimension", {
expect_pmin_result(testMagpie(regions = c("AFR.1", "AFR.2"), values = c(120, 345)),
testMagpie(regions = c("AFR.2", "AFR.1"), values = c(340, 123)),
testMagpie(regions = c("AFR.1", "AFR.2"),
values = c(120, 340)))
expect_pmin_result(testMagpie(years = c("2000", "2001"), values = c(120, 345)),
testMagpie(years = c("2001", "2000"), values = c(340, 123)),
testMagpie(years = c("2000", "2001"), values = c(120, 340)))
expect_pmin_result(testMagpie(names = c("test1", "test2"), values = c(120, 345)),
testMagpie(names = c("test2", "test1"), values = c(340, 123)),
testMagpie(names = c("test1", "test2"), values = c(120, 340)))
})
test_that("pmin on magpie objects with different orderings in all dimensions", {
expect_pmin_result(testMagpie(regions = c("AFR.1", "AFR.2"),
years = c("2000", "2001"),
names = c("test1", "test2"),
values = c(1, 2, 3, 4, 5, 6, 7, 8)),
testMagpie(regions = c("AFR.2", "AFR.1"),
years = c("2001", "2000"),
names = c("test2", "test1"),
values = c(1, 2, 3, 4, 5, 6, 7, 8)),
testMagpie(regions = c("AFR.1", "AFR.2"),
years = c("2000", "2001"),
names = c("test1", "test2"),
values = c(1, 2, 3, 4, 4, 3, 2, 1)))
# Sanity check: base::pmin fails in the same scenario as above
expect_failure(expect_equal(base::pmin(testMagpie(regions = c("AFR.1", "AFR.2"),
years = c("2000", "2001"),
names = c("test1", "test2"),
values = c(1, 2, 3, 4, 5, 6, 7, 8)),
testMagpie(regions = c("AFR.2", "AFR.1"),
years = c("2001", "2000"),
names = c("test2", "test1"),
values = c(1, 2, 3, 4, 5, 6, 7, 8))),
testMagpie(regions = c("AFR.1", "AFR.2"),
years = c("2000", "2001"),
names = c("test1", "test2"),
values = c(1, 2, 3, 4, 4, 3, 2, 1))))
})
test_that("pmin allows different items, if there is only one item in that dimension", {
# A single item in one dimension
expect_pmin_result(testMagpie(regions = c("A"), years = 2001:2002, names = c("test1", "test2"),
values = c(3, 3, 3, 3)),
testMagpie(regions = c("B"), years = 2001:2002, names = c("test1", "test2"),
values = c(1, 2, 3, 4)),
testMagpie(regions = NULL, years = 2001:2002, names = c("test1", "test2"),
values = c(1, 2, 3, 3)))
expect_pmin_result(testMagpie(regions = c("A", "B"), years = 2001, names = c("test1", "test2"),
values = c(3, 3, 3, 3)),
testMagpie(regions = c("A", "B"), years = 2002, names = c("test1", "test2"),
values = c(1, 2, 3, 4)),
testMagpie(regions = c("A", "B"), years = NULL, names = c("test1", "test2"),
values = c(1, 2, 3, 3)))
expect_pmin_result(testMagpie(regions = c("A", "B"), years = 2001:2002, names = c("test1"),
values = c(3, 3, 3, 3)),
testMagpie(regions = c("A", "B"), years = 2001:2002, names = c("test2"),
values = c(1, 2, 3, 4)),
testMagpie(regions = c("A", "B"), years = 2001:2002, names = NULL,
values = c(1, 2, 3, 3)))
# A single item in two dimensions
expect_pmin_result(testMagpie(regions = c("A"), years = 2001:2002, names = c("test1"),
values = c(3, 3)),
testMagpie(regions = c("B"), years = 2001:2002, names = c("test2"),
values = c(1, 4)),
testMagpie(regions = NULL, years = 2001:2002, names = NULL,
values = c(1, 3)))
expect_pmin_result(testMagpie(regions = c("A"), years = 2001, names = c("test1", "test2"),
values = c(3, 3)),
testMagpie(regions = c("B"), years = 2002, names = c("test1", "test2"),
values = c(1, 4)),
testMagpie(regions = NULL, years = NULL, names = c("test1", "test2"),
values = c(1, 3)))
expect_pmin_result(testMagpie(regions = c("A", "B"), years = 2001, names = c("test1"),
values = c(3, 3)),
testMagpie(regions = c("A", "B"), years = 2002, names = c("test2"),
values = c(1, 4)),
testMagpie(regions = c("A", "B"), years = NULL, names = NULL,
values = c(1, 3)))
# A single item in all three dimensions
expect_pmin_result(testMagpie(regions = c("A"), years = 2001, names = c("test1"),
values = c(3)),
testMagpie(regions = c("B"), years = 2002, names = c("test2"),
values = c(2)),
testMagpie(regions = NULL, years = NULL, names = NULL,
values = c(2)))
# This also holds if one object has only one item and the other one has none
expect_pmin_result(testMagpie(regions = NULL, years = 2001:2002, names = c("test1", "test2"),
values = c(3, 3, 3, 3)),
testMagpie(regions = c("B"), years = 2001:2002, names = c("test1", "test2"),
values = c(1, 2, 3, 4)),
testMagpie(regions = NULL, years = 2001:2002, names = c("test1", "test2"),
values = c(1, 2, 3, 3)))
expect_pmin_result(testMagpie(regions = NULL, years = NULL, names = c("test1", "test2"),
values = c(3, 3)),
testMagpie(regions = c("B"), years = 2001, names = c("test1", "test2"),
values = c(1, 4)),
testMagpie(regions = NULL, years = NULL, names = c("test1", "test2"),
values = c(1, 3)))
# This also holds if a dimension is not present in one object and the other contains only one value
# The following tests use collapseDim to create objects with "removed" dimensions. The single items
# in these testMagpie objects are only placeholders so that collapseDim "removes" the dimension.
expect_pmin_result(collapseDim(testMagpie(regions = "GLO", years = 2001:2002, names = c("test1", "test2"),
values = c(3, 3, 3, 3))),
testMagpie(regions = c("B"), years = 2001:2002, names = c("test1", "test2"),
values = c(1, 2, 3, 4)),
collapseDim(testMagpie(regions = "GLO", years = 2001:2002, names = c("test1", "test2"),
values = c(1, 2, 3, 3))))
expect_pmin_result(collapseDim(testMagpie(regions = "GLO", years = 1, names = c("test1", "test2"),
values = c(3, 3))),
testMagpie(regions = c("B"), years = 2001, names = c("test1", "test2"),
values = c(1, 4)),
collapseDim(testMagpie(regions = "GLO", years = 1, names = c("test1", "test2"),
values = c(1, 3))))
})
test_that("pmin special cases", {
# pmin with a single number
expect_pmin_result(testMagpie(years = 2001:2002, values = c(1, 3)),
2,
testMagpie(years = 2001:2002, values = c(1, 2)))
expect_pmin_result(2,
testMagpie(years = 2001:2002, values = c(1, 3)),
c(1, 2))
# pmin with a vector
expect_pmin_result(c(2, 5),
testMagpie(years = 2001:2002, values = c(1, 3)),
c(1, 3))
expect_error(pmin(testMagpie(regions = "A"),
testMagpie(regions = c("A", "B"))),
"pmin expects magpie objects with equal dimensions")
expect_error(pmin(testMagpie(years = "2000"),
testMagpie(years = c("2000", "2001"))),
"pmin expects magpie objects with equal dimensions")
expect_error(pmin(testMagpie(names = "A"),
testMagpie(names = c("A", "B"))),
"pmin expects magpie objects with equal dimensions")
expect_error(pmin(testMagpie(names = c("A", "B")),
testMagpie(names = c("C", "D"))),
"pmin expects magpie objects with the same items in all dimensions")
})
test_that("pmax simple test", {
# As pmin and pmax use the same underlying function to rearrange data,
# a basic test whether pmax works is sufficient.
expect_equal(pmax(testMagpie(values = 5), testMagpie(values = 10), testMagpie(values = 5)),
testMagpie(values = 10))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.