skip_on_cran()

test_that("emmeans | lm", {
  skip_if_not_installed("emmeans")
  skip_if_not_installed("boot")
  skip_if_not_installed("coda")

  model <- lm(mpg ~ log(wt) + factor(cyl), data = mtcars)

  set.seed(7)
  b <- bootstrap_model(model, iterations = 1000)
  expect_equal(summary(emmeans::emmeans(b, ~cyl))$emmean,
    summary(emmeans::emmeans(model, ~cyl))$emmean,
    tolerance = 0.1
  )

  set.seed(7)
  b <- bootstrap_parameters(model, iterations = 1000)
  expect_equal(summary(emmeans::emmeans(b, ~cyl))$emmean,
    summary(emmeans::emmeans(model, ~cyl))$emmean,
    tolerance = 0.1
  )

  mp <- model_parameters(emmeans::emmeans(b, consec ~ cyl), verbose = FALSE)
  expect_identical(
    colnames(mp),
    c("Parameter", "Median", "CI", "CI_low", "CI_high", "pd", "Component")
  )
  expect_identical(nrow(mp), 5L)
})


test_that("emmeans | lmer", {
  skip_if_not_installed("emmeans")
  skip_if_not_installed("boot")
  skip_if_not_installed("lme4")
  skip_if_not_installed("coda")

  model <- lme4::lmer(mpg ~ log(wt) + factor(cyl) + (1 | gear), data = mtcars)

  set.seed(7)
  b <- bootstrap_model(model, iterations = 1000)
  expect_equal(summary(emmeans::emmeans(b, ~cyl))$emmean,
    summary(emmeans::emmeans(model, ~cyl))$emmean,
    tolerance = 0.1
  )

  set.seed(7)
  b <- bootstrap_parameters(model, iterations = 1000)
  expect_equal(summary(emmeans::emmeans(b, ~cyl))$emmean,
    summary(emmeans::emmeans(model, ~cyl))$emmean,
    tolerance = 0.1
  )

  mp <- suppressWarnings(model_parameters(emmeans::emmeans(b, consec ~ cyl)))
  expect_identical(
    colnames(mp),
    c("Parameter", "Median", "CI", "CI_low", "CI_high", "pd", "Component")
  )
  expect_identical(nrow(mp), 5L)
})

test_that("emmeans | glmmTMB", {
  skip_if_not_installed("coda")
  skip_if_not_installed("emmeans")
  skip_if_not_installed("boot")
  skip_if_not_installed("lme4")
  skip_if_not_installed("glmmTMB")

  data(Salamanders, package = "glmmTMB")
  model <- glmmTMB::glmmTMB(count ~ spp + mined + (1 | site), family = glmmTMB::nbinom2, data = Salamanders)

  set.seed(7)
  b <- bootstrap_parameters(model, iterations = 10)
  out <- summary(emmeans::emmeans(b, ~spp, type = "response"))

  expect_equal(
    out$response,
    c(0.654, 0.1515, 0.8856, 0.261, 0.9775, 1.2909, 0.9031),
    tolerance = 0.1
  )

  expect_identical(
    colnames(out),
    c("spp", "response", "lower.HPD", "upper.HPD")
  )
  expect_identical(nrow(out), 7L)
})
