tests/egf_options.R

library(epigrowthfit)
options(warn = 2L, error = if (interactive()) recover)


## egf_model ###########################################################

x <- egf_model()
nms <- c("curve", "excess", "family", "day_of_week")

stopifnot(exprs = {
	is.list(x)
	identical(oldClass(x), "egf_model")
	length(x) == 4L
	identical(names(x), nms)

	is.character(x[["curve"]])
	length(x[["curve"]]) == 1L
	any(x[["curve"]] == eval(formals(egf_model)[["curve"]]))

	is.logical(x[["excess"]])
	length(x[["excess"]]) == 1L
	!is.na(x[["excess"]])

	is.character(x[["family"]])
	length(x[["family"]]) == 1L
	any(x[["family"]] == eval(formals(egf_model)[["family"]]))

	is.integer(x[["day_of_week"]])
	length(x[["day_of_week"]]) == 1L
	any(x[["day_of_week"]] == 0:7)
})


## egf_control #########################################################

x <- egf_control()
nms <- c("outer_optimizer", "inner_optimizer", "trace",
         "profile", "sparse_X", "omp_num_threads")

stopifnot(exprs = {
	is.list(x)
	identical(oldClass(x), "egf_control")
	length(x) == 6L
	identical(names(x), nms)

	is.list(x[["outer_optimizer"]])
	identical(oldClass(x[["outer_optimizer"]]), "egf_optimizer")

	is.list(x[["inner_optimizer"]])
	identical(oldClass(x[["inner_optimizer"]]), "egf_optimizer")

	is.integer(x[["trace"]])
	length(x[["trace"]]) == 1L
	any(x[["trace"]] == 0:2)

	is.logical(x[["profile"]])
	length(x[["profile"]]) == 1L
	!is.na(x[["profile"]])

	is.logical(x[["sparse_X"]])
	length(x[["sparse_X"]]) == 1L
	!is.na(x[["sparse_X"]])

	is.integer(x[["omp_num_threads"]])
	length(x[["omp_num_threads"]]) == 1L
	x[["omp_num_threads"]] > 0L
})


## egf_optimizer #######################################################

x <- egf_optimizer()
nms <- c("f", "args", "control")

stopifnot(exprs = {
	is.list(x)
	identical(oldClass(x), "egf_optimizer")
	length(x) == 3L
	identical(names(x), nms)

	is.function(x[["f"]]) && !is.primitive(x[["f"]])
	identical(names(formals(x[["f"]])), c("par", "fn", "gr", "control", "..."))

	is.list(x[["args"]])
	match(names(x[["args"]]), c("par", "fn", "gr", "control", "..."), 0L) == 0L

	is.list(x[["control"]])
})


## egf_parallel ########################################################

x <- egf_parallel()
nms <- c("method", "outfile", "cores", "args", "cl")

stopifnot(exprs = {
	is.list(x)
	identical(oldClass(x), "egf_parallel")
	length(x) == 5L
	identical(names(x), nms)

	is.character(x[["method"]])
	length(x[["method"]]) == 1L
	any(x[["method"]] == eval(formals(egf_parallel)[["method"]]))

	is.character(x[["outfile"]])
	length(x[["outfile"]]) == 1L
	!is.na(x[["outfile"]])

	is.integer(x[["cores"]])
	length(x[["cores"]]) == 1L
	x[["cores"]] > 0L

	is.list(x[["args"]])

	is.null(x[["cl"]]) ||
		(is.list(x[["cl"]]) && identical(oldClass(x[["cl"]]), c("SOCKcluster", "cluster")))
})


## egf_control_plot ####################################################

reference <- list(window = NULL,
                  data = list(main = NULL, short = NULL, long = NULL),
                  predict = list(value = NULL, ci = NULL),
                  asymptote = NULL,
                  box = NULL,
                  axis = list(x = NULL, y = NULL),
                  title = list(main = NULL, sub = NULL, xlab = NULL, ylab = NULL),
                  doubling = c(legend = NULL, value = NULL, ci = NULL))

recurseOK <-
function(x, reference) {
	if (is.null(reference))
		stopifnot(is.list(x))
	else
		stopifnot(exprs = {
			is.list(x)
			length(x) == length(reference)
			identical(names(x), names(reference))
			mapply(recurseOK, x, reference)
		})
	TRUE
}

x <- egf_control_plot()

stopifnot(exprs = {
	is.list(x)
	identical(oldClass(x), "egf_control_plot")
	recurseOK(x, reference)
})
davidearn/epigrowthfit documentation built on Feb. 22, 2025, 12:44 p.m.