context("environment")
test_that("environment constructor works as expected", {
expect_length(make_env(), 0)
# from environment
e <- new.env()
e$a <- 1
e$b <- 2
expect_message(from_env <- make_env(e))
expect_equal(from_env, e)
expect_is(make_env(new.env()), "environment")
# from named vector
from_vec <- make_env(c(a = 1, b = 2))
expect_length(from_vec, 2)
expect_equal(from_vec$a, 1)
expect_equal(from_vec$b, 2)
expect_error(make_env(c(a = 1, b = 2, 3))) # empty last name
expect_error(make_env(seq(10), seq(10)))
expect_error(expect_warning(make_env(keys = seq(10), seq(10))))
expect_error(make_env(keys = seq(10), values = seq(10)))
# from a named list
from_list <- make_env(list(a = 1, d = dict()))
expect_length(from_list, 2)
expect_equal(from_list$a, 1)
expect_is(from_list$d, "dict")
expect_error(make_env(list(a = 1, "x"))) # empty name for "x"
# from explicit keys/values
from_kv <- make_env(values = c(1, 3), keys = c("a", "b"))
expect_length(from_kv, 2)
expect_equal(from_kv$a, 1)
expect_equal(from_kv$b, 3)
expect_error(make_env(values = c(1, 3), keys = c("a", "b", "c"))) # unequal length
expect_warning(make_env(keys = "x", values = 1, blah = 1))
# from 2 arguments
from_2args <- make_env(c("a", "b"), c(1, 3))
expect_length(from_2args, 2)
expect_equal(from_2args$a, 1)
expect_equal(from_2args$b, 3)
expect_error(make_env(c(1, 3), c("a", "b", "c"))) # unequal length
expect_warning(make_env(keys = "x", 1))
expect_warning(make_env("x", values = 1))
# from named arguments
from_nargs <- make_env(a = 1, b = 5L, c = new.env(), d = dict())
expect_length(from_nargs, 4)
expect_equal(from_nargs$a, 1)
expect_equal(from_nargs$b, 5L)
expect_is(from_nargs$c, "environment")
expect_is(from_nargs$d, "dict")
# get the nested dict
d <- from_nargs[["d"]]
d$set("out", "i was set outside")
# set by reference - the nested dict affected
expect_equal(from_nargs$d$get("out"), "i was set outside")
# from a single named argument
from_1arg <- make_env(x = c(single = "arg"))
expect_length(from_1arg, 1)
expect_equal(from_1arg$x, c(single = "arg"))
# other cases should throw an error
expect_error(make_env(1, 2, 3))
expect_error(make_env("x" = 1, "y" = 2, "z"))
expect_error(make_env(c("x" = 1, "y" = 2, "z")))
expect_error(make_env(list(x = 1, y = 2, "z")))
expect_error(make_env("x"))
expect_error(make_env(seq(1), seq(2), seq(3)))
expect_error(make_env(keys = seq(1), values = seq(2), seq(3)))
})
test_that("values correctly retrieved from an environment", {
e <- new.env()
e$x <- 1
e[["y"]] <- 2
expect_equal(get_from_env(e, "x", NULL), 1)
expect_equal(get_from_env(e, "y", NULL), 2)
expect_equal(get_from_env(e, c("x", "y"), NULL), list(1, 2))
expect_equal(get_from_env(e, c("z", "y"), "default"), list("default", 2))
expect_equal(get_from_env(e, c("z"), "szymon"), "szymon")
expect_equal(get_from_env(e, "x", "szymon"), 1)
expect_error(get_from_env(e, 1.5, NULL))
expect_error(get_from_env(e, 1L, "x"))
expect_error(get_from_env(e, sum, "szymon"))
})
test_that("values correctly set in an environment", {
e <- new.env()
set_in_env("x", 1L, e)
expect_equal(e$x, 1L)
set_in_env(c("y", "z"), c(2, 3), e)
expect_equal(e$y, 2)
expect_equal(e$z, 3)
expect_error(set_in_env(c("x", "x", "y"), seq(3)))
set_in_env(c("t", "szymon"), list("val", sum), e)
expect_equal(e$t, "val")
expect_equal(e$szymon, sum)
set_in_env(c("lgl", "x"), c(TRUE, FALSE), e)
expect_true(e$lgl, TRUE)
expect_false(e$x) # overwritten from first set
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.