Skip to content

Commit

Permalink
Test the initial options
Browse files Browse the repository at this point in the history
  • Loading branch information
billdenney committed Jul 23, 2018
1 parent fd4d2bf commit e3a6b11
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
15 changes: 9 additions & 6 deletions pkg/R/options.R
Expand Up @@ -72,21 +72,24 @@ options_manager <- function(..., .list, .allowed){
stopifnot(is.list(.list))
}
.defaults <- c(list(...),.list)
.op <- .defaults

.al <- list()
# default option checkers
for ( v in names(.defaults)) .al[[v]] <- nolimit
# set explicitly mentioned option checkers
if (!missing(.allowed)) .al[names(.allowed)] <- .allowed
# if you impose a limit on an option thats not defined: stop.
if (!all(names(.al) %in% names(.op)) ){
nm <- names(.al)[!names(.al) %in% names(.op)]
if (!all(names(.al) %in% names(.defaults)) ){
nm <- names(.al)[!names(.al) %in% names(.defaults)]
stop(sprintf("Trying to set limits for undefined options %s\n",paste(nm,collapse=", ")))
}
# Check the default values against allowed ranges.
vars <- names(.op)
for (v in vars) .al[[v]](.defaults[[v]])
# Check the default values against allowed ranges and set the defaults as the
# (potentially modified) default.
vars <- names(.defaults)
for (v in vars) {
.defaults[v] <- list(.al[[v]](.defaults[[v]]))
}
.op <- .defaults

# create the options manager function
function(..., .__defaults=FALSE, .__reset=FALSE){
Expand Down
16 changes: 15 additions & 1 deletion pkg/tests/testthat/testOptions.R
Expand Up @@ -59,8 +59,22 @@ test_that("is_setting",{

context("Range checks")

test_that("initial range checks", {
expect_equal(options_manager(foo=1,.allowed=c(foo=inrange(0,1)))(),
list(foo=1),
info="Initial values that are valid succeed.")
expect_error(options_manager(foo=2,.allowed=c(foo=inrange(0,1)))(),
regex="Option value out of range. Allowed values are in [0, 1]",
fixed=TRUE,
info="Initial values that are invalid fail.")
set_to_1 <- function(x) 1
expect_equal(options_manager(foo=2,.allowed=c(foo=set_to_1))(),
list(foo=1),
info="Initial settings are modified, if needed.")
})

test_that("range checks",{
expect_error( options_manager(foo=1,.allowed=c(x=inrange(0,1))) )
expect_error(options_manager(foo=1,.allowed=c(x=inrange(0,1))) )
expect_error(options_manager(x=1,.allowed=list(x=inrange(2,3))))
opt <- options_manager(foo=1,bar=0
, .allowed=list(
Expand Down

0 comments on commit e3a6b11

Please sign in to comment.