tests/tests_dreamerr.R

#----------------------------------------------#
# Author: Laurent Berge
# Date creation: Mon Aug 31 09:07:52 2020
# ~: test script for dreamerr
#----------------------------------------------#


# Two kinds of checks:
# 1) no error when there should be no error
# 2) errors when there should be errors
#

# To do:
# * add complex calls (multiple types)
# * add check_value
# * check returns from check_arg and check_value
# * specifics from check_set_arg (conv, NULL, etc)

library(dreamerr)

test_err = function(x){
  a = try(x, silent = TRUE)
  if(!any(class(a) == "try-error")) stop("Expected an error that did not occur.")
  invisible(NULL)
}


####
#### Main Types ####
####


####
#### ...scalar ####
####

# To check: types / equality / NA

test_scalar = function(x1, x2, x3, x4, x5){
  check_arg(x1, "numeric scalar")
  check_arg(x2, "integer scalar na ok")
  check_arg(x3, "scalar(factor, logical)")
  check_arg(x4, "scalar(integer, character, logical)")
  check_arg(x5, "integer scalar GT{-3} LE{3}")
  invisible(NULL)
}

#
# Should work
#

# x1: numeric scalar
test_scalar(x1 = 1)
test_scalar(x1 = -1)
test_scalar(x1 = exp(55))

# x2: integer scalar na ok
test_scalar(x2 = 1)
test_scalar(x2 = NA)

# x3: scalar(factor, logical)
test_scalar(x3 = factor("a", "a"))
test_scalar(x3 = TRUE)

# x4: scalar(integer, character, logical)
test_scalar(x4 = 5)
test_scalar(x4 = "bon")
test_scalar(x4 = TRUE)

# x5: integer scalar GT{-3} LE{3}
test_scalar(x5 = -2)
test_scalar(x5 = 3)


#
# Should **not** work
#

# x1: numeric scalar
test_err(test_scalar("5"))
test_err(test_scalar(NA))
test_err(test_scalar(iris))

# x2: integer scalar na ok
test_err(test_scalar(x2 = 1.1))
test_err(test_scalar(x2 = c(NA, 1)))

# x3: scalar(factor, logical)
test_err(test_scalar(x3 = "5"))
test_err(test_scalar(x3 = 1))

# x4: scalar(integer, character, logical)
test_err(test_scalar(x4 = 5.5))

# x5: integer scalar GT{-3} LE{3}
test_err(test_scalar(x5 = -3))
test_err(test_scalar(x5 = 3.1))



####
#### ...vector ####
####

# To check: types / equality / NA / len

test_vec = function(x1, x2, x3, x4, x5, x6){
  check_arg(x1, "integer vector")
  check_arg(x2, "numeric vector no na GE{0}")
  check_arg(x3, "vector(logical, character)")
  check_arg(x4, "vector len(2,5)")
  check_arg(x5, "numeric vector len(data)", .data = iris)
  check_arg(x6, "integer vector len(value) no na GT{5}", .value = 3)
  invisible(NULL)
}


#
# should work
#

# x1: integer vector
test_vec(x1 = 5)
test_vec(x1 = 5:6)
test_vec(x1 = TRUE)

# x2: numeric vector no na GE{0}
test_vec(x2 = 1.1)
test_vec(x2 = iris$Sepal.Length)
test_vec(x2 = c(55, 32))

# x3: vector(logical, character)
test_vec(x3 = c(TRUE, NA, FALSE))
test_vec(x3 = TRUE)
test_vec(x3 = c("bon", NA, "jour"))

# x4: vector len(2,5)
test_vec(x4 = c(TRUE, NA))
test_vec(x4 = c("bon", NA, "jour", NA, NA))

# x5: numeric vector len(data)
test_vec(x5 = iris$Sepal.Width)

# x6: integer vector len(value) no na GT{5} // .value = 3
test_vec(x6 = c(6, 7, 8))

#
# should **not** work
#

# x1: integer vector
test_err(test_vec(x1 = 5.5))
test_err(test_vec(x1 = 0.5 + 1:2))

# x2: numeric vector no na GE{0}
test_err(test_vec(x2 = -1.1))
test_err(test_vec(x2 = c(NA, 55)))

# x3: vector(logical, character)
test_err(test_vec(x3 = 55))

