diff --git a/base/utils/R/ud_convert.R b/base/utils/R/ud_convert.R index fbbe2f4b88..4278d2ea40 100644 --- a/base/utils/R/ud_convert.R +++ b/base/utils/R/ud_convert.R @@ -19,9 +19,9 @@ ud_convert <- function(x, u1, u2) { warning("Units of `x` don't match `u1`, using '", units::deparse_unit(x1), "' instead") } } else { - x1 <- units::set_units(as.numeric(x), value = u1, mode = "standard") + return(units::ud_convert(as.numeric(x), u1, u2)) } - x2 <- units::set_units(x1, value = u2, mode = "standard") - - units::drop_units(x2) +x2 <- units::set_units(x1, value = u2, mode = "standard") + +units::drop_units(x2) } # ud_convert diff --git a/base/utils/tests/testthat/test-ud_convert.R b/base/utils/tests/testthat/test-ud_convert.R index 799b79a6a7..5f9f862a91 100644 --- a/base/utils/tests/testthat/test-ud_convert.R +++ b/base/utils/tests/testthat/test-ud_convert.R @@ -53,4 +53,21 @@ test_that("model-specific flux conversions", { test_that("photosynthesis parameters", { # Photosynthesis energy parameters expect_equal(ud_convert(1000, "J/mol", "kJ/mol"), 1) +}) + +test_that("ud_convert handles vector inputs", { + expect_equal(ud_convert(c(0, 10, 100), "degC", "K"), c(273.15, 283.15, 373.15)) + x <- seq(0, 100, length.out = 1000) + result <- ud_convert(x, "cm", "m") + expect_equal(result, x / 100) + expect_length(result, 1000) +}) + +test_that("ud_convert handles NA in vectors", { + result <- ud_convert(c(1, NA, 3), "m", "cm") + expect_equal(result, c(100, NA, 300)) +}) + +test_that("ud_convert handles integer input", { + expect_equal(ud_convert(1L, "m", "cm"), 100) }) \ No newline at end of file