diff options
Diffstat (limited to '')
-rw-r--r-- | src/arrow/r/tests/testthat/test-dplyr-group-by.R | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/src/arrow/r/tests/testthat/test-dplyr-group-by.R b/src/arrow/r/tests/testthat/test-dplyr-group-by.R new file mode 100644 index 000000000..7cfcfb5c9 --- /dev/null +++ b/src/arrow/r/tests/testthat/test-dplyr-group-by.R @@ -0,0 +1,158 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +skip_if_not_available("dataset") + +library(dplyr, warn.conflicts = FALSE) +library(stringr) + +tbl <- example_data + +test_that("group_by groupings are recorded", { + compare_dplyr_binding( + .input %>% + group_by(chr) %>% + select(int, chr) %>% + filter(int > 5) %>% + collect(), + tbl + ) +}) + +test_that("group_by supports creating/renaming", { + compare_dplyr_binding( + .input %>% + group_by(chr, numbers = int) %>% + collect(), + tbl + ) + compare_dplyr_binding( + .input %>% + group_by(chr, numbers = int * 4) %>% + collect(), + tbl + ) + compare_dplyr_binding( + .input %>% + group_by(int > 4, lgl, foo = int > 5) %>% + collect(), + tbl + ) +}) + +test_that("ungroup", { + compare_dplyr_binding( + .input %>% + group_by(chr) %>% + select(int, chr) %>% + ungroup() %>% + filter(int > 5) %>% + collect(), + tbl + ) + + # to confirm that the above expectation is actually testing what we think it's + # testing, verify that compare_dplyr_binding() distinguishes between grouped and + # ungrouped tibbles + expect_error( + compare_dplyr_binding( + .input %>% + group_by(chr) %>% + select(int, chr) %>% + (function(x) if (inherits(x, "tbl_df")) ungroup(x) else x) %>% + filter(int > 5) %>% + collect(), + tbl + ) + ) +}) + +test_that("group_by then rename", { + compare_dplyr_binding( + .input %>% + group_by(chr) %>% + select(string = chr, int) %>% + collect(), + tbl + ) +}) + +test_that("group_by with .drop", { + test_groups <- c("starting_a_fight", "consoling_a_child", "petting_a_dog") + compare_dplyr_binding( + .input %>% + group_by(!!!syms(test_groups), .drop = TRUE) %>% + collect(), + example_with_logical_factors + ) + compare_dplyr_binding( + .input %>% + group_by(!!!syms(test_groups), .drop = FALSE) %>% + collect(), + example_with_logical_factors + ) + expect_equal( + example_with_logical_factors %>% + group_by(!!!syms(test_groups), .drop = TRUE) %>% + collect() %>% + n_groups(), + 4L + ) + expect_equal( + example_with_logical_factors %>% + group_by(!!!syms(test_groups), .drop = FALSE) %>% + collect() %>% + n_groups(), + 8L + ) + expect_equal( + example_with_logical_factors %>% + group_by(!!!syms(test_groups), .drop = FALSE) %>% + group_by_drop_default(), + FALSE + ) + expect_equal( + example_with_logical_factors %>% + group_by(!!!syms(test_groups), .drop = TRUE) %>% + group_by_drop_default(), + TRUE + ) + compare_dplyr_binding( + .input %>% + group_by(.drop = FALSE) %>% # no group by vars + group_by_drop_default(), + example_with_logical_factors + ) + compare_dplyr_binding( + .input %>% + group_by_drop_default(), + example_with_logical_factors + ) + compare_dplyr_binding( + .input %>% + group_by(!!!syms(test_groups)) %>% + group_by_drop_default(), + example_with_logical_factors + ) + compare_dplyr_binding( + .input %>% + group_by(!!!syms(test_groups), .drop = FALSE) %>% + ungroup() %>% + group_by_drop_default(), + example_with_logical_factors + ) +}) |