From 8ee7e051264b31433f24312a5923e470077e3d4f Mon Sep 17 00:00:00 2001 From: Hannah Frick Date: Tue, 2 Sep 2025 14:32:21 +0100 Subject: [PATCH 1/3] avoid infinite endpoints for sampling and sequences --- R/aaa_values.R | 12 ++++++++++++ tests/testthat/test-aaa_values.R | 29 +++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/R/aaa_values.R b/R/aaa_values.R index 7d187e8f..e0a67999 100644 --- a/R/aaa_values.R +++ b/R/aaa_values.R @@ -148,11 +148,17 @@ value_seq_dbl <- function(object, n, original = TRUE) { if (!object$inclusive["lower"]) { range_lower <- range_lower + .Machine$double.eps } + if (is.infinite(range_lower)) { + range_lower <- .Machine$double.xmin + } range_upper <- max(unlist(object$range)) if (!object$inclusive["upper"]) { range_upper <- range_upper - .Machine$double.eps } + if (is.infinite(range_upper)) { + range_upper <- .Machine$double.xmax + } res <- seq( from = range_lower, @@ -228,11 +234,17 @@ value_samp_dbl <- function(object, n, original = TRUE) { if (!object$inclusive["lower"]) { range_lower <- range_lower + .Machine$double.eps } + if (is.infinite(range_lower)) { + range_lower <- .Machine$double.xmin + } range_upper <- max(unlist(object$range)) if (!object$inclusive["upper"]) { range_upper <- range_upper - .Machine$double.eps } + if (is.infinite(range_upper)) { + range_upper <- .Machine$double.xmax + } res <- runif( n, diff --git a/tests/testthat/test-aaa_values.R b/tests/testthat/test-aaa_values.R index 2a1b3198..32db8a48 100644 --- a/tests/testthat/test-aaa_values.R +++ b/tests/testthat/test-aaa_values.R @@ -107,6 +107,20 @@ test_that("sequences - doubles", { ) }) +test_that("sequences - doubles - infinite range", { + param_with_infinite_bounds <- new_quant_param( + type = "double", + range = c(-Inf, Inf), + inclusive = c(FALSE, FALSE), + label = c(param = "param") + ) + expect_no_error( + seq_no_inf <- value_seq(param_with_infinite_bounds, 5) + ) + expect_true( + all(is.finite(seq_no_inf)) + ) +}) test_that("sequences - integers", { param_with_transformation <- @@ -198,6 +212,21 @@ test_that("sampling - doubles", { expect_in(value_sample(value_seq, 40), value_seq$values) }) +test_that("sampling - doubles - infinite range", { + param_with_infinite_bounds <- new_quant_param( + type = "double", + range = c(-Inf, Inf), + inclusive = c(FALSE, FALSE), + label = c(param = "param") + ) + expect_no_error( + sample_no_inf <- value_sample(param_with_infinite_bounds, 5) + ) + expect_true( + all(is.finite(sample_no_inf)) + ) +}) + test_that("sampling - integers", { test_param_2 <- new_quant_param( From 0d7ced3430f47c440ac40c5781d0ae2978a2f0ee Mon Sep 17 00:00:00 2001 From: Hannah Frick Date: Tue, 2 Sep 2025 15:53:48 +0100 Subject: [PATCH 2/3] it's okay if they are not finite --- tests/testthat/test-aaa_values.R | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/testthat/test-aaa_values.R b/tests/testthat/test-aaa_values.R index 32db8a48..6a54e1a2 100644 --- a/tests/testthat/test-aaa_values.R +++ b/tests/testthat/test-aaa_values.R @@ -117,9 +117,6 @@ test_that("sequences - doubles - infinite range", { expect_no_error( seq_no_inf <- value_seq(param_with_infinite_bounds, 5) ) - expect_true( - all(is.finite(seq_no_inf)) - ) }) test_that("sequences - integers", { @@ -222,9 +219,6 @@ test_that("sampling - doubles - infinite range", { expect_no_error( sample_no_inf <- value_sample(param_with_infinite_bounds, 5) ) - expect_true( - all(is.finite(sample_no_inf)) - ) }) test_that("sampling - integers", { From 4c2fcbeb800f262964d046b37e1255433dd6955e Mon Sep 17 00:00:00 2001 From: Hannah Frick Date: Tue, 2 Sep 2025 15:54:30 +0100 Subject: [PATCH 3/3] `xmin` is close to 0 (and positive) --- R/aaa_values.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/aaa_values.R b/R/aaa_values.R index e0a67999..5731b766 100644 --- a/R/aaa_values.R +++ b/R/aaa_values.R @@ -149,7 +149,7 @@ value_seq_dbl <- function(object, n, original = TRUE) { range_lower <- range_lower + .Machine$double.eps } if (is.infinite(range_lower)) { - range_lower <- .Machine$double.xmin + range_lower <- -.Machine$double.xmax } range_upper <- max(unlist(object$range)) @@ -235,7 +235,7 @@ value_samp_dbl <- function(object, n, original = TRUE) { range_lower <- range_lower + .Machine$double.eps } if (is.infinite(range_lower)) { - range_lower <- .Machine$double.xmin + range_lower <- -.Machine$double.xmax } range_upper <- max(unlist(object$range))