library(rutilities)
context("Comparing two lists")
test_that("Non-list arguments fail",{
expect_error(setdiff_list(1, 1), "Arguments must be lists")
expect_error(setdiff_list("a", "a"), "Arguments must be lists")
expect_error(setdiff_list(1:3, 1:3), "Arguments must be lists")
})
tmp1 <- tibble::tibble(x = 1:3, y = list(a = 1, b = 2, c = 3))
tmp2 <- tibble::tibble(x = 1:3, y = list(a = 4, b = 4, c = 3))
# Successes
# Same lists, same names
l1 <- list(x = 0.5:2.5, y = letters[1:3], z = 1L:3L)
l2 <- list(y = letters[1:3], x = 0.5:2.5, z = 1L:3L)
test_that("Lists with same values but different order return empty list",{
expect_identical(setdiff_list(l1, l2),
structure(list(), .Names = character(0)))
expect_identical(setdiff_list(l2, l1),
structure(list(), .Names = character(0)))
})
# Same values, same names, name-value pairs different
l3 <- list(x = letters[1:3], y = 0.5:2.5, z = 1L:3L)
l4 <- list(x = 0.5:2.5, y = letters[1:3], z = c(TRUE, FALSE, NA))
test_that("Lists with different name-value pairs return correctly",{
expect_identical(
setdiff_list(l1, l3),
structure(list(x = c(0.5, 1.5, 2.5), y = c("a", "b", "c")),
.Names = c("x", "y"))
)
expect_identical(
setdiff_list(l3, l1),
structure(list(x = c("a", "b", "c"), y = c(0.5, 1.5, 2.5)),
.Names = c("x", "y"))
)
expect_identical(setdiff_list(l1, l4),
structure(list(z = 1:3), .Names = "z"))
expect_identical(setdiff_list(l4, l1),
structure(list(z = c(TRUE, FALSE, NA)), .Names = "z"))
})
# Different list, different names
l5 <- list(x = 0.5:2.5, y = letters[1:3])
test_that("Lists with different names return correctly",{
expect_identical(setdiff_list(l1, l5),
structure(list(z = 1:3), .Names = "z"))
expect_identical(setdiff_list(l5, l1),
structure(list(), .Names = character(0)))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.