tests/testthat/test-map.R

context("map")

test_that("map", {

  equals <- function(x, y) {
    testthat::expect_equal(x, y)
  }

  dat <- data.frame(y = 1:10, z = 2)

  # data frames
  map(dat, x ~ x + 1) %>% equals(data.frame(y = 2:11, z = 3))
  WITH_DPLYR(
    map(dat %>% mutar(x ~ "x"), x ~ x + 1, is.numeric) %>%
    equals(data.frame(y = 2:11, z = 3, x = "x", stringsAsFactors = FALSE)))
  map(dat, x ~ x + 1, x ~ all(x == 2)) %>% equals(data.frame(y = 1:10, z = 3))
  map(dat, x ~ x + 1, "z") %>% equals(data.frame(y = 1:10, z = 3))
  map(dat, x ~ x + 1, "^z$") %>% equals(data.frame(y = 1:10, z = 3))

  # vectors
  map(1, x ~ x) %>% equals(list(1))

  # subsetting
  map(list(1:2, 3:4), 2) %>% equals(list(2, 4))
  map(list(1:3, 2:5), 2:3) %>% equals(list(2:3, 3:4))
  map(list(1:3, 2:5), c(TRUE, FALSE, TRUE)) %>% equals(list(c(1, 3), c(2, 4, 5)))

  # multivariate map
  map(ML(1:2, 3:4), f(x, y) ~ x + y) %>% equals(list(4, 6))
  map(ML(1:2, 3:4), f(x, y) ~ x + y, simplify = TRUE) %>% equals(c(4, 6))
  map(MList(1:2, 3:4), f(x, y, z) ~ x + y + z, z = 1) %>% equals(list(5, 7))

  map(1:2 ~ 3:4, f(x, y) ~ x + y) %>% equals(list(4, 6))
  x <- 1:2
  y <- 3:4
  map(x ~ y, f(x, y) ~ x + y) %>% equals(list(4, 6))

  # check return types
  testthat::expect_error(map(1:2, numeric : x ~ x))
  map(as.numeric(1:2), numeric : x ~ x) %>% equals(as.list(1:2))
  map(1:2, integer(1) : x ~ x) %>% equals(as.list(1:2))
  map(1:2, numeric(1) : x ~ x + 0.5) %>% equals(as.list(c(1.5, 2.5)))

})

test_that("split-apply-combine", {
  WITH_DPLYR({

    expectEqual <- function(x, y) {
      testthat::expect_equal(x, y)
    }

    isA <- function(x, a) {
      testthat::expect_is(x, a)
    }

    dat <- DataFrame(y = 1:10, z = 2, id = rep(letters[1:2], 5))

    sac(dat, df ~ 1, "id") %>% expectEqual(list(a = 1, b = 1))
    tmp <- sac(dat, mutar, "id", count ~ dplyr::n())
    expectEqual(tmp$count, rep(5, 10))
    expectEqual(NROW(tmp), 10)
    expectEqual(NCOL(tmp), 4)

    setClass("Dat", "DataFrame")
    dat <- new("Dat", dat)
    sac(dat, mutar, "id", count ~ dplyr::n()) %>% isA("Dat")
    removeClass("Dat")

  })
})

test_that("flatmap", {

  equals <- function(x, y) {
    testthat::expect_equal(x, y)
  }

  error <- function(x, regex) {
    testthat::expect_error(x, regex)
  }

  flatmap(1:2, integer(1) : x ~ x) %>% equals(1:2)
  flatmap(1:2, numeric(1) : x ~ x + 0.5) %>% equals(c(1.5, 2.5))
  error(flatmap(letters[1:2], numeric(1) : x ~ x),
        "Function does not return correct type")
  flatmap(1:2, ~ ., flatten = as.character) %>% equals(c("1", "2"))
  flatmap(1:2, ~ ., flatten = ~ as.character(.)) %>% equals(c("1", "2"))

})

Try the dat package in your browser

Any scripts or data that you put into this service are public.

dat documentation built on July 1, 2020, 7:11 p.m.