test_that("collect equivalent to as.data.frame/as_tibble", {
mf <- memdb_frame(letters)
expect_equal(as.data.frame(mf), data.frame(letters, stringsAsFactors = FALSE))
expect_equal(as_tibble(mf), tibble(letters))
expect_equal(collect(mf), tibble(letters))
})
test_that("explicit collection returns all data", {
n <- 1e5 + 10 # previous default was 1e5
big <- memdb_frame(x = seq_len(n))
nrow1 <- big %>% as.data.frame() %>% nrow()
nrow2 <- big %>% as_tibble() %>% nrow()
nrow3 <- big %>% collect() %>% nrow()
expect_equal(nrow1, n)
expect_equal(nrow2, n)
expect_equal(nrow3, n)
})
test_that("compute doesn't change representation", {
mf1 <- memdb_frame(x = 5:1, y = 1:5, z = "a")
compare_tbl(mf1, mf1 %>% compute)
compare_tbl(mf1, mf1 %>% compute %>% compute)
mf2 <- mf1 %>% mutate(z = x + y)
compare_tbl(mf2, mf2 %>% compute)
})
test_that("compute can create indexes", {
mfs <- test_frame(x = 5:1, y = 1:5, z = 10)
mfs %>%
lapply(. %>% compute(indexes = c("x", "y"))) %>%
expect_equal_tbls()
mfs %>%
lapply(. %>% compute(indexes = list("x", "y", c("x", "y")))) %>%
expect_equal_tbls()
mfs %>%
lapply(. %>% compute(indexes = "x", unique_indexes = "y")) %>%
expect_equal_tbls()
mfs %>%
lapply(. %>% compute(unique_indexes = list(c("x", "z"), c("y", "z")))) %>%
expect_equal_tbls()
})
test_that("unique index fails if values are duplicated", {
mfs <- test_frame(x = 5:1, y = "a", ignore = "df")
lapply(mfs, function(.) expect_error(compute(., unique_indexes = "y")))
})
test_that("index fails if columns are missing", {
mf <- memdb_frame(x = 1)
expect_snapshot({
(expect_error(compute(mf, indexes = list(c("y", "x", "z"), "a"))))
(expect_error(compute(mf, unique_indexes = list(c("y", "x", "z"), "a"))))
})
})
test_that("compute creates correct column names", {
out <- memdb_frame(x = 1) %>%
group_by(x) %>%
summarise(n = n()) %>%
compute() %>%
collect()
expect_equal(out, tibble(x = 1, n = 1L))
})
test_that("compute keeps window and groups", {
out <- memdb_frame(x = 1, y = 1) %>%
window_order(x) %>%
group_by(x, y) %>%
summarise(n = n(), .groups = "drop_last") %>%
compute()
expect_equal(op_sort(out), list(expr(x)))
expect_equal(op_grps(out), "x")
})
test_that("compute can handle named name", {
con <- simulate_dbi()
expect_equal(
memdb_frame(x = 1:10) %>%
compute(name = c(x = unique_table_name())) %>%
collect(),
tibble(x = 1:10)
)
})
test_that("compute can handle schema", {
df <- memdb_frame(x = 1:10)
withr::defer(DBI::dbRemoveTable(remote_con(df), "db1"))
expect_equal(
df %>%
compute(name = in_schema("main", "db1"), temporary = FALSE) %>%
collect(),
tibble(x = 1:10)
)
# errors because name already exists
expect_snapshot(
df %>% compute(name = in_schema("main", "db1"), temporary = FALSE),
transform = snap_transform_dbi,
error = TRUE
)
})
test_that("collect() handles DBI error", {
mf <- memdb_frame(x = 1)
expect_snapshot(
(expect_error(mf %>% mutate(a = sql("invalid sql")) %>% collect())),
transform = snap_transform_dbi
)
})
test_that("compute(temporary = FALSE) without a name is deprecated", {
df <- memdb_frame(x = 1:10)
expect_snapshot_warning(df %>% compute(temporary = FALSE))
})
# ops ---------------------------------------------------------------------
test_that("sorting preserved across compute and collapse", {
df1 <- memdb_frame(x = sample(10)) %>% arrange(x)
df2 <- compute(df1)
expect_equal(get_expr(op_sort(df2)[[1]]), quote(x))
df3 <- collapse(df1)
expect_equal(get_expr(op_sort(df3)[[1]]), quote(x))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.