diff --git a/NEWS.md b/NEWS.md index a25451d5..3783ee32 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # bayesplot (development version) +* Added unit tests for previously untested edge cases in `param_range()`, `param_glue()`, and `tidyselect_parameters()` (no-match, partial-match, and negation behavior). * Bumped minimum version for `rstantools` from `>= 1.5.0` to `>= 2.0.0` . * Use `rlang::warn()` and `rlang::inform()` for selected PPC user messages instead of base `warning()` and `message()`. * Standardize input validation errors in `ppc_km_overlay()` and interpolation helpers to use `rlang::abort()` for consistent error handling. diff --git a/tests/testthat/test-tidy-params.R b/tests/testthat/test-tidy-params.R new file mode 100644 index 00000000..5a8b62d5 --- /dev/null +++ b/tests/testthat/test-tidy-params.R @@ -0,0 +1,40 @@ +source(test_path("data-for-mcmc-tests.R")) + +# param_range -------------------------------------------------------------- + +test_that("param_range returns empty integer when no matches", { + all_pars <- c("alpha", "gamma[1]", "gamma[2]") + result <- param_range("beta", 1:3, vars = all_pars) + expect_identical(result, integer(0)) +}) + +test_that("param_range drops non-matching indices silently", { + all_pars <- c("alpha", "beta[1]", "beta[3]") + # beta[2] does not exist, should be silently dropped + result <- param_range("beta", 1:3, vars = all_pars) + expect_equal(result, c(2L, 3L)) +}) + +# param_glue --------------------------------------------------------------- + +test_that("param_glue returns empty integer when no matches", { + all_pars <- c("alpha", "sigma") + result <- param_glue("beta[{i}]", i = 1:3, vars = all_pars) + expect_identical(result, integer(0)) +}) + +test_that("param_glue drops non-matching names silently", { + all_pars <- c("b[X:1]", "b[Y:2]", "sigma") + # b[X:2] and b[Y:1] don't exist + result <- param_glue("b[{var}:{lev}]", var = c("X", "Y"), lev = c(1, 2), + vars = all_pars) + expect_equal(result, c(1L, 2L)) +}) + +# tidyselect_parameters ---------------------------------------------------- + +test_that("tidyselect_parameters works with negation", { + all_pars <- c("alpha", "beta[1]", "beta[2]", "sigma") + selected <- tidyselect_parameters(all_pars, vars(-alpha)) + expect_equal(selected, c("beta[1]", "beta[2]", "sigma")) +})