tests/testthat/test04-dtjoin_anti-outcomes.R

# (1) no mult or mult.DT, single equality
test_that("dtjoin_anti single equality", {
  result <-
    dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B"))
  # compare <-
  #   dtjoin(DF_B, DF_A, on=c("id_B == id_A"), indicate = TRUE, i.main = TRUE) |>
  #   data.table::setDT() |>
  #   _[.join==1, unique(.SD), .SDcols = names(DF_A)] |>
  #   data.table::setDF()
  compare <-
    dplyr::anti_join(DF_A, DF_B, by=dplyr::join_by(id_A == id_B), na_matches = "never")
  print(result)
  print(compare)
  expect_identical(result, compare)
  expect_identical(class(result), class(compare))
})

# (2) no mult or mult.DT, other
  test_that("dtjoin_anti general", {
    result <-
      dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B", "t_A > t_B"))
    compare <-
      dplyr::anti_join(DF_A, DF_B, by=dplyr::join_by(id_A == id_B, t_A > t_B), na_matches = "never")
    print(result)
    print(compare)
    expect_identical(result, compare)
    expect_identical(class(result), class(compare))
  })

# (3) mult, with or without mult.DT
  test_that("dtjoin_anti mult = \"first\"", {
    result <-
      dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B"), mult = "first")
    compare <-
      DF_A[!DF_A$c %in% dtjoin(DF_A, DF_B, on=c("id_A == id_B"), nomatch = NULL, mult = "first")$c,]
    rownames(compare) <- NULL
    print(result)
    print(compare)
    expect_identical(result, compare)
    expect_identical(class(result), class(compare))
  })

# (4) mult.DT, no mult
  test_that("dtjoin_anti mult.DT = \"last\"", {
    result <-
      dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B"), mult.DT = "last")
    compare <-
      DF_A[!DF_A$c %in% dtjoin(DF_A, DF_B, on=c("id_A == id_B"), nomatch = NULL, mult.DT = "last")$c,]
    rownames(compare) <- NULL
    print(result)
    print(compare)
    expect_identical(result, compare)
    expect_identical(class(result), class(compare))
  })

  # ------------------------------------------------------------------------------
  # (1) select
  test_that("dtjoin_anti single equality (select)", {
    result <-
      dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B"), select = "c")
    compare <-
      dplyr::anti_join(DF_A, DF_B, by=dplyr::join_by(id_A == id_B), na_matches = "never") |> dplyr::select(id_A, c)
    print(result)
    print(compare)
    expect_identical(result, compare)
  })

  # (2) select
  test_that("dtjoin_anti general (select)", {
    result <-
      dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B", "t_A > t_B"), select = "c")
    compare <-
      dplyr::anti_join(DF_A, DF_B, by=dplyr::join_by(id_A == id_B, t_A > t_B), na_matches = "never") |> dplyr::select(id_A, t_A, c)
    print(result)
    print(compare)
    expect_identical(result, compare)
  })

  # (3) select
  test_that("dtjoin_anti mult = \"first\" (select)", {
    result <-
      dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B"), mult = "first", select = "c")
    compare <-
      DF_A[!DF_A$c %in% dtjoin(DF_A, DF_B, on=c("id_A == id_B"), nomatch = NULL, mult = "first")$c,] |> dplyr::select(id_A, c)
    rownames(compare) <- NULL
    print(result)
    print(compare)
    expect_identical(result, compare)
  })

  # (4) select
  test_that("dtjoin_anti mult.DT = \"last\" (select)", {
    result <-
      dtjoin_anti(DF_A, DF_B, on=c("id_A == id_B"), mult.DT = "last", select = "c")
    compare <-
      DF_A[!DF_A$c %in% dtjoin(DF_A, DF_B, on=c("id_A == id_B"), nomatch = NULL, mult.DT = "last")$c,] |> dplyr::select(id_A, c)
    rownames(compare) <- NULL
    print(result)
    print(compare)
    expect_identical(result, compare)
  })

Try the fjoin package in your browser

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

fjoin documentation built on Dec. 11, 2025, 5:07 p.m.