## test-autoML.R test_that("nrm_benchmark returns metrics data frame", { data(nrm_example, package = "NRMstatsML") n <- nrow(nrm_example) train <- nrm_example[seq_len(floor(0.75 * n)), ] test <- nrm_example[seq(floor(0.75 * n) + 1L, n), ] m_ols <- lm(crop_yield ~ N + P + K, data = train) m_full <- lm(crop_yield ~ N + P + K + rainfall, data = train) bm <- nrm_benchmark( models = list(ols = m_ols, full = m_full), test_data = test, response_var = "crop_yield" ) expect_s3_class(bm, "nrm_benchmark") expect_true(is.data.frame(bm$metrics)) expect_true(all(c("model", "RMSE", "MAE", "Rsq") %in% names(bm$metrics))) expect_equal(nrow(bm$metrics), 2L) # Results should be sorted by RMSE ascending expect_true(bm$metrics$RMSE[1] <= bm$metrics$RMSE[2]) }) test_that("nrm_benchmark errors on unnamed model list", { data(nrm_example, package = "NRMstatsML") m <- lm(crop_yield ~ N, data = nrm_example) expect_error( nrm_benchmark(list(m), test_data = nrm_example, response_var = "crop_yield"), "named list" ) }) test_that("nrm_benchmark errors when response_var is missing", { data(nrm_example, package = "NRMstatsML") m <- lm(crop_yield ~ N, data = nrm_example) expect_error( nrm_benchmark(list(m1 = m), test_data = nrm_example, response_var = "nonexistent"), "Column\\(s\\) not found|not found" ) }) test_that("nrm_data_check catches missing values", { data(nrm_example, package = "NRMstatsML") d_miss <- nrm_example d_miss$N[3] <- NA result <- nrm_data_check(d_miss, verbose = FALSE) expect_true(length(result$warnings) > 0) expect_true(any(grepl("N", result$warnings))) }) test_that("nrm_data_check warns on missing time column", { data(nrm_example, package = "NRMstatsML") result <- nrm_data_check(nrm_example, time_var = "date", verbose = FALSE) expect_true(any(grepl("date", result$warnings))) }) test_that("nrm_summary dispatches without error for nrm_multivariate", { data(nrm_example, package = "NRMstatsML") mv <- nrm_multivariate(nrm_example, formula = crop_yield ~ N + P + K) expect_invisible(nrm_summary(mv)) })