tests/testthat/test-convergence.R

p <- maxample("pop")
a <- maxample("animal")

test_that("convergence calculation works", {
 expect_error(convergence(1, 1), "no magpie object")
 expect_error(convergence(as.magpie(1), array(1)), "aim is no magpie object")
 expect_error(convergence(p, a), "regions have to be the same")
 expect_error(convergence(a, a[, , 1:3]), "dimnames have to be the same")
 expect_error(convergence(a, a[, 1:3, ]), "need the same timesteps")
 expect_error(convergence(p, p, 123345), "wrong year format")
 expect_error(convergence(p, p, direction = "unknown"), "Illegal direction")
 expect_error(convergence(p, p, type = "doesnotexist"), "does not exist")
 ref <- new("magpie", .Data = structure(c(553, 1281, 554, 349, 716, 293, 1, 2, 3),
                                        .Dim = c(3L, 3L, 1L),
                                        .Dimnames = list(i = c("AFR", "CPA", "EUR"),
                                                         t = c("y1995", "y2005", "y2015"), scenario = "A2")))
 p0 <- p[1:3, 1:3, 1]
 expect_identical(round(convergence(p0, 1:3, type = "linear")), ref)
 ref[, , ] <- c(553, 1281, 554, 345, 709, 290, 1, 2, 3)
 expect_identical(round(convergence(p0, 1:3, type = "s")), ref)
 ref[, , ] <- c(553, 1281, 554, 310, 636, 260, 82, 140, 57)
 expect_identical(round(convergence(p0, 1:3, type = "smooth")), ref)
 ref[, , ] <- c(553, 1281, 554, 262, 537, 220, 1, 2, 3)
 expect_identical(round(convergence(p0, 1:3, type = "decay")), ref)
 ref[, , ] <- c(553, 1281, 554, 848, 1430, 791, 1000, 1518, 1000)
 expect_identical(round(convergence(p0, 1000, direction = "up", type = "linear")), ref)
 ref[, , ] <- c(553, 1281, 554, 696, 1215, 582, 889, 1000, 594)
 p1000 <- p0[, 1, ]
 p1000[, , ] <- 1000
 expect_identical(round(convergence(p0, p1000, direction = "down", type = "linear")), ref)

 # test atypical region names in combination with numeric aim
 p2 <- p[, , 1]
 getItems(p2, dim = 1) <- paste0(getItems(p2, dim = 1), "XYZ")
 p20 <- p2
 p20[, , ] <- 0
 expect_identical(convergence(p2, 0), convergence(p2, p20))
})

Try the magclass package in your browser

Any scripts or data that you put into this service are public.

magclass documentation built on July 9, 2023, 7:03 p.m.