testthat::test_that("crosstable", {
  library(saros)
  testthat::expect_no_error(object = {
    x <-
      ex_survey |>
      saros:::crosstable.data.frame(
        dep = paste0("b_", 1:3),
        indep = NULL,
        showNA = "ifany"
      )
  })
  testthat::expect_equal(dim(x), c(9, 15))
  testthat::expect_equal(
    object = x |>
      dplyr::filter(.variable_name == "b_1", .category == "A bit") |>
      dplyr::pull(.proportion),
    expected = 0.4766667,
    tolerance = .00001
  )

  testthat::expect_no_error(object = {
    x <-
      ex_survey |>
      saros:::crosstable.data.frame(
        dep = paste0("b_", 1:3),
        indep = "x1_sex",
        showNA = "ifany"
      )
  })
  testthat::expect_equal(dim(x), c(18, 16))
  testthat::expect_equal(
    object = x |>
      dplyr::filter(
        .variable_name == "b_1",
        .category == "A lot",
        x1_sex == "Males"
      ) |>
      dplyr::pull(.proportion),
    expected = 0.1059603,
    tolerance = .0001
  )
})


testthat::test_that("crosstable works with explicit NA level", {
  library(saros)

  testthat::expect_no_error(object = {
    x <-
      ex_survey |>
      dplyr::mutate(dplyr::across(
        p_1:p_4,
        ~ forcats::fct_na_value_to_level(.x)
      )) |>
      saros:::crosstable.data.frame(
        dep = paste0("p_", 1:4),
        indep = "x1_sex",
        showNA = "ifany"
      )
  })
  testthat::expect_equal(dim(x), c(34, 16))
})


testthat::test_that("crosstable works with dep and indep having nothing in common and showNA='never'", {
  library(saros)

  testthat::expect_no_error(object = {
    x <-
      tibble::tibble(.rows = 100) |>
      dplyr::mutate(
        A = factor(sample(c(letters[1:5], NA), replace = T, size = 100)),
        B = factor(ifelse(
          !is.na(A),
          NA,
          sample(letters[1:2], replace = TRUE, size = 100)
        ))
      ) |>
      saros:::crosstable.data.frame(
        dep = "A",
        indep = "B",
        showNA = "never"
      )
  })
  testthat::expect_equal(dim(x), c(1, 16))
})
