tests/testthat/test-f_join.R

df <- dplyr::starwars

left <- cheapr::sset(df, 1:35)
right <- cheapr::sset(df, 30:50)
left$skin_color <- as.factor(left$skin_color)
right$skin_color <- as.factor(right$skin_color)

join_cols <- c("eye_color", "films")

test_that("joins", {

  target <- dplyr::left_join(left, right, by = join_cols, relationship = "many-to-many")
  actual <- f_left_join(left, right, by = join_cols, multiple = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::right_join(left, right, by = join_cols, relationship = "many-to-many")
  actual <- f_right_join(left, right, by = join_cols, multiple = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::inner_join(left, right, by = join_cols, relationship = "many-to-many")
  actual <- f_inner_join(left, right, by = join_cols, multiple = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::full_join(left, right, by = join_cols, relationship = "many-to-many")
  actual <- f_full_join(left, right, by = join_cols, multiple = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::anti_join(left, right, by = join_cols)
  actual <- f_anti_join(left, right, by = join_cols)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::semi_join(left, right, by = join_cols)
  actual <- f_semi_join(left, right, by = join_cols)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::cross_join(left, right)
  actual <- f_cross_join(left, right)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)
})

test_that("joins with `keep = TRUE`", {

  target <- dplyr::left_join(left, right, by = join_cols, relationship = "many-to-many", keep = TRUE)
  actual <- f_left_join(left, right, by = join_cols, multiple = TRUE, keep = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::right_join(left, right, by = join_cols, relationship = "many-to-many", keep = TRUE)
  actual <- f_right_join(left, right, by = join_cols, multiple = TRUE, keep = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::inner_join(left, right, by = join_cols, relationship = "many-to-many", keep = TRUE)
  actual <- f_inner_join(left, right, by = join_cols, multiple = TRUE, keep = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::full_join(left, right, by = join_cols, relationship = "many-to-many", keep = TRUE)
  actual <- f_full_join(left, right, by = join_cols, multiple = TRUE, keep = TRUE)

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)
})

test_that("joins with suffix", {

  target <- dplyr::left_join(left, right, by = join_cols, relationship = "many-to-many", suffix = c("_left", "_right"))
  actual <- f_left_join(left, right, by = join_cols, multiple = TRUE, suffix = c("_left", "_right"))

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::right_join(left, right, by = join_cols, relationship = "many-to-many", suffix = c("_left", "_right"))
  actual <- f_right_join(left, right, by = join_cols, multiple = TRUE, suffix = c("_left", "_right"))

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::inner_join(left, right, by = join_cols, relationship = "many-to-many", suffix = c("_left", "_right"))
  actual <- f_inner_join(left, right, by = join_cols, multiple = TRUE, suffix = c("_left", "_right"))

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::full_join(left, right, by = join_cols, relationship = "many-to-many", suffix = c("_left", "_right"))
  actual <- f_full_join(left, right, by = join_cols, multiple = TRUE, suffix = c("_left", "_right"))

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)

  target <- dplyr::cross_join(left, right, suffix = c("_left", "_right"))
  actual <- f_cross_join(left, right, suffix = c("_left", "_right"))

  expect_identical(names(target), names(actual))
  expect_equal(nrow(dplyr::anti_join(target, actual, by = names(target))), 0)
})

Try the fastplyr package in your browser

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

fastplyr documentation built on Nov. 21, 2025, 5:07 p.m.