################################################################################ # maxControlsCap: finding the best input for fullmatch ################################################################################ context("maxControlsCap function") test_that("basics", { # needs to take both simple and stratified problems. n <- 16 Z <- rep(c(0,1), n/2) my.names <- paste(rep(c("C", "T"), n/2), 1:16, sep = "") names(Z) <- my.names B <- c(rep("A", n/2), rep("B", n/2)) em <- exactMatch(B, treatment = Z) # factor, factor implementation res <- maxControlsCap(em) expect_equal(length(res$strictest.feasible.max.controls), 2) # two level problem expect_true(all(!is.na(res$strictest.feasible.max.controls))) }) test_that("Testing input", { # must pass a dist spec expect_error(maxControlsCap(1:10),"Invalid distance") # if min.controls is a vector, it must be named the same as the name of the subproblems Z <- rep(c(0,1), 8) B <- rep(letters[1:4], each = 4) res.em <- exactMatch(Z ~ B) expect_error(maxControlsCap(res.em, min.controls = c(x = 1, y = 2, z = 3, w = 4)), "Names of 'min.controls' must match the subproblems. See 'findSubproblems' and 'exactMatch'.") # should not expect an error for this: mcc <- maxControlsCap(res.em, min.controls = c(a = 1, b = 1, c = 1, d = 1)) expect_equal(length(mcc), 2) expect_true(all.equal(vapply(mcc, length, numeric(1)), c(4,4), check.attributes=FALSE)) }) test_that("Correct output", { # borrowing from the R CMD Check tests to nail down proper output. data(nuclearplants) mhd2a <- t(match_on(pr ~ date + cum.n, data = nuclearplants) + exactMatch(pr ~ pt, data = nuclearplants)) res.mxcc <- maxControlsCap(mhd2a + caliper(mhd2a, sqrt(3))) expect_equivalent(res.mxcc$strictest.feasible.max.controls, c(1,1)) })