# x4: vector len(2,5)
test_err(test_vec(x4 = TRUE))

# x5: numeric vector len(data)
test_err(test_vec(x5 = iris$Species))
test_err(test_vec(x5 = 1:5))

# x6: integer vector len(value) no na GT{5} // .value = 3
test_err(test_vec(x6 = c(6, NA, 8)))
test_err(test_vec(x6 = c(5, 7, 8)))
test_err(test_vec(x6 = c(7, 8)))


####
#### ...list ####
####

# len

test_list = function(x1, x2, x3){
  check_arg(x1, "list l0")
  check_arg(x2, "list len(2)")
  check_arg(x3, "list len(value)", .value = 2)
  invisible(NULL)
}


#
# should work
#

# x1: list l0
test_list(x1 = iris)
test_list(x1 = list())

# x2: list len(2)
test_list(x2 = iris[1:2])
test_list(x2 = list(a = 5, b = 6))

# x3: list len(value)
test_list(x3 = list(a = 5, b = 6))


#
# should **not** work
#

# x1: list l0
test_err(test_list(x1 = 1:5))

# x2: list len(2)
test_err(test_list(x2 = iris[1]))

# x3: list len(value)
test_err(test_list(x3 = list(a = 5, b = 6, c = 9)))


####
#### ...data.frame ####
####

# nrow / ncol / no na / vdata.frame

test_df = function(x1, x2){
  check_arg(x1, "data.frame nrow(10,) ncol(,2)")
  check_arg(x2, "vdata.frame no na")
  invisible(NULL)
}


#
# should work
#

# x1: data.frame nrow(10,) ncol(,2)
test_df(x1 = iris[, 1:2])
test_df(x1 = data.frame(a = 1:10))

# x2: vdata.frame no na
test_df(x2 = iris[, 1:2])
test_df(x2 = 1:5)
test_df(x2 = iris$Sepal.Length)


#
# should **not** work
#

# x1: data.frame nrow(10,) ncol(,2)
test_err(test_df(x1 = iris[1:5, 1:2]))
test_err(test_df(x1 = iris))

# x2: vdata.frame no na
test_err(test_df(x2 = data.frame(a = c(NA, 1:5))))
test_err(test_df(x2 = c(NA, 1:5)))



####
#### ...matrix ####
####

# type / no na / nrow / ncol / square / equality / vmatrix

test_mat = function(x1, x2, x3, x4, x5){
  check_arg(x1, "square numeric matrix GT{0}")
  check_arg(x2, "vmatrix no na nrow(10, )")
  invisible(NULL)
}


#
# should work
#

# x1: square numeric matrix GT{0}
test_mat(x1 = matrix(5, 5, 5))
test_mat(x1 = matrix(c(NA, 5), 6, 6))

# x2: vmatrix no na nrow(10, )
test_mat(x2 = 1:10)
test_mat(x2 = matrix(rnorm(20*25), 20, 25))


#
# should **not** work
#

# x1: square numeric matrix GT{0}
test_err(test_mat(x1 = matrix(-5, 5, 5)))
test_err(test_mat(x1 = matrix(5, 6, 5)))
test_err(test_mat(x1 = matrix("bonjour", 6, 5)))
test_err(test_mat(x1 = 1))

# x2: vmatrix no na nrow(10, )
test_err(test_mat(x2 = 1:5))
test_err(test_mat(x2 = c(NA, 1:10)))
test_err(test_mat(x2 = matrix(55, 5, 20)))

####
#### ...formula ####
####

# os / ts / left / right

test_fml = function(x1, x2, x3, x4, x5){
  check_arg(x1, "ts formula")
  check_arg(x2, "os formula right(2)")
  check_arg(x3, "formula left(, 1)")
  check_arg(x4, "formula var(data)", .data = iris)
  check_arg(x5, "formula var(env)")
  invisible(NULL)
}


#
# should work
#

# x1: ts formula
test_fml(x1 = a ~ b + c)
test_fml(x1 = a | b ~ b + c | d + e)

# x2: os formula right(2)
test_fml(x2 = ~ b + c | d)

# x3: formula left(, 1)
test_fml(x3 = a ~ b + c)
test_fml(x3 = a ~ 1 | 0 | z)

