R version 3.2.2 RC (2015-08-08 r68914) -- "Fire Safety" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > basic_tests <- list( + list(input=c(TRUE, FALSE), any=TRUE, all=FALSE), + list(input=c(FALSE, TRUE), any=TRUE, all=FALSE), + + list(input=c(TRUE, TRUE), any=TRUE, all=TRUE), + list(input=c(FALSE, FALSE), any=FALSE, all=FALSE), + + list(input=c(NA, FALSE), any=NA, all=FALSE, any.na.rm=FALSE), + list(input=c(FALSE, NA), any=NA, all=FALSE, any.na.rm=FALSE), + + list(input=c(NA, TRUE), any=TRUE, all=NA, all.na.rm=TRUE), + list(input=c(TRUE, NA), any=TRUE, all=NA, all.na.rm=TRUE), + + list(input=logical(0), any=FALSE, all=TRUE), + + list(input=NA, any=NA, all=NA, any.na.rm=FALSE, any.na.rm=TRUE), + + list(input=c(TRUE, NA, FALSE), any=TRUE, any.na.rm=TRUE, + all=FALSE, all.na.rm=FALSE) + ) > > ## any, all accept '...' for input. > list_input_tests <- + list( + list(input=list(TRUE, TRUE), all=TRUE, any=TRUE), + list(input=list(FALSE, FALSE), all=FALSE, any=FALSE), + list(input=list(TRUE, FALSE), all=FALSE, any=TRUE), + list(input=list(FALSE, TRUE), all=FALSE, any=TRUE), + + list(input=list(FALSE, NA), + all=FALSE, all.na.rm=FALSE, any=NA, any.na.rm=FALSE), + list(input=list(NA, FALSE), + all=FALSE, all.na.rm=FALSE, any=NA, any.na.rm=FALSE), + + list(input=list(TRUE, NA), + all=NA, all.na.rm=TRUE, any=TRUE, any.na.rm=TRUE), + list(input=list(NA, TRUE), + all=NA, all.na.rm=TRUE, any=TRUE, any.na.rm=TRUE), + + list(input=list(NA, NA), + any=NA, any.na.rm=FALSE, all=NA, all.na.rm=TRUE), + + list(input=list(rep(TRUE, 2), rep(TRUE, 10)), + all=TRUE, any=TRUE), + + list(input=list(rep(TRUE, 2), c(TRUE, NA)), + all=NA, all.na.rm=TRUE, any=TRUE), + + list(input=list(rep(TRUE, 2), c(TRUE, FALSE)), + all=FALSE, any=TRUE), + + list(input=list(c(TRUE, FALSE), c(TRUE, NA)), + all=FALSE, all.na.rm=FALSE, any=TRUE, any.na.rm=TRUE) + ) > > > > do_tests <- function(L) + { + run <- function(f, input, na.rm = FALSE) + { + if (is.list(input)) + do.call(f, c(input, list(na.rm = na.rm))) + else f(input, na.rm = na.rm) + } + + do_check <- function(case, f) + { + fun <- deparse(substitute(f)) + if (!identical(case[[fun]], run(f, case$input))) { + cat("input: "); dput(case$input) + stop(fun, " returned ", run(f, case$input), + " wanted ", case[[fun]], call. = FALSE) + } + narm <- paste(fun, ".na.rm", sep = "") + if (!is.null(case[[narm]])) { + if (!identical(case[[narm]], + run(f, case$input, na.rm = TRUE))) { + cat("input: "); dput(case$input) + stop(narm, " returned ", run(f, case$input, na.rm = TRUE), + " wanted ", case[[narm]], call. = FALSE) + } + } + } + lab <- deparse(substitute(L)) + for (case in L) { + do_check(case, any) + do_check(case, all) + } + } > > do_tests(basic_tests) > do_tests(list_input_tests) >