dwww Home | Show directory contents | Find package

test_that("automatically finds common variables", {
  expect_message(vars <- join_cols(c("x", "y"), c("x", "z")))
  expect_named(vars$x$key, "x")
  expect_named(vars$y$key, "x")
})

test_that("key vars are found", {
  vars <- join_cols(c("x", "y"), c("x", "z"), by = "x")
  expect_equal(vars$x$key, c(x = 1L))
  expect_equal(vars$y$key, c(x = 1L))

  vars <- join_cols(c("a", "x", "b"), c("x", "a"), by = "x")
  expect_equal(vars$x$key, c(x = 2L))
  expect_equal(vars$y$key, c(x = 1L))

  vars <- join_cols(c("x", "y"), c("a", "x", "z"), by = c("y" = "z"))
  expect_equal(vars$x$key, c(y = 2L))
  expect_equal(vars$y$key, c(y = 3L))
})

test_that("y key matches order and names of x key", {
  vars <- join_cols(c("x", "y", "z"), c("c", "b", "a"), by = c("x" = "a", "y" = "b"))
  expect_equal(vars$x$key, c(x = 1L, y = 2L))
  expect_equal(vars$y$key, c(x = 3L, y = 2L))
})

test_that("duplicate column names are given suffixes", {
  vars <- join_cols(c("x", "y"), c("x", "y"), by = "x")
  expect_equal(vars$x$out, c("x" = 1, "y.x" = 2))
  expect_equal(vars$y$out, c("y.y" = 2))

  # including join vars when keep = TRUE
  vars <- join_cols(c("x", "y"), c("x", "y"), by = "x", keep = TRUE)
  expect_equal(vars$x$out, c("x.x" = 1, "y.x" = 2))
  expect_equal(vars$y$out, c("x.y" = 1, "y.y" = 2))

  # suffixes don't create duplicates
  vars <- join_cols(c("x", "y", "y.x"), c("x", "y"), by = "x")
  expect_equal(vars$x$out, c("x" = 1, "y.x" = 2, "y.x.x" = 3))
  expect_equal(vars$y$out, c("y.y" = 2))

  # but not when they're the join vars
  vars <- join_cols(c("A", "A.x"), c("B", "A.x", "A"), by = "A.x")
  expect_named(vars$x$out, c("A.x.x", "A.x"))
  expect_named(vars$y$out, c("B", "A.y"))

  # or when no suffix is requested
  vars <- join_cols(c("x", "y"), c("x", "y"), by = "x", suffix = c("", ".y"))
  expect_equal(vars$x$out, c("x" = 1, "y" = 2))
  expect_equal(vars$y$out, c("y.y" = 2))
})

test_that("NA names are preserved", {
  vars <- join_cols(c("x", NA), c("x", "z"), by = "x")
  expect_named(vars$x$out, c("x", NA))

  vars <- join_cols(c("x", NA), c("x", NA), by = "x")
  expect_named(vars$x$out, c("x", "NA.x"))
  expect_named(vars$y$out, "NA.y")
})

test_that("by columns omited from y" , {
  vars <- join_cols(c("x", "y"), c("x", "y"), by = c("x" = "y"))
  expect_equal(vars$x$out, c("x" = 1, "y" = 2))
  expect_equal(vars$y$out, c("x.y" = 1))

  # unless specifically requested
  vars <- join_cols(c("x", "y"), c("x", "y"), by = c("x" = "y"), keep = TRUE)
  expect_equal(vars$x$out, c("x.x" = 1, "y.x" = 2))
  expect_equal(vars$y$out, c("x.y" = 1, "y.y" = 2))
})

test_that("emits useful messages", {

  expect_snapshot({
    # names
    (expect_error(
      join_cols(c("x", "y"), c("y", "y"))
    ))
    (expect_error(
      join_cols(c("y", "y"), c("x", "y"))
    ))

    # common by
    xy <- c("x", "y")
    vars <- join_cols(xy, xy)

    # by errors
    (expect_error(
      join_cols(xy, c("a", "b"))
    ))

    (expect_error(
      join_cols(xy, xy, by = FALSE)
    ))
    (expect_error(
      join_cols(xy, xy, by = list(1, 2))
    ))
    (expect_error(
      join_cols(xy, xy, by = c("x", "x"))
    ))
    (expect_error(
      join_cols(xy, xy, by = c("x", NA))
    ))
    (expect_error(
      join_cols(xy, xy, by = c("aaa", "bbb"))
    ))

    # suffixes
    (expect_error(
      join_cols(xy, xy, by = "x", suffix = "x")
    ))
    (expect_error(
      join_cols(xy, xy, by = "x", suffix = c("", NA))
    ))
  })


})

Generated by dwww version 1.15 on Sun Jun 16 13:33:35 CEST 2024.