tests/testthat/test-f_slice.R

test_that("f_slice", {
  flights <- nycflights13::flights
  flights[["id"]] <- seq_len(nrow(flights))
  set.seed(5199123)
  ids <- sample(1:10^3)
  expect_error(flights |> f_slice(c(1, -1)))
  expect_equal(flights |>
                 f_slice(),
               flights |>
                 dplyr::slice())
  expect_equal(flights |>
                 dplyr::group_by(origin, dest) |>
                 f_slice(),
               flights |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice())
  expect_equal(flights |>
                 f_slice(ids, keep_order = TRUE),
               flights |>
                 dplyr::slice(ids) |>
                 dplyr::arrange(id))
  expect_equal(flights |>
                 f_slice(ids, keep_order = FALSE),
               flights |>
                 dplyr::slice(ids))
  expect_equal(flights |>
                 dplyr::group_by(origin, dest) |>
                 f_slice(ids),
               flights |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice(ids))
  expect_equal(flights |>
                 dplyr::group_by(origin, dest) |>
                 f_slice(ids, keep_order = TRUE),
               flights |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice(ids) |>
                 dplyr::arrange(id))
  # expect_equal(flights |>
  #                f_slice(ids, .by = c(origin, dest),
  #                        sort_groups = FALSE),
  #              flights |>
  #                dplyr::slice(ids, .by = c(origin, dest)))
  expect_equal(flights |>
                 f_slice(-ids, keep_order = FALSE),
               flights |>
                 dplyr::slice(-ids))
  expect_equal(flights |>
                 f_slice(-ids, keep_order = TRUE),
               flights |>
                 dplyr::slice(-ids) |>
                 dplyr::arrange(id))
  expect_equal(flights |>
                 dplyr::group_by(origin, dest) |>
                 f_slice(1:5, keep_order = TRUE),
               flights |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice(1:5) |>
                 dplyr::arrange(id))
  expect_equal(flights |>
                 dplyr::group_by(origin, dest) |>
                 f_slice(1:5, keep_order = FALSE),
               flights |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice(1:5))
  expect_equal(flights |>
                 dplyr::group_by(origin, dest) |>
                 f_slice(-ids, keep_order = TRUE),
               flights |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice(-ids) |>
                 dplyr::arrange(id))
  expect_equal(flights |>
                 dplyr::group_by(origin, dest) |>
                 f_slice(-ids, keep_order = FALSE),
               flights |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice(-ids))
})
test_that("f_slice_head", {
  flights2 <- nycflights13::flights
  set.seed(81243844)
  flights2 <- flights2[sample(seq_len(nrow(flights2)),
                              size = 10^4), ]
  flights2[["id"]] <- seq_len(nrow(flights2))

  expect_error(flights2 |>
                 f_slice_head(1, -1))
  expect_equal(flights2 |>
                 f_slice_head(),
               flights2 |>
                 dplyr::slice_head())
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_head(),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_head())
  # expect_equal(flights2 |>
  #                f_slice_head(.by = c(origin, dest),
  #                             sort_groups = FALSE),
  #              flights2 |>
  #                dplyr::slice_head(by = c(origin, dest)))
  expect_equal(flights2 |>
                 f_slice_head(n = 150),
               flights2 |>
                 dplyr::slice_head(n = 150))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_head(n = 4, keep_order = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_head(n = 4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_head(n = 4, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_head(n = 4) |>
                 dplyr::arrange(id))

  expect_equal(flights2 |>
                 f_slice_head(n = -4, keep_order = TRUE),
               flights2 |>
                 dplyr::slice_head(n = -4) |>
                 dplyr::arrange(id))
  expect_equal(flights2 |>
                 f_slice_head(n = -4, keep_order = FALSE),
               flights2 |>
                 dplyr::slice_head(n = -4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_head(n = -10, keep_order = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_head(n = -10))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_head(n = -10, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_head(n = -10) |>
                 dplyr::arrange(id))
})

test_that("f_slice_tail", {
  flights2 <- nycflights13::flights
  set.seed(81243844)
  flights2 <- flights2[sample(seq_len(nrow(flights2)),
                              size = 10^4), ]
  flights2[["id"]] <- seq_len(nrow(flights2))

  expect_error(flights2 |>
                 f_slice_tail(1, -1))
  expect_equal(flights2 |>
                 f_slice_tail(),
               flights2 |>
                 dplyr::slice_tail())
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_tail(),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_tail())
  # expect_equal(flights2 |>
  #                f_slice_tail(.by = c(origin, dest),
  #                             sort_groups = FALSE),
  #              flights2 |>
  #                dplyr::slice_tail(by = c(origin, dest)))
  expect_equal(flights2 |>
                 f_slice_tail(n = 150),
               flights2 |>
                 dplyr::slice_tail(n = 150))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_tail(n = 4, keep_order = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_tail(n = 4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_tail(n = 4, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_tail(n = 4) |>
                 dplyr::arrange(id))

  expect_equal(flights2 |>
                 f_slice_tail(n = -4, keep_order = TRUE),
               flights2 |>
                 dplyr::slice_tail(n = -4) |>
                 dplyr::arrange(id))
  expect_equal(flights2 |>
                 f_slice_tail(n = -4, keep_order = FALSE),
               flights2 |>
                 dplyr::slice_tail(n = -4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_tail(n = -10, keep_order = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_tail(n = -10))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_tail(n = -10, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_tail(n = -10) |>
                 dplyr::arrange(id))
})
test_that("f_slice_sample", {
  flights2 <- nycflights13::flights
  set.seed(81243844)
  flights2 <- flights2[sample(seq_len(nrow(flights2)),
                              size = 10^4), ]
  flights2[["id"]] <- seq_len(nrow(flights2))

  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::slice_sample(n = 1),
               flights2 |>
                 f_slice_sample(n = 1) |>
                 cheapr::with_local_seed(.seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_sample(n = Inf),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_sample() |>
                 cheapr::with_local_seed(.seed = 42))
  # set.seed(42)
  # expect_equal(flights2 |>
  #                dplyr::slice_sample(n = Inf,
  #                                    by = c(origin, dest)),
  #              flights2 |>
  #                f_slice_sample(.by = c(origin, dest),
  #                               sort_groups = FALSE,
  #                               seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::slice_sample(n = 150),
               flights2 |>
                 f_slice_sample(n = 150) |>
                 cheapr::with_local_seed(.seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_sample(n = 4),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_sample(n = 4, keep_order = FALSE) |>
                 cheapr::with_local_seed(.seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_sample(n = 4) |>
                 dplyr::arrange(id),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_sample(n = 4, keep_order = TRUE) |>
                 cheapr::with_local_seed(.seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::slice_sample(n = -4) |>
                 dplyr::arrange(id),
               flights2 |>
                 f_slice_sample(n = -4, keep_order = TRUE) |>
                 cheapr::with_local_seed(.seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::slice_sample(n = -4),
               flights2 |>
                 f_slice_sample(n = -4, keep_order = FALSE) |>
                 cheapr::with_local_seed(.seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_sample(n = -10),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_sample(n = -10, keep_order = FALSE) |>
                 cheapr::with_local_seed(.seed = 42))
  set.seed(42)
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_sample(n = -10) |>
                 dplyr::arrange(id),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_sample(n = -10, keep_order = TRUE) |>
                 cheapr::with_local_seed(.seed = 42))
})
test_that("f_slice_min", {
  flights2 <- nycflights13::flights
  set.seed(81243844)
  flights2 <- flights2[sample(seq_len(nrow(flights2)),
                              size = 10^4), ]
  flights2[["id"]] <- seq_len(nrow(flights2))

  expect_equal(flights2 |>
                 f_slice_min(arr_time, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_min(arr_time))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, na_rm = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time))
  # expect_equal(flights2 |>
  #                f_slice_min(arr_time, .by = c(origin, dest),
  #                            sort_groups = FALSE, na_rm = FALSE),
  #              flights2 |>
  #                dplyr::slice_min(arr_time, by = c(origin, dest)))
  expect_equal(flights2 |>
                 f_slice_min(arr_time, n = 150),
               flights2 |>
                 dplyr::slice_min(arr_time, n = 150))

  # Prop
  expect_equal(flights2 |>
                 f_slice_min(arr_time, prop = 0, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_min(arr_time, prop = 0, na_rm = FALSE))
  expect_equal(flights2 |>
                 f_slice_min(arr_time, prop = 1, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_min(arr_time, prop = 1, na_rm = FALSE))
  expect_equal(flights2 |>
                 f_slice_min(arr_time, prop = 1, na_rm = TRUE),
               flights2 |>
                 dplyr::slice_min(arr_time, prop = 1, na_rm = TRUE))
  expect_equal(flights2 |>
                 f_slice_min(arr_time, prop = 0.33, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_min(arr_time, prop = 0.33, na_rm = FALSE))
  expect_equal(flights2 |>
                 f_slice_min(arr_time, prop = 0.33, na_rm = TRUE),
               flights2 |>
                 dplyr::slice_min(arr_time, prop = 0.33, na_rm = TRUE))
  expect_equal(flights2 |>
                 f_slice_min(arr_time, prop = -0.33, na_rm = TRUE),
               flights2 |>
                 dplyr::slice_min(arr_time, prop = -0.33, na_rm = TRUE))


  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = 4, na_rm = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = 4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = 4, na_rm = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = 4, na_rm = TRUE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = 4, na_rm = TRUE, with_ties = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = 4, na_rm = TRUE, with_ties = FALSE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = 100, na_rm = TRUE, with_ties = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = 100, na_rm = TRUE, with_ties = FALSE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = 100, na_rm = FALSE, with_ties = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = 100, na_rm = FALSE, with_ties = FALSE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = 4, na_rm = FALSE, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = 4, na_rm = FALSE) |>
                 dplyr::arrange(id))

  expect_equal(flights2 |>
                 f_slice_min(arr_time, n = -4, na_rm = FALSE, keep_order = TRUE),
               flights2 |>
                 dplyr::slice_min(arr_time, n = -4) |>
                 dplyr::arrange(id))
  expect_equal(flights2 |>
                 f_slice_min(arr_time, n = -4, na_rm = FALSE, keep_order = FALSE),
               flights2 |>
                 dplyr::slice_min(arr_time, n = -4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = -10, na_rm = FALSE, keep_order = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = -10))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_min(arr_time, n = -10, na_rm = FALSE, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_min(arr_time, n = -10) |>
                 dplyr::arrange(id))
})
test_that("f_slice_max", {
  flights2 <- nycflights13::flights
  set.seed(81243844)
  flights2 <- flights2[sample(seq_len(nrow(flights2)),
                              size = 10^4), ]
  flights2[["id"]] <- seq_len(nrow(flights2))

  expect_equal(flights2 |>
                 f_slice_max(arr_time, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_max(arr_time))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, na_rm = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time))
  expect_equal(flights2 |>
                 f_group_by(origin, dest, .order = FALSE) |>
                 f_slice_max(arr_time, na_rm = FALSE) |>
                 f_ungroup(),
               flights2 |>
                 dplyr::slice_max(arr_time, by = c(origin, dest)))
  expect_equal(flights2 |>
                 f_slice_max(arr_time, n = 150),
               flights2 |>
                 dplyr::slice_max(arr_time, n = 150))

  # Prop
  expect_equal(flights2 |>
                 f_slice_max(arr_time, prop = 0, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_max(arr_time, prop = 0, na_rm = FALSE))
  expect_equal(flights2 |>
                 f_slice_max(arr_time, prop = 1, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_max(arr_time, prop = 1, na_rm = FALSE))
  expect_equal(flights2 |>
                 f_slice_max(arr_time, prop = 1, na_rm = TRUE),
               flights2 |>
                 dplyr::slice_max(arr_time, prop = 1, na_rm = TRUE))
  expect_equal(flights2 |>
                 f_slice_max(arr_time, prop = 0.33, na_rm = FALSE),
               flights2 |>
                 dplyr::slice_max(arr_time, prop = 0.33, na_rm = FALSE))
  expect_equal(flights2 |>
                 f_slice_max(arr_time, prop = 0.33, na_rm = TRUE),
               flights2 |>
                 dplyr::slice_max(arr_time, prop = 0.33, na_rm = TRUE))
  expect_equal(flights2 |>
                 f_slice_max(arr_time, prop = -0.33, na_rm = TRUE),
               flights2 |>
                 dplyr::slice_max(arr_time, prop = -0.33, na_rm = TRUE))


  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = 4, na_rm = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = 4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = 4, na_rm = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = 4, na_rm = TRUE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = 4, na_rm = TRUE, with_ties = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = 4, na_rm = TRUE, with_ties = FALSE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = 100, na_rm = TRUE, with_ties = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = 100, na_rm = TRUE, with_ties = FALSE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = 100, na_rm = FALSE, with_ties = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = 100, na_rm = FALSE, with_ties = FALSE))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = 4, na_rm = FALSE, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = 4, na_rm = FALSE) |>
                 dplyr::arrange(id))

  expect_equal(flights2 |>
                 f_slice_max(arr_time, n = -4, na_rm = FALSE, keep_order = TRUE),
               flights2 |>
                 dplyr::slice_max(arr_time, n = -4) |>
                 dplyr::arrange(id))
  expect_equal(flights2 |>
                 f_slice_max(arr_time, n = -4, na_rm = FALSE, keep_order = FALSE),
               flights2 |>
                 dplyr::slice_max(arr_time, n = -4))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = -10, na_rm = FALSE, keep_order = FALSE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = -10))
  expect_equal(flights2 |>
                 dplyr::group_by(origin, dest) |>
                 f_slice_max(arr_time, n = -10, na_rm = FALSE, keep_order = TRUE),
               flights2 |>
                 dplyr::group_by(origin, dest) |>
                 dplyr::slice_max(arr_time, n = -10) |>
                 dplyr::arrange(id))
})

test_that("test asan issues", {
  expect_equal(
    f_slice(iris, c(3L, 0L, 0L, 2L, 0L, 0L, 0L, 10000L, 0L)),
    cheapr::sset(iris, c(3L, 2L))
  )
})

Try the fastplyr package in your browser

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

fastplyr documentation built on June 8, 2025, 11:18 a.m.