test_that("empty paramset", {
ps = makeParamSet()
expect_equal(getParamIds(ps), character(0))
expect_equal(getParamLengths(ps), integer(0))
expect_equal(getLower(ps), numeric(0))
expect_equal(getUpper(ps), numeric(0))
expect_equal(getValues(ps), list())
expect_output(print(ps), "Empty parameter set.")
expect_true(isEmpty(ps))
})
test_that("mixed paramset", {
ps = makeParamSet(
makeNumericParam("u", lower = 1),
makeIntegerParam("v", lower = 1, upper = 2),
makeDiscreteParam("w", values = 1:2),
makeLogicalParam("x"),
makeDiscreteVectorParam("y", len = 2, values = c("a", "b"))
)
expect_equal(getParamIds(ps), c("u", "v", "w", "x", "y"))
expect_equal(getParamLengths(ps), c(u = 1L, v = 1L, w = 1L, x = 1L, y = 2L))
expect_equal(getLower(ps), c(u = 1, v = 1L))
expect_equal(getUpper(ps), c(u = Inf, v = 2L))
values1 = list(1, 2)
names(values1) = 1:2
values2 = list("a", "b")
names(values2) = c("a", "b")
values3 = list(TRUE, FALSE)
names(values3) = c("TRUE", "FALSE")
expect_equal(getValues(ps), list(w = values1, x = values3, y = values2))
expect_output(print(ps), "u\\s*numeric")
})
test_that("mixed paramset 2", {
p1 = makeNumericParam(id = "x1", lower = -1L, upper = 1)
p2 = makeNumericParam(id = "x2", lower = 0, upper = Inf)
p3 = makeDiscreteParam(id = "x3", values = list(a = "char", b = 2L, c = 2.2, "e"))
ps = makeParamSet(p1, p2, p3)
expect_true(isFeasible(ps, list(0, 0, "char")))
expect_true(!isFeasible(ps, list(2, 0, "char")))
expect_equal(getLower(ps), c(x1 = -1, x2 = 0))
expect_equal(getUpper(ps), c(x1 = 1, x2 = Inf))
expect_true(isFeasible(ps, list(x3 = 2L, x1 = 0), filter = TRUE))
})
test_that("cannot build param set from wrong stuff", {
expect_error(makeParamSet(1), "Param")
expect_error(
makeParamSet(
makeNumericParam("x"),
makeNumericParam("x")
), "unique"
)
})
test_that("paramset with vector", {
ps = makeParamSet(
makeNumericParam("x", lower = 1),
makeIntegerVectorParam("y", len = 2, lower = 3L, upper = 9L)
)
expect_equal(getParamIds(ps), c("x", "y"))
expect_equal(getParamLengths(ps), c(x = 1L, y = 2L))
expect_equal(getParamIds(ps, repeated = TRUE, with.nr = FALSE), c("x", "y", "y"))
expect_equal(getParamIds(ps, repeated = TRUE, with.nr = TRUE), c("x", "y1", "y2"))
expect_equal(getLower(ps), c(x = 1, y = 3L, y = 3L))
expect_equal(getUpper(ps), c(x = Inf, y = 9L, y = 9L))
expect_true(is.list(getValues(ps)))
expect_equal(length(getValues(ps)), 0)
expect_output(print(ps), "x\\s*numeric")
})
test_that("list works", {
ps = makeParamSet(params = list(
makeNumericParam("u", lower = 1),
makeIntegerParam("v", lower = 1, upper = 2)
))
expect_equal(getParamIds(ps), c("u", "v"))
expect_output(print(ps), "u\\s*numeric")
})
test_that("combination with c works", {
ps1 = makeParamSet(
makeNumericParam("u", lower = 1),
makeIntegerVectorParam("v", len = 2, lower = 3L, upper = 9L)
)
ps2 = makeParamSet(
makeDiscreteParam("w", values = 1:2),
makeLogicalParam("x")
)
# ps with "difficult" name
ps3 = makeParamSet(
makeNumericParam("params")
)
ps = c(ps1, ps2)
expect_equal(length(ps$pars), 4)
expect_equal(getParamIds(ps), c(getParamIds(ps1), getParamIds(ps2)))
ps = c(ps1, ps3)
expect_equal(length(ps$pars), 3)
expect_equal(getParamIds(ps), c(getParamIds(ps1), getParamIds(ps3)))
})
test_that("cannot combine with overlapping names", {
ps1 = makeParamSet(
makeNumericParam("u")
)
ps2 = makeParamSet(
makeDiscreteParam("u", values = 1:2)
)
expect_error(c(ps1, ps2), "unique")
})
test_that("unknown length works", {
ps = makeParamSet(
makeNumericLearnerParam("u", lower = 2),
makeNumericVectorLearnerParam("v", len = NA, lower = 1)
)
expect_equal(getParamLengths(ps), c(u = 1, v = NA))
expect_true(isFeasible(ps, list(3, c(2))))
expect_true(isFeasible(ps, list(3, c(2, 4))))
expect_false(isFeasible(ps, list(3, c(2, 0))))
expect_error(sampleValue(ps), "Cannot sample")
})
test_that("makeNumericParamset", {
ps = makeNumericParamSet(lower = 10, len = 2, vector = TRUE)
expect_equal(getParamIds(ps), "x")
expect_equal(getParamLengths(ps), c(x = 2))
expect_equal(getLower(ps), c(x = 10, x = 10))
expect_equal(getUpper(ps), c(x = Inf, x = Inf))
ps = makeNumericParamSet(upper = 10, len = 2, vector = TRUE)
expect_equal(getParamIds(ps), "x")
expect_equal(getParamLengths(ps), c(x = 2))
expect_equal(getLower(ps), c(x = -Inf, x = -Inf))
expect_equal(getUpper(ps), c(x = 10, x = 10))
ps = makeNumericParamSet(id = "y", upper = 3, len = 2, vector = FALSE)
expect_equal(getParamIds(ps), c("y1", "y2"))
expect_equal(getParamLengths(ps), c(y1 = 1, y2 = 1))
expect_equal(getLower(ps), c(y1 = -Inf, y2 = -Inf))
expect_equal(getUpper(ps), c(y1 = 3, y2 = 3))
ps = makeNumericParamSet(lower = c(1, 2), vector = TRUE)
expect_equal(getLower(ps), c(x = 1, x = 2))
ps = makeNumericParamSet(lower = c(1, 4), upper = c(2, 7), vector = FALSE)
expect_equal(getLower(ps), c(x1 = 1, x2 = 4))
expect_equal(getUpper(ps), c(x1 = 2, x2 = 7))
})
test_that("requires works", {
ps = makeParamSet(
makeDiscreteParam("x", values = c("a", "b"), default = "a"),
makeNumericParam("y", requires = quote(x == "a")),
makeIntegerVectorParam("z", len = 2, requires = quote(x == "b"))
)
expect_true(isFeasible(ps, list(x = "a", y = 1, z = NA)))
expect_false(isFeasible(ps, list(x = "a", y = NA, z = 1)))
expect_false(isFeasible(ps, list(x = "a", y = NA, z = c(NA, NA))))
expect_false(isFeasible(ps, list(x = "b", y = 1, z = c(2, 2))))
expect_true(isFeasible(ps, list(x = "b", y = NA, z = c(2, 2))))
expect_true(isRequiresOk(ps, list(x = "a")))
expect_true(isRequiresOk(ps, list(x = "c"))) # out of bound is supposed to be ignored
expect_true(isRequiresOk(ps, list(y = 1)))
expect_error(isRequiresOk(ps, list(y = 1), use.defaults = FALSE))
expect_error(isRequiresOk(ps, list(y = 1, x = "b")), 'x == "a"')
})
test_that("requires chains work", {
ps = makeParamSet(
makeLogicalLearnerParam("a", default = FALSE),
makeLogicalLearnerParam("b", default = FALSE, requires = quote(a == TRUE)),
makeLogicalLearnerParam("c", default = FALSE, requires = quote(b == TRUE))
)
expect_true(isFeasible(ps, list(a = FALSE, b = NA, c = NA)))
expect_true(isFeasible(ps, list(a = TRUE, b = FALSE, c = NA)))
expect_true(isFeasible(ps, list(a = TRUE, b = TRUE, c = FALSE)))
expect_true(isFeasible(ps, list(a = TRUE, b = TRUE, c = TRUE)))
})
test_that("print works", {
ps = makeParamSet(
makeIntegerParam("ntree", lower = 10, upper = 50),
makeNumericVectorParam("cutoff", len = 3, lower = 0.001, upper = 1, trafo = function(x) 0.9 * x / sum(x))
)
expect_output(print(ps), "numericvector")
expect_output(print(ps), "3")
ps = makeParamSet(
makeIntegerLearnerParam(id = "x", default = 50L, lower = 1L),
makeNumericVectorLearnerParam(id = "v", default = 1:2, len = 2L)
)
expect_output(print(ps, trafo = FALSE, used = FALSE), "numericvector")
ps = makeParamSet(
makeIntegerLearnerParam(id = "x", default = 50L, lower = 1L),
makeNumericVectorLearnerParam(id = "v", default = 1:2, len = 2L),
forbidden = expression(x < v[[1]])
)
expect_output(print(ps), "Forbidden region specified")
})
test_that("expressions get converted", {
ps1 = makeParamSet(
makeLogicalLearnerParam("a", default = FALSE),
makeLogicalLearnerParam("b", default = FALSE, requires = expression(a == TRUE))
)
ps2 = makeParamSet(
makeLogicalLearnerParam("a", default = FALSE),
makeLogicalLearnerParam("b", default = FALSE, requires = quote(a == TRUE))
)
expect_class(ps1$pars$b$requires, "call")
expect_equal(ps1, ps2)
expect_error({
ps = makeParamSet(
makeLogicalLearnerParam("a", default = FALSE),
makeLogicalLearnerParam("b", default = FALSE, requires = "a == TRUE")
)
}, "call")
})
test_that("test whether paramset fails gracefully", {
li = list(
makeLogicalLearnerParam("a", default = FALSE),
makeLogicalLearnerParam("b", default = FALSE, requires = expression(a == TRUE))
)
expect_error({
makeParamSet(
makeLogicalLearnerParam("a", default = FALSE),
makeLogicalLearnerParam("b", default = FALSE, requires = quote(a == TRUE)),
params = li
)
}, regexp = "You can only use one of \\.\\.\\. or params!")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.