tests/testthat/test-detection_calculate.R

test_that("detection_calculate input checks work", {
  testthat::skip_on_cran()
  #' @srrstats {G5.2,G5.2b} Tests the assure function input checks are behaving
  #'   as expected.
  # run joint model to do tests with
  model1 <- suppressWarnings({
    joint_model(data = goby_data, cov = c("Filter_time", "Salinity"),
                n_chain = 1, n_warmup = 25, n_iter = 100, multicore = FALSE)
  })

  model2 <- suppressWarnings({
    joint_model(data = green_crab_data, family = "negbin",
                n_chain = 1, n_warmup = 25, n_iter = 100, multicore = FALSE)
  })

  #1. make sure model fit is of class stanfit
  expect_error(detection_calculate(as.matrix(model1$model), mu = c(0.1, 0.5),
                                   cov_val = c(0, 0)),
               "model_fit must be of class 'stanfit'.")

  #2. make sure ci is valid
  expect_error(detection_calculate(model1$model, mu = c("0", 0.5),
                                   cov_val = c(0, 0)),
               "mu must be a numeric vector of positive values")

  #3. make sure mu is a numeric vector of positive values
  expect_error(detection_calculate(model1$model, mu = c(0, 0.5),
                                   cov_val = c(0, 0)),
               "mu must be a numeric vector of positive values")

  #4. make sure probability is a numeric value between 0 and 1
  expect_error(detection_calculate(model1$model, mu = c(0.1, 0.5),
                                   cov_val = c(0, 0), probability = 1.05),
               "probability must be a numeric value between 0 and 1")

  #5. cov_val is numeric, if provided
  expect_error(detection_calculate(model1$model, mu = c(0.1, 0.5),
                                   cov_val = c("0", 0)),
               "cov_val must be a numeric vector")

  #6. Only include input cov_val if covariates are included in model
  expect_error(detection_calculate(model2$model, mu = c(0.1, 0.5),
                                   cov_val = c(0, 0)),
               paste0("cov_val must be NULL if the model does not ",
                      "contain site-level covariates."))

  #7. Input cov_val is the same length as the number of estimated covariates.
  expect_error(detection_calculate(model1$model, mu = c(0.1, 0.5),
                                   cov_val = c(0, 0, 0)),
               paste0("cov_val must be of the same length as the number of ",
                      "non-intercept site-level coefficients in the model."))

  #8. If covariates are in model, cov_val must be provided
  expect_error(detection_calculate(model1$model, mu = c(0.1, 0.5)),
               paste0("cov_val must be provided if the model contains ",
                      "site-level covariates."))

  #9. pcr_n must be an integer
  expect_error(detection_calculate(model1$model, mu = c(0.1, 0.5),
                                   cov_val = c(0, 0), pcr_n = 6.8),
               "pcr_n should be an integer.")
})

Try the eDNAjoint package in your browser

Any scripts or data that you put into this service are public.

eDNAjoint documentation built on June 21, 2025, 9:08 a.m.