tests/testthat/test-is_id.R

# Testing is_id function
withr::local_options(joyn.verbose = FALSE)

library(data.table)
x1 = data.table(id = c(1L, 1L, 2L, 3L, NA_integer_),
                t  = c(1L, 2L, 1L, 2L, NA_integer_),
                x  = 11:15)

y1 = data.table(id = c(1,2, 4),
                y  = c(11L, 15L, 16))


x2 = data.table(id = c(1, 4, 2, 3, NA),
                t  = c(1L, 2L, 1L, 2L, NA_integer_),
                x  = c(16, 12, NA, NA, 15))


y2 = data.table(id = c(1, 2, 5, 6, 3),
                yd = c(1, 2, 5, 6, 3),
                y  = c(11L, 15L, 20L, 13L, 10L),
                x  = c(16:20))


y3 <- data.table(id = c("c","b", "c", "a"),
                 y  = c(11L, 15L, 18L, 20L))

x3 <- data.table(id=c("c","b", "d"),
                 v=8:10,
                 foo=c(4,2, 7))

x4 = data.table(id1 = c(1, 1, 2, 3, 3),
                id2 = c(1, 1, 2, 3, 4),
                t   = c(1L, 2L, 1L, 2L, NA_integer_),
                x   = c(16, 12, NA, NA, 15))


y4 = data.table(id  = c(1, 2, 5, 6, 3),
                id2 = c(1, 1, 2, 3, 4),
                y   = c(11L, 15L, 20L, 13L, 10L),
                x   = c(16:20))

# Checking it correctly identifies whether the dt is (not) uniquely identified by `by` var
test_that("identifies no ids", {

  y <- data.table(
      id = c("c", "b", "c", "a"),
      y = c(11L, 15L, 18L, 20L)
    )

  expect_false(is_id(y, by = "id"))


  z <- data.table(
    id = c(1:1e7),
    a  = "z"
  )

  expect_true(is_id(z, by = "id"))


  w <- data.table(
    id = c(1, 1:1e7),
    a  = "w"
  )

  expect_false(is_id(w, by = "id"))


})

# Checking output when return_report is TRUE
test_that("returns correct report table", {

  y <- data.table(
      id = c("c", "b", "c", "a"),
      y = c(11L, 15L, 18L, 20L)
    )
  j <- is_id(y, by = "id", return_report = TRUE) |>
    roworder(by = "id")

  r <- data.table(id = c("c", "b", "a", "total"),
                  copies = c(2L, 1L, 1L, 4L),
                  percent = c("50%", "25%", "25%", "100%")) |>
    roworder(by = "id")

  expect_equal(j, r)

})

# Checking conversion to data table
test_that("convert to data.table when dataframe", {

  yy3 <- as.data.frame(y3)

  expect_false(is_id(yy3, "id"))

})
randrescastaneda/joyn documentation built on Dec. 20, 2024, 6:51 a.m.