Skip to content

Commit

Permalink
Test cases: combine with NA (tidyverse#2203)
Browse files Browse the repository at this point in the history
This commit tests if dplyr::combine accepts NA in all atomic classes:

 - logical
 - integer
 - factor
 - real
 - character
 - POSIXct
 - Date
 - complex
  • Loading branch information
zeehio committed Nov 7, 2016
1 parent e8083d4 commit 933f167
Showing 1 changed file with 137 additions and 0 deletions.
137 changes: 137 additions & 0 deletions tests/testthat/test-combine.R
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,140 @@ test_that("combine works with input that used to fail (#1780)", {
no <- list(alpha = letters[1:3], omega = letters[24:26])
expect_equal(combine(no), unlist(no, use.names = FALSE))
})

test_that("combine works with NA and logical (#2203)", {
# NA length == 1
expected_result <- c(TRUE, FALSE, NA, TRUE)
works1 <- combine(list(TRUE, FALSE, NA, TRUE))
expect_equal(works1, expected_result)

# NA length > 1
expected_result <- c(TRUE, FALSE, NA, NA, TRUE)
works3 <- combine(list(TRUE, FALSE, c(NA, NA), TRUE))
expect_equal(works3, expected_result)

})

test_that("combine works with NA and integers (#2203)", {
works <- combine(list(1L, 2L, NA, 4L))
expect_equal(works, c(1L, 2L, NA, 4L))
works <- combine(list(1L, 2L, c(NA, NA), 4L))
expect_equal(works, c(1L, 2L, NA, NA, 4L))
})

test_that("combine works with NA and factors (#2203)", {
# NA length == 1
expected_result <- factor(c("a", "c", NA, "b"), levels = c("a","b","c"))
works1 <- combine(list(factor("a", levels = c("a","b","c")),
factor("c", levels = c("a","b","c")),
factor(NA, levels = c("a", "b", "c")),
factor("b", levels = c("a","b","c"))))
expect_equal(works1, expected_result)

works2 <- combine(list(factor("a", levels = c("a","b","c")),
factor("c", levels = c("a","b","c")),
NA,
factor("b", levels = c("a","b","c"))))
expect_equal(works2, expected_result)

# NA length > 1
expected_result <- factor(c("a", "c", NA, NA, "b"), levels = c("a","b","c"))

works3 <- combine(list(factor("a", levels = c("a","b","c")),
factor("c", levels = c("a","b","c")),
factor(c(NA, NA), levels = c("a", "b", "c")),
factor("b", levels = c("a","b","c"))))
expect_equal(works3, expected_result)

works4 <- combine(list(factor("a", levels = c("a","b","c")),
factor("c", levels = c("a","b","c")),
c(NA,NA),
factor("b", levels = c("a","b","c"))))
expect_equal(works4, expected_result)

})

test_that("combine works with NA and real numbers (#2203)", {
works <- combine(list(1.5, 2.5, NA, 4.5))
expect_equal(works, c(1.5, 2.5, NA, 4.5))
works <- combine(list(1.5, 2.5, c(NA, NA), 4.5))
expect_equal(works, c(1.5, 2.5, NA, NA, 4.5))
})

test_that("combine works with NA and characters (#2203)", {
works <- combine(list("a", "b", "c", NA, "e"))
expect_equal(works, c("a", "b", "c", NA, "e"))
})


test_that("combine works with NA and POSIXct (#2203)", {
works <- combine(list(as.POSIXct("2010-01-01"), as.POSIXct("2010-01-02"),
NA, as.POSIXct("2010-01-04")))
expect_equal(works, c(as.POSIXct(c("2010-01-01", "2010-01-02",
NA, "2010-01-04"))))
works <- combine(list(as.POSIXct("2010-01-01"), as.POSIXct("2010-01-02"),
c(NA, NA), as.POSIXct("2010-01-04")))
expect_equal(works, c(as.POSIXct(c("2010-01-01", "2010-01-02",
NA, NA, "2010-01-04"))))
})

test_that("combine works with NA and Date (#2203)", {
# NA length == 1
expected_result <- c(as.Date(c("2010-01-01", "2010-01-02", NA, "2010-01-04")))
works1 <- combine(list(as.Date("2010-01-01"), as.Date("2010-01-02"),
as.Date(NA), as.Date("2010-01-04")))
expect_equal(works1, expected_result)

works2 <- combine(list(as.Date("2010-01-01"), as.Date("2010-01-02"),
NA, as.Date("2010-01-04")))
expect_equal(works2, expected_result)

# NA length > 1
expected_result <- c(as.Date(c("2010-01-01", "2010-01-02", NA, NA, "2010-01-04")))
works1 <- combine(list(as.Date("2010-01-01"), as.Date("2010-01-02"),
as.Date(c(NA, NA)), as.Date("2010-01-04")))
expect_equal(works1, expected_result)

works2 <- combine(list(as.Date("2010-01-01"), as.Date("2010-01-02"),
c(NA, NA),
as.Date("2010-01-04")))
expect_equal(works2, expected_result)
})


test_that("combine works with NA and complex (#2203)", {
# NA length == 1
expected_result <- complex(real = c(1, 2, NA, 4),
imaginary = c(-1, -2, NA, -4))

works1 <- combine(list(complex(real = 1, imaginary = -1),
complex(real = 2, imaginary = -2),
complex(real = NA, imaginary = NA),
complex(real = 4, imaginary = -4)))
expect_equal(works1, expected_result)

works2 <- combine(list(complex(real = 1, imaginary = -1),
complex(real = 2, imaginary = -2),
NA,
complex(real = 4, imaginary = -4)))
expect_equal(works2, expected_result)

# NA length > 1
expected_result <- complex(real = c(1, 2, NA, NA, 4),
imaginary = c(-1, -2, NA, NA, -4))

works3 <- combine(list(complex(real = 1, imaginary = -1),
complex(real = 2, imaginary = -2),
complex(real = c(NA, NA), imaginary = c(NA, NA)),
complex(real = 4, imaginary = -4)))
expect_equal(works3, expected_result)

works4 <- combine(list(complex(real = 1, imaginary = -1),
complex(real = 2, imaginary = -2),
c(NA, NA),
complex(real = 4, imaginary = -4)))
expect_equal(works4, expected_result)
})



0 comments on commit 933f167

Please sign in to comment.