test_that("matchDim works", { mp <- new.magpie( cells_and_regions = c("AAA", "BBB", "CCC"), years = paste0("y", c(2000, 2005, 2010)), names = c("foo", "bar", "baz"), sets = c("region", "t", "name") ) mp2 <- new.magpie( cells_and_regions = c("BBB", "CCC", "DDD"), years = paste0("y", c(2000, 2010, 2020)), names = c("foo", "bar", "qux"), sets = c("region", "t", "name") ) # reject non-magpie objects ---- expect_error(matchDim(data.frame(), mp2), regexp = "must be a magpie object, not") expect_error(matchDim(mp, data.frame()), regexp = "must be a magpie object or NULL, not") # ignore NULL reference ---- expect_identical(matchDim(mp, NULL), mp) # match all dimensions ---- x <- matchDim(mp, mp2) expect_equal(getItems(x, dim = 1), c("BBB", "CCC", "DDD")) expect_equal(getItems(x, dim = 2), c("y2000", "y2010", "y2020")) expect_equal(getItems(x, dim = 3), c("foo", "bar", "qux")) # match only spatial ---- x <- matchDim(mp, mp2, dim = 1) expect_equal(getItems(x, dim = 1), c("BBB", "CCC", "DDD")) expect_equal(getItems(x, dim = 2), c("y2000", "y2005", "y2010")) expect_equal(getItems(x, dim = 3), c("foo", "bar", "baz")) # match only temporal ---- x <- matchDim(mp, mp2, dim = 2) expect_equal(getItems(x, dim = 1), c("AAA", "BBB", "CCC")) expect_equal(getItems(x, dim = 2), c("y2000", "y2010", "y2020")) expect_equal(getItems(x, dim = 3), c("foo", "bar", "baz")) # match only third ---- x <- matchDim(mp, mp2, dim = 3) expect_equal(getItems(x, dim = 1), c("AAA", "BBB", "CCC")) expect_equal(getItems(x, dim = 2), c("y2000", "y2005", "y2010")) expect_equal(getItems(x, dim = 3), c("foo", "bar", "qux")) # reject objects with varying subdimensions ---- mp3 <- addDim(mp2, dim = 1.2, dimName = "subregion", "yyy") expect_error(matchDim(mp, mp3, dim = 1), regexp = "magclass objects x and ref have different number of subdimensions in dimension 1") expect_no_error(matchDim(mp, mp3, dim = 2)) })