tests/testthat/test_setdiff_list.R

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)))
})
andrewjpfeiffer/rutilities documentation built on May 11, 2019, 6:26 p.m.