Nothing
.NAMES0 <- c("C", "AA", "BB", "A", "", "A", "AA", "BB", "DD")
test_normalizeDoubleBracketSubscript <- function()
{
## These "core tests" don't even look at 'x'.
do_core_tests <- function(x, exact=TRUE) {
for (i in list(TRUE, FALSE, 1i, as.raw(1),
integer(0), 1:3, character(0), c("A", "b"))) {
checkException(normalizeDoubleBracketSubscript(i, x,
exact=exact))
checkException(normalizeDoubleBracketSubscript(Rle(i), x,
exact=exact))
}
for (i in list(NA, NA_integer_, NA_real_, NA_character_, NA_complex_)) {
checkException(normalizeDoubleBracketSubscript(i, x, exact=exact))
current <- normalizeDoubleBracketSubscript(i, x, exact=exact,
allow.NA=TRUE)
checkIdentical(NA, current)
checkException(normalizeDoubleBracketSubscript(Rle(i), x,
exact=exact))
current <- normalizeDoubleBracketSubscript(Rle(i), x, exact=exact,
allow.NA=TRUE)
checkIdentical(NA, current)
}
## Error: [[ subscript must be >= 1
for (i in list(0L, 0.99, -1)) {
checkException(normalizeDoubleBracketSubscript(i, x,
exact=exact))
checkException(normalizeDoubleBracketSubscript(Rle(i), x,
exact=exact))
checkException(normalizeDoubleBracketSubscript(i, x,
exact=exact,
allow.append=TRUE))
checkException(normalizeDoubleBracketSubscript(Rle(i), x,
exact=exact,
allow.append=TRUE))
}
}
test_invalid_position <- function(i, x, allow.append=FALSE) {
for (exact in list(TRUE, FALSE)) {
for (allow.NA in list(FALSE, TRUE)) {
for (allow.nomatch in list(FALSE, TRUE)) {
checkException(normalizeDoubleBracketSubscript(i, x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA,
allow.nomatch=allow.nomatch))
checkException(normalizeDoubleBracketSubscript(Rle(i), x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA,
allow.nomatch=allow.nomatch))
}
}
}
}
test_valid_position <- function(i, x, target, allow.append=FALSE) {
for (exact in list(TRUE, FALSE)) {
for (allow.NA in list(FALSE, TRUE)) {
for (allow.nomatch in list(FALSE, TRUE)) {
current <- normalizeDoubleBracketSubscript(i, x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA,
allow.nomatch=allow.nomatch)
checkIdentical(target, current)
current <- normalizeDoubleBracketSubscript(Rle(i), x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA,
allow.nomatch=allow.nomatch)
checkIdentical(target, current)
}
}
}
}
test_invalid_name <- function(name, x, exact=TRUE) {
for (i in list(name, Rle(name), factor(name), Rle(factor(name)))) {
for (allow.append in list(FALSE, TRUE)) {
for (allow.NA in list(FALSE, TRUE)) {
checkException(normalizeDoubleBracketSubscript(i, x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA))
checkException(normalizeDoubleBracketSubscript(i, x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA,
allow.nomatch=FALSE))
current <- normalizeDoubleBracketSubscript(i, x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA,
allow.nomatch=TRUE)
checkIdentical(NA, current)
}
}
}
}
test_valid_name <- function(name, x, target, exact=TRUE) {
for (i in list(name, Rle(name), factor(name), Rle(factor(name)))) {
for (allow.append in list(FALSE, TRUE)) {
for (allow.NA in list(FALSE, TRUE)) {
for (allow.nomatch in list(FALSE, TRUE)) {
current <- normalizeDoubleBracketSubscript(i, x,
exact=exact,
allow.append=allow.append,
allow.NA=allow.NA,
allow.nomatch=allow.nomatch)
checkIdentical(target, current)
}
}
}
}
}
## ----------------------------------------------------------------- ##
do_basic_tests_on_empty_object <- function(x) {
do_core_tests(x, exact=TRUE)
do_core_tests(x, exact=FALSE)
## (1) With a single non-NA number.
## Error: subscript is out of bounds
test_invalid_position(1L, x, allow.append=FALSE)
test_invalid_position(1, x, allow.append=FALSE)
test_valid_position(1L, x, 1L, allow.append=TRUE)
test_valid_position(1.99, x, 1L, allow.append=TRUE)
## Error: [[ subscript must be <= length(x) + 1
test_invalid_position(2L, x, allow.append=TRUE)
test_invalid_position(2, x, allow.append=TRUE)
## (2) With a single non-NA string.
test_invalid_name("A", x, exact=TRUE)
test_invalid_name("A", x, exact=FALSE)
}
x <- list()
do_basic_tests_on_empty_object(x)
## ----------------------------------------------------------------- ##
names(x) <- character(0)
do_basic_tests_on_empty_object(x)
## ----------------------------------------------------------------- ##
do_basic_tests_on_full_object <- function(x) {
do_core_tests(x, exact=TRUE)
do_core_tests(x, exact=FALSE)
## (1) With a single non-NA number.
test_valid_position(1L, x, 1L, allow.append=FALSE)
test_valid_position(1L, x, 1L, allow.append=TRUE)
test_valid_position(1.99, x, 1L, allow.append=FALSE)
test_valid_position(1.99, x, 1L, allow.append=TRUE)
test_valid_position(9L, x, 9L, allow.append=FALSE)
test_valid_position(9L, x, 9L, allow.append=TRUE)
test_valid_position(9.99, x, 9L, allow.append=FALSE)
test_valid_position(9.99, x, 9L, allow.append=TRUE)
## Error: subscript is out of bounds
test_invalid_position(10L, x, allow.append=FALSE)
test_invalid_position(10.99, x, allow.append=FALSE)
test_valid_position(10L, x, 10L, allow.append=TRUE)
test_valid_position(10.99, x, 10L, allow.append=TRUE)
## Error: [[ subscript must be <= length(x) + 1
test_invalid_position(11L, x, allow.append=TRUE)
test_invalid_position(11, x, allow.append=TRUE)
}
x <- as.list(letters[1:9])
do_basic_tests_on_full_object(x)
## (2) With a single non-NA string.
test_invalid_name("A", x, exact=TRUE)
test_invalid_name("A", x, exact=FALSE)
## ----------------------------------------------------------------- ##
names(x) <- .NAMES0
do_basic_tests_on_full_object(x)
## (2) With a single non-NA string.
## Exact matching.
test_invalid_name("Z", x, exact=TRUE)
test_invalid_name("B", x, exact=TRUE)
test_invalid_name("D", x, exact=TRUE)
test_valid_name("C", x, 1L, exact=TRUE)
test_valid_name("BB", x, 3L, exact=TRUE)
test_valid_name("A", x, 4L, exact=TRUE)
test_valid_name("AA", x, 2L, exact=TRUE)
test_valid_name("DD", x, 9L, exact=TRUE)
## Partial matching.
test_invalid_name("Z", x, exact=FALSE)
test_invalid_name("B", x, exact=FALSE) # ambiguous partial matching
test_valid_name("C", x, 1L, exact=FALSE)
test_valid_name("BB", x, 3L, exact=FALSE)
test_valid_name("A", x, 4L, exact=FALSE)
test_valid_name("AA", x, 2L, exact=FALSE)
test_valid_name("DD", x, 9L, exact=FALSE)
test_valid_name("D", x, 9L, exact=FALSE)
}
.do_test_getListElement_list_or_data.frame <- function(x0)
{
## These "core tests" don't even look at 'x'.
do_core_tests <- function(x, exact=TRUE) {
for (i in list(TRUE, FALSE, 1i, as.raw(1),
integer(0), 1:3, character(0), c("A", "b"))) {
checkException(getListElement(x, i, exact=exact))
checkException(getListElement(x, Rle(i), exact=exact))
}
for (i in list(NA, NA_integer_, NA_real_, NA_character_, NA_complex_)) {
current <- getListElement(x, i, exact=exact)
checkIdentical(NULL, current)
current <- getListElement(x, Rle(i), exact=exact)
checkIdentical(NULL, current)
}
## Error: [[ subscript must be >= 1
for (i in list(0L, 0.99, -1)) {
checkException(getListElement(x, i, exact=exact))
checkException(getListElement(x, Rle(i), exact=exact))
}
}
test_invalid_position <- function(x, i) {
for (exact in list(TRUE, FALSE)) {
checkException(getListElement(x, i, exact=exact))
checkException(getListElement(x, Rle(i), exact=exact))
}
}
test_valid_position <- function(x, i) {
target <- `[[`(x, i)
for (exact in list(TRUE, FALSE)) {
current <- getListElement(x, i, exact=exact)
checkIdentical(target, current)
current <- getListElement(x, Rle(i), exact=exact)
checkIdentical(target, current)
}
}
test_valid_name <- function(x, name, exact=TRUE) {
target <- `[[`(x, name, exact=exact)
for (i in list(name, Rle(name), factor(name), Rle(factor(name)))) {
current <- getListElement(x, i, exact=exact)
checkIdentical(target, current)
}
}
## ----------------------------------------------------------------- ##
stopifnot(identical(names(x0), .NAMES0))
do_basic_tests_on_empty_object <- function(x) {
do_core_tests(x, exact=TRUE)
do_core_tests(x, exact=FALSE)
## (1) With a single non-NA number.
## Error: subscript is out of bounds
test_invalid_position(x, 1L)
test_invalid_position(x, 1)
## (2) With a single non-NA string.
## No match
test_valid_name(x, "A", exact=TRUE)
test_valid_name(x, "A", exact=FALSE)
}
if (!(is.data.frame(x0) || is(x0, "DataFrame"))) {
## Test on empty unnamed object.
x <- x0[0]
names(x) <- NULL
do_basic_tests_on_empty_object(x)
}
## ----------------------------------------------------------------- ##
## Test on empty named object.
x <- x0[0]
do_basic_tests_on_empty_object(x)
## ----------------------------------------------------------------- ##
do_basic_tests_on_full_object <- function(x) {
do_core_tests(x, exact=TRUE)
do_core_tests(x, exact=FALSE)
## (1) With a single non-NA number.
test_valid_position(x, 1L)
test_valid_position(x, 1.99)
test_valid_position(x, 9L)
test_valid_position(x, 9.99)
test_invalid_position(x, 10L)
test_invalid_position(x, 10)
test_invalid_position(x, 10.99)
}
if (!(is.data.frame(x0) || is(x0, "DataFrame"))) {
## Test on full unnamed object.
x <- x0
names(x) <- NULL
do_basic_tests_on_full_object(x)
## (2) With a single non-NA string.
## No match
test_valid_name(x, "A", exact=TRUE)
test_valid_name(x, "A", exact=FALSE)
}
## ----------------------------------------------------------------- ##
## Test on full named object.
x <- x0
do_basic_tests_on_full_object(x)
## (2) With a single non-NA string.
## Exact matching.
## No match
test_valid_name(x, "Z", exact=TRUE)
test_valid_name(x, "B", exact=TRUE)
test_valid_name(x, "D", exact=TRUE)
## Match
test_valid_name(x, "C", exact=TRUE)
test_valid_name(x, "BB", exact=TRUE)
test_valid_name(x, "A", exact=TRUE)
test_valid_name(x, "AA", exact=TRUE)
test_valid_name(x, "DD", exact=TRUE)
## Partial matching.
## No match
test_valid_name(x, "Z", exact=FALSE)
test_valid_name(x, "B", exact=FALSE) # ambiguous partial matching
## Match
test_valid_name(x, "C", exact=FALSE)
test_valid_name(x, "BB", exact=FALSE)
test_valid_name(x, "A", exact=FALSE)
test_valid_name(x, "AA", exact=FALSE)
test_valid_name(x, "DD", exact=FALSE)
test_valid_name(x, "D", exact=FALSE)
}
test_getListElement_list <- function()
{
x <- setNames(as.list(letters[1:9]), .NAMES0)
.do_test_getListElement_list_or_data.frame(x)
x <- as.data.frame(lapply(1:9, function(i) {10L*i + 1:4} ))
colnames(x) <- .NAMES0
.do_test_getListElement_list_or_data.frame(x)
}
.do_test_setListElement_list_or_data.frame <- function(x0, value0)
{
## These "core tests" don't even look at 'x' or 'value'.
do_core_tests <- function(x, value) {
for (i in list(TRUE, FALSE, 1i, as.raw(1),
integer(0), 1:3, character(0), c("A", "b"))) {
checkException(setListElement(x, i, value))
checkException(setListElement(x, Rle(i), value))
}
for (i in list(NA, NA_integer_, NA_real_, NA_character_, NA_complex_)) {
checkException(setListElement(x, i, value))
checkException(setListElement(x, Rle(i), value))
}
## Error: [[ subscript must be >= 1
for (i in list(0L, 0.99, -1)) {
checkException(setListElement(x, i, value))
checkException(setListElement(x, Rle(i), value))
}
}
## Does not look at 'value'.
test_invalid_position <- function(x, i, value) {
checkException(setListElement(x, i, value))
checkException(setListElement(x, Rle(i), value))
}
test_valid_position <- function(x, i, value) {
target <- `[[<-`(x, i, value=value)
## `[[<-.data.frame` does some terrible mangling of the colnames when
## appending a column to 'x' if 'colnames(x)' contains duplicates.
## We fix this.
if (is.data.frame(x) && ncol(target) > ncol(x))
colnames(target) <- c(colnames(x), "")
current <- setListElement(x, i, value)
checkIdentical(target, current)
current <- setListElement(x, Rle(i), value)
checkIdentical(target, current)
}
test_valid_name <- function(x, name, value) {
target <- `[[<-`(x, name, value=value)
## `[[<-.data.frame` does some terrible mangling of the colnames when
## appending a column to 'x' if 'colnames(x)' contains duplicates.
## We fix this.
if (is.data.frame(x) && ncol(target) > ncol(x))
colnames(target) <- c(colnames(x), name)
for (i in list(name, Rle(name), factor(name), Rle(factor(name)))) {
current <- setListElement(x, i, value)
checkIdentical(target, current)
}
}
## ----------------------------------------------------------------- ##
stopifnot(identical(names(x0), .NAMES0))
do_basic_tests_on_empty_object <- function(x) {
do_core_tests(x, NULL)
do_core_tests(x, value0)
## (1) With a single non-NA number.
## No-op
test_valid_position(x, 1L, NULL)
test_valid_position(x, 1, NULL)
test_valid_position(x, 1.99, NULL)
## Append naked 'value0' to 'x'.
test_valid_position(x, 1L, value0)
test_valid_position(x, 1, value0)
test_valid_position(x, 1.99, value0)
## Error: [[ subscript must be <= length(x) + 1
test_invalid_position(x, 2L, NULL)
test_invalid_position(x, 2, value0)
## (2) With a single non-NA string.
## No match
test_valid_name(x, "A", NULL) # no-op
test_valid_name(x, "A", value0) # append
}
if (!(is.data.frame(x0) || is(x0, "DataFrame"))) {
## Test on empty unnamed object.
x <- x0[0]
names(x) <- NULL
do_basic_tests_on_empty_object(x)
}
## ----------------------------------------------------------------- ##
## Test on empty named object.
x <- x0[0]
do_basic_tests_on_empty_object(x)
## ----------------------------------------------------------------- ##
do_basic_tests_on_full_object <- function(x) {
do_core_tests(x, NULL)
do_core_tests(x, value0)
## (1) With a single non-NA number.
## Remove 1st list element
test_valid_position(x, 1L, NULL)
test_valid_position(x, 1.99, NULL)
## Replace 1st list element
test_valid_position(x, 1L, value0)
test_valid_position(x, 1.99, value0)
## Remove last list element
test_valid_position(x, 9L, NULL)
test_valid_position(x, 9.99, NULL)
## Replace last list element
test_valid_position(x, 9L, value0)
test_valid_position(x, 9.99, value0)
## No-op
test_valid_position(x, 10L, NULL)
test_valid_position(x, 10, NULL)
test_valid_position(x, 10.99, NULL)
## Append naked 'value0' to 'x'
test_valid_position(x, 10L, value0)
test_valid_position(x, 10, value0)
test_valid_position(x, 10.99, value0)
## Error: [[ subscript must be <= length(x) + 1
test_invalid_position(x, 11L, NULL)
test_invalid_position(x, 11, value0)
}
if (!(is.data.frame(x0) || is(x0, "DataFrame"))) {
## Test on full unnamed object.
x <- x0
names(x) <- NULL
do_basic_tests_on_full_object(x)
## (2) With a single non-NA string.
## No match
test_valid_name(x, "A", NULL) # no-op
test_valid_name(x, "A", value0) # append
}
## ----------------------------------------------------------------- ##
## Test on full named object.
x <- x0
do_basic_tests_on_full_object(x)
## (2) With a single non-NA string.
## No match.
## No-op
test_valid_name(x, "Z", NULL)
test_valid_name(x, "B", NULL)
test_valid_name(x, "D", NULL)
## Append named 'value0' to 'x'
test_valid_name(x, "Z", value0)
test_valid_name(x, "B", value0)
test_valid_name(x, "D", value0)
## Match.
## Remove named list element
test_valid_name(x, "C", NULL)
test_valid_name(x, "BB", NULL)
test_valid_name(x, "A", NULL)
test_valid_name(x, "AA", NULL)
test_valid_name(x, "DD", NULL)
## Replace named list element
test_valid_name(x, "C", value0)
test_valid_name(x, "BB", value0)
test_valid_name(x, "A", value0)
test_valid_name(x, "AA", value0)
test_valid_name(x, "DD", value0)
}
test_setListElement_list <- function()
{
x <- setNames(as.list(letters[1:9]), .NAMES0)
.do_test_setListElement_list_or_data.frame(x, 9:6)
x <- as.data.frame(lapply(1:9, function(i) {10L*i + 1:4} ))
colnames(x) <- .NAMES0
.do_test_setListElement_list_or_data.frame(x, 9:6)
.do_test_setListElement_list_or_data.frame(x, letters[1:4])
}
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.