hydroeval_release_metric_exports <- function() { c( "mae", "rmse", "pbias", "nse", "kge_2009", "me", "medae", "mse", "sse", "sae", "max_error", "rae", "rrse", "nrmse", "r_squared", "mape", "smape", "wape", "msle", "rmsle", "evs", "r", "rho", "ccc", "rsr", "ubrmse", "ve", "d", "d_r", "rsd", "kge_2012" ) } hydroeval_release_expected_exports <- function() { c(hydroeval_release_metric_exports(), "gof", "gof_compare") } hydroeval_release_gof_default_metric_ids <- c( "me", "mae", "mse", "rmse", "nrmse", "pbias", "rsr", "rsd", "nse", "d", "d_r", "r", "r_squared", "ve", "kge_2009", "kge_2012" ) hydroeval_release_gof_all_metric_ids <- c( "mae", "rmse", "pbias", "nse", "kge_2009", "me", "medae", "mse", "sse", "sae", "max_error", "rae", "rrse", "nrmse", "r_squared", "mape", "smape", "wape", "msle", "rmsle", "evs", "r", "rho", "ccc", "rsr", "ubrmse", "ve", "d", "d_r", "rsd", "kge_2012" ) hydroeval_release_get_export <- function(name) { if ("hydroeval" %in% loadedNamespaces()) { return(getExportedValue("hydroeval", name)) } .hydroeval_test_get_object(name, mode = "function") } hydroeval_release_gof <- function(...) { hydroeval_release_get_export("gof")(...) } hydroeval_release_gof_compare <- function(...) { hydroeval_release_get_export("gof_compare")(...) } hydroeval_release_call_wrapper <- function( metric_name, observed, simulated, na_policy = "omit" ) { metric_fn <- hydroeval_release_get_export(metric_name) metric_fn( observed = observed, simulated = simulated, na_policy = na_policy ) } hydroeval_release_expect_scalar_double <- function(value) { testthat::expect_type(value, "double") testthat::expect_length(value, 1L) testthat::expect_null(names(value)) testthat::expect_false(is.na(value)) } hydroeval_release_expect_wrapper_contract <- function(metric_name, scenario, na_policy = "omit") { value <- hydroeval_release_call_wrapper( metric_name = metric_name, observed = scenario$observed, simulated = scenario$simulated, na_policy = na_policy ) hydroeval_release_expect_scalar_double(value) invisible(value) } hydroeval_release_expect_na_policy_forwarding <- function(metric_name) { scenario <- hydroeval_release_scenario("missing_omit") observed_value <- hydroeval_release_call_wrapper( metric_name = metric_name, observed = scenario$observed, simulated = scenario$simulated, na_policy = "omit" ) expected_value <- hydroeval_release_call_wrapper( metric_name = metric_name, observed = scenario$kept_observed, simulated = scenario$kept_simulated, na_policy = "omit" ) testthat::expect_equal(observed_value, expected_value, tolerance = 1e-12) testthat::expect_error( hydroeval_release_call_wrapper( metric_name = metric_name, observed = scenario$observed, simulated = scenario$simulated, na_policy = "fail" ), class = "hydroeval_validation_error", regexp = "Missing `NA` values are not allowed" ) } hydroeval_release_expect_gof_views_agree <- function(x) { matrix_view <- as.matrix(x) data_view <- as.data.frame(x) testthat::expect_true(is.matrix(matrix_view)) testthat::expect_identical(rownames(matrix_view), x$display_labels) testthat::expect_identical(colnames(matrix_view), "value") testthat::expect_equal(unname(matrix_view[, 1L]), unname(x$values), tolerance = 1e-12) testthat::expect_identical(data_view$metric, x$metric_ids) testthat::expect_equal(data_view$value, unname(x$values), tolerance = 1e-12) } hydroeval_release_expect_gof_compare_views_agree <- function(x) { matrix_view <- as.matrix(x) data_view <- as.data.frame(x) metric_ids <- attr(x, "metric_ids", exact = TRUE) display_labels <- attr(x, "display_labels", exact = TRUE) testthat::expect_true(is.matrix(matrix_view)) testthat::expect_identical(dimnames(matrix_view), dimnames(x)) testthat::expect_identical(data_view$metric, metric_ids) testthat::expect_identical(data_view$display_label, display_labels) testthat::expect_equal(unname(matrix_view[, , drop = FALSE]), unname(x[, , drop = FALSE]), tolerance = 1e-12) testthat::expect_equal( unname(as.matrix(data_view[, setdiff(names(data_view), c("metric", "display_label")), drop = FALSE])), unname(x[, , drop = FALSE]), tolerance = 1e-12 ) }