# x4: formula var(data), .data = iris
test_fml(x4 = Petal.Length ~ Sepal.Length | Species)

# x5: formula var(env)
x = y = 5
test_fml(x5 = y ~ x)

#
# should **not** work
#

# x1: ts formula
test_err(test_fml(x1 = iris))
test_err(test_fml(x1 = 1:5))
test_err(test_fml(x1 = ~ b + c))

# x2: os formula right(2)
test_err(test_fml(x2 = ~ b + c | d | e))
test_err(test_fml(x2 = a ~ b + c | d))

# x3: formula left(, 1)
test_err(test_fml(x3 = a | b ~ b + c))

# x4: formula var(data), .data = iris
test_err(test_fml(x4 = Petol.Length ~ Sepal.Length | Species))
test_err(test_fml(x4 = Petol.Length ~ Sepal.Length | species))

# x5: formula var(env)
x = y = 5
test_err(test_fml(x5 = y ~ xxx))


####
#### ...charin ####
####

# multi

test_charin = function(x1, x2){
  check_arg(x1, "charin", .choices = c("bon", "jour", "so", "leil"))
  check_arg(x2, "multi charin(bon, jour, so, leil)")
  invisible(NULL)
}


#
# should work
#

# x1: charin
test_charin(x1 = "bon")
test_charin(x1 = "jour")

# x2: strict charin
test_charin(x2 = c("bon", "jour"))

#
# should **not** work
#

# x1: charin
test_err(test_charin(x1 = "bonj"))
test_err(test_charin(x1 = "Bon"))
test_err(test_charin(x1 = c("bon", "jour")))

# x2: multi charin
test_err(test_charin(x2 = 55))


####
#### ...match ####
####

# strict / multi / different inits

test_match = function(x1 = c("bon", "jour", "soleil"), x2, x3){
  mc = match.call()
  check_set_arg(x1, "match")
  if("x1" %in% names(mc)) return(x1)

  check_set_arg(x2, "strict match(bon, jour, soleil)")
  if("x2" %in% names(mc)) return(x2)

  check_set_arg(x3, "multi match", .choices = c("bon", "jour", "soleil"))
  if("x3" %in% names(mc)) return(x3)

  return(x1)
}


#
# should work
#

# x1: match
test_match() == "bon"
test_match(x1 = "jour") == "jour"
test_match(x1 = "s") == "soleil"
test_match(x1 = "So") == "soleil"
test_match(x1 = "Bo") == "bon"

# x2: strict match(bon, jour, soleil)
test_match(x2 = "jour") == "jour"
test_match(x2 = "s") == "soleil"

# x3: multi match, .choices = c("bon", "jour", "soleil")
test_match(x3 = c("jour", "bo")) %in% c("bon", "jour")

#
# should **not** work
#

# x1: match
test_err(test_match(x1 = "jouro"))
test_err(test_match(x1 = 55))
test_err(test_match(x1 = ".+"))

# x2: strict match(bon, jour, soleil)
test_err(test_match(x2 = "Jour"))
test_err(test_match(x2 = c("jour", "b")))

# x3: multi match, .choices = c("bon", "jour", "soleil")
test_err(test_match(x3 = NA))


####
#### ...NA ####
####

test_na = function(x1){
  check_arg(x1, "NA")
  invisible(NULL)
}


#
# should work
#

# x1: NA
test_na(x1 = NA)

#
# should **not** work
#

# x1: NA
test_err(test_na(x1 = 5))
test_err(test_na(x1 = 5:55))
test_err(test_na(x1 = iris))
test_err(test_na(x1 = c(NA, 2)))
test_err(test_na(x1 = lis(NA)))


####
#### ...function ####
####

# arg

test_fun = function(x1, x2, x3, x4, x5){
  check_arg(x1, "function")
  check_arg(x2, "function arg(1,)")
  invisible(NULL)
}


#
# should work
#

# x1: function
test_fun(x1 = sum)

# x2: function arg(1,)
test_fun(x2 = merge)

#
# should **not** work
#

# x1: function
test_err(test_fun(x1 = 1:5))

# x2: function arg(1,)
test_err(test_fun(x2 = function() 5))

Try the dreamerr package in your browser

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

dreamerr documentation built on Aug. 24, 2023, 1:08 a.m.