Nothing
context("testing ConstraintsClass")
test_that("ConstraintsClass produces correct results", {
constraintsClassTest <- function(v_pass, m_pass = NULL, rep = FALSE,
fr = NULL, tar, fun, comp,
keep = FALSE, tol = NULL,
expect_zero_res = FALSE, IsComb = TRUE) {
myResults <- vector(mode = "logical")
if (IsComb) {
a <- comboIter(v_pass, m_pass, rep, fr, constraintFun = fun,
comparisonFun = comp, limitConstraints = tar,
keepResults = keep, tolerance = tol)
b <- comboGeneral(v_pass, m_pass, rep, fr,constraintFun = fun,
comparisonFun = comp, limitConstraints = tar,
keepResults = keep, tolerance = tol)
} else {
a <- permuteIter(v_pass, m_pass, rep, fr, constraintFun = fun,
comparisonFun = comp, limitConstraints = tar,
keepResults = keep, tolerance = tol)
b <- permuteGeneral(v_pass, m_pass, rep, fr,constraintFun = fun,
comparisonFun = comp, limitConstraints = tar,
keepResults = keep, tolerance = tol)
}
myRows <- nrow(b)
myResults <- c(myResults,
if (expect_zero_res) myRows == 0 else myRows > 0)
myResults <- c(myResults, is.na(a@summary()$totalResults))
if (length(v_pass) == 1) {
myResults <- c(myResults, isTRUE(
all.equal(abs(v_pass), length(a@sourceVector()))
))
} else {
myResults <- c(myResults, isTRUE(
all.equal(sort(v_pass), a@sourceVector())
))
}
a1 <- b
if (myRows) {
a@nextIter()
myResults <- c(myResults, all.equal(a@currIter(), b[1, ]))
a@startOver()
for (i in 1:myRows) {
a1[i, ] <- a@nextIter()
}
myResults <- c(myResults, isTRUE(all.equal(a1, b)))
}
msg <- capture.output(noMore <- a@nextIter())
myResults <- c(myResults, is.null(noMore))
myResults <- c(myResults, msg[1] == "No more results.")
myResults <- c(myResults, is.null(a@nextNIter(1)))
myResults <- c(myResults, is.null(a@nextRemaining()))
myResults <- c(myResults, is.null(a@nextIter()))
a@startOver()
if (myRows) {
numTest <- as.integer(myRows / 3);
s <- 1L
e <- numTest
for (i in 1:3) {
myResults <- c(myResults, isTRUE(all.equal(a@nextNIter(numTest),
b[s:e, ])))
s <- e + 1L
e <- e + numTest
}
}
idx <- a@summary()$currentIndex
while (idx < myRows) {
a@nextNIter(1)
idx <- idx + 1L
}
capture.output(noMore <- a@nextNIter(1))
myResults <- c(myResults, is.null(noMore))
a@startOver()
if (myRows) myResults <- c(myResults, isTRUE(all.equal(a@nextRemaining(), b)))
a@startOver()
if (myRows) tmp <- a@nextNIter(myRows)
msg <- capture.output(noMore <- a@nextNIter(1))
myResults <- c(myResults, is.null(noMore))
myResults <- c(myResults, msg[1] == "No more results.")
a@startOver()
if (myRows) tmp <- a@nextNIter(myRows)
msg <- capture.output(noMore <- a@nextRemaining())
myResults <- c(myResults, is.null(noMore))
myResults <- c(myResults, msg[1] == "No more results.")
rm(a, a1, b)
gc()
all(myResults)
}
## no viable results 1st
expect_true(constraintsClassTest(10, 7, fun = "sum",
comp = c(">","<"), tar = c(49, 51),
expect_zero_res = TRUE))
expect_true(constraintsClassTest(10, 7, fun = "sum",
comp = c(">","<"), tar = c(40, 45)))
set.seed(13)
rSet = 1:10 + rnorm(10)
## no viable results 1st
expect_true(constraintsClassTest(rSet, 7, TRUE, fun = "sum",
comp = ">=", tar = 100,
expect_zero_res = TRUE))
expect_true(constraintsClassTest(rSet, 7, TRUE, fun = "sum",
comp = c(">=","<="),
tar = c(42.50001, 45.76277)))
expect_true(constraintsClassTest(rSet, 7, TRUE, fun = "sum",
comp = c("<=",">="),
tar = c(20.05669, 60.93901), keep = TRUE))
## This test fails for version prior to 2.8.1
expect_true(constraintsClassTest(rSet, 7, TRUE, fun = "sum",
comp = c("<=",">="),
tar = c(20.05669, 60.93901), keep = TRUE,
IsComb = FALSE))
## no viable results 1st
expect_true(constraintsClassTest(10, 7, fr = rep(2:3, 5), fun = "sum",
comp = ">", tar = 100,
expect_zero_res = TRUE))
expect_true(constraintsClassTest(10, 7, fr = rep(3, 10), fun = "sum",
comp = c("<=",">"),
tar = c(50, 47), keep = TRUE))
## This test fails for version prior to 2.8.1
expect_true(constraintsClassTest(10, 7, fr = rep(3, 10), fun = "sum",
comp = c("<=",">"),
tar = c(50, 47), keep = TRUE,
IsComb = FALSE))
expect_true(constraintsClassTest(10, 7, fr = rep(3, 10), fun = "max",
comp = c("<=",">"), tar = c(9, 7)))
expect_true(constraintsClassTest(10, 7, fr = rep(3, 10), fun = "min",
comp = "==", tar = 3))
## no viable results 1st
expect_true(constraintsClassTest(5, 7, TRUE, fun = "prod",
comp = "<", tar = -1,
expect_zero_res = TRUE))
expect_true(constraintsClassTest(5, 7, TRUE, fun = "prod",
comp = c(">=","<="),
tar = c(2000, 5000)))
## Need special
expect_true(constraintsClassTest(-5, 7, TRUE, fun = "prod",
comp = c(">=","<="),
tar = c(2000, 5000),
keep = TRUE, expect_zero_res = TRUE))
expect_true(constraintsClassTest(-5, 7, TRUE, fun = "prod",
comp = c("<=",">="),
tar = c(-2000, -5000),
keep = TRUE))
set.seed(42)
s <- runif(10, -5, 5)
expect_true(constraintsClassTest(
s, 5, fr = rep(2:3, 5), fun = "prod",
comp = ">", tar = 1000, keep = TRUE
))
expect_true(constraintsClassTest(
s, 5, fun = "prod", comp = "==", tar = 100, tol = 10, keep = TRUE
))
## Testing sums in a range
expect_true(constraintsClassTest(
c(NA, 1:10), 8, TRUE, fun = "sum", comp = c("=>","=<"), tar = c(72, 78)
))
## This test fails for version prior to 2.8.1
expect_true(constraintsClassTest(
c(NA, 1:10), 8, TRUE, fun = "sum",
comp = c("=>","=<"), tar = c(72, 78), IsComb = FALSE
))
## This test fails for version prior to 2.8.1
expect_true(constraintsClassTest(0:10, 8, TRUE, fun = "sum",
comp = c(">","<"), tar = c(9, 11),
IsComb = FALSE))
comp1 = c("<", "<=")
comp2 = c(">", ">=")
## Test that unsorted vector is being handled properly
## for both numeric and integer type vectors
# identical(sort(scrambled), 1:10)
# [1] TRUE
scrambled = as.integer(c(8, 2, 5, 1, 6, 3, 4, 7))
scramFreqs = rep(1:5, 2)[scrambled]
funs <- c("sum", "prod", "mean", "max", "min")
m <- 7
allCombs1 = lapply(funs, function(f) {
comboGeneral(8, m, freqs = rep(1:4, 2), constraintFun = f)
})
## ensure the left bound is in the solution space
tars = lapply(allCombs1, function(x) {
vals <- sort(x[, m + 1])
t <- quantile(as.numeric(names(table(vals))),
c(0.25, 0.75), names = FALSE)
t[1] <- vals[findInterval(t[1], vals)]
t
})
for (f in seq_along(funs)) {
for (i in 1:2) {
if (i == 1) {
a = comp1
b = comp2
} else {
a = comp2
b = comp1
}
for (j in a) {
for (k in b) {
expect_true(constraintsClassTest(scrambled, m,
fr = scramFreqs,
fun = funs[f],
comp = c(j, k),
tar = tars[[f]],
tol = 0))
}
}
}
}
allCombs1 = lapply(funs, function(f) {
comboGeneral(8, m, TRUE, constraintFun = f, keepResults = TRUE)
})
## ensure the right bound is in the solution space
tars = lapply(allCombs1, function(x) {
vals <- sort(x[, m + 1])
t <- quantile(as.numeric(names(table(vals))),
c(0.25, 0.75), names = FALSE)
t[2] <- vals[findInterval(t[2], vals)]
t
})
for (f in seq_along(funs)) {
for (i in 1:2) {
if (i == 1) {
a = comp1
b = comp2
} else {
a = comp2
b = comp1
}
for (j in a) {
for (k in b) {
expect_true(constraintsClassTest(8, m, TRUE,
fun = funs[f],
comp = c(j, k),
tar = tars[[f]],
tol = 0))
}
}
}
}
allCombs1 = lapply(funs, function(f) {
comboGeneral(15, m, constraintFun = f, keepResults = TRUE)
})
## ensure the both bounds are in the solution space
tars = lapply(allCombs1, function(x) {
vals <- sort(x[, m + 1])
t <- quantile(as.numeric(names(table(vals))),
c(0.25, 0.75), names = FALSE)
t <- vals[findInterval(t, vals)]
t
})
for (f in seq_along(funs)) {
for (i in 1:2) {
if (i == 1) {
a = comp1
b = comp2
} else {
a = comp2
b = comp1
}
for (j in a) {
for (k in b) {
expect_true(constraintsClassTest(15, m,
fun = funs[f],
comp = c(j, k),
tar = tars[[f]],
tol = 0))
}
}
}
}
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.