tests/testthat/test-audit.R

# `audit()` ---------------------------------------------------------------


# `audit()` for GRIM
data_grim  <- grim_map(pigs1)
audit_grim <- audit(data_grim)

test_that("`audit()` summarizes GRIM tests accurately", {
  expect_s3_class(audit_grim, "data.frame")
  expect_equal(as.numeric(audit_grim$all_cases - audit_grim$incons_cases),
               length(data_grim$consistency[data_grim$consistency]))
})



# `audit()` for DEBIT
data_debit  <- debit_map(pigs3)
audit_debit <- audit(data_debit)

test_that("`audit()` summarizes DEBIT tests accurately", {
  expect_equal(as.numeric(audit_debit$incons_cases), 1)
  expect_true(dplyr::near(as.numeric(audit_debit$all_cases), 7))
  expect_true(dplyr::near(round(audit_debit$incons_rate, 3), 0.143))
})



# `audit_seq()` -----------------------------------------------------------

data_grim_seq  <- grim_map_seq(pigs1)
data_grimmer_seq <- grimmer_map_seq(pigs5)
data_debit_seq <- debit_map_seq(pigs3)

# The scrutiny class is removed for the GRIM tibble because the latter is tested
# as an example for equality with tibbles that don't have that class:
audit_seq_grim    <- data_grim_seq    %>% audit_seq() %>% unclass_scr()
audit_seq_grimmer <- data_grimmer_seq %>% audit_seq()
audit_seq_debit   <- data_debit_seq   %>% audit_seq()

data_seq_grim_different_dispersion1 <- tibble::tibble(
  x = "4.74",
  n = 25L,
  consistency = FALSE,
  hits_total = 1L,
  hits_x = 0L,
  hits_n = 1L,
  diff_x = NA_integer_,
  diff_x_up = NA_integer_,
  diff_x_down = NA_integer_,
  diff_n = 9L,
  diff_n_up = 9L,
  diff_n_down = NA_integer_,
) %>%
  structure(class = c("scr_audit_seq", "tbl_df", "tbl", "data.frame"))

data_seq_grim_different_dispersion2 <- tibble::tibble(
  x = "5.23",
  n = 29L,
  consistency = FALSE,
  hits_total = 3L,
  hits_x = 1L,
  hits_n = 2L,
  diff_x = 5L,
  diff_x_up = 5L,
  diff_x_down = NA_integer_,
  diff_n = 3L,
  diff_n_up = NA_integer_,
  diff_n_down = -3L,
) %>%
  structure(class = c("scr_audit_seq", "tbl_df", "tbl", "data.frame"))

data_incons <- pigs1 %>%
  grim_map() %>%
  dplyr::filter(!consistency) %>%
  unclass_scr()


test_that("`audit_seq()` has correct output", {
  audit_seq_grim %>% dim() %>% expect_equal(c(8, 12))
  audit_seq_grim[1:3] %>% expect_equal(data_incons[1:3])
  audit_seq_grim[[4]] %>% expect_equal(c(4, 6, 6, 7, 3, 6, 8, 6))
  audit_seq_grim[[5]] %>% expect_equal(c(2, 3, 3, 3, 3, 3, 4, 3))
  audit_seq_grim[[6]] %>% expect_equal(c(2, 3, 3, 4, 0, 3, 4, 3))
  audit_seq_grim[[7]] %>% expect_equal(c(2, 1, 1, 1, 1, 1, 1, 1))
})


hits_total_is_correct <- function(audit_seq_output) {
  expected <- audit_seq_output %>%
    dplyr::rowwise() %>%
    dplyr::select(starts_with("hits"), -hits_total) %>%
    dplyr::mutate(hits_total_expected = sum(dplyr::c_across(everything()))) %>%
    dplyr::pull(hits_total_expected)
  all(expected == audit_seq_output$hits_total)
}


test_that("the `hits_total` column correctly sums up
          the other `hits_` columns", {
  audit_seq_grim    %>% hits_total_is_correct() %>% expect_true()
  audit_seq_grimmer %>% hits_total_is_correct() %>% expect_true()
  audit_seq_debit   %>% hits_total_is_correct() %>% expect_true()
})


test_that("changing `dispersion` in the sequence mapper is
          correctly captured by `audit_seq()`", {
  pigs1[1:2, ] %>%
    grim_map_seq(dispersion = c(7, 8, 9)) %>%
    audit_seq() %>%
    expect_equal(data_seq_grim_different_dispersion1)

  tibble::tibble(x = "5.23", n = 29) %>%
    grim_map_seq(dispersion = c(3, 5, 7)) %>%
    audit_seq() %>%
    expect_equal(data_seq_grim_different_dispersion2)
})
lhdjung/scrutiny documentation built on Sept. 28, 2024, 12:14 a.m.