# Tests for get_robust_cov() # Run with: devtools::test() or testthat::test_file("tests/testthat/test-robust_cov.R") test_that("get_robust_cov returns a list with center and cov", { set.seed(1) X <- matrix(rnorm(60 * 3), nrow = 60, ncol = 3) result <- get_robust_cov(X, method = "mcd") expect_type(result, "list") expect_named(result, c("center", "cov")) }) test_that("center has correct length", { set.seed(1) X <- matrix(rnorm(60 * 4), nrow = 60, ncol = 4) result <- get_robust_cov(X, method = "mcd") expect_length(result$center, 4) }) test_that("covariance matrix has correct dimensions", { set.seed(1) X <- matrix(rnorm(60 * 4), nrow = 60, ncol = 4) result <- get_robust_cov(X, method = "mcd") expect_equal(dim(result$cov), c(4, 4)) }) test_that("covariance matrix is symmetric", { set.seed(1) X <- matrix(rnorm(60 * 3), nrow = 60, ncol = 3) result <- get_robust_cov(X, method = "mcd") expect_equal(result$cov, t(result$cov), tolerance = 1e-10) }) test_that("all seven estimators run without error", { set.seed(1) X <- matrix(rnorm(80 * 3), nrow = 80, ncol = 3) methods <- c("mcd", "mve", "mest", "mmest", "sde", "sest", "ogk") for (m in methods) { expect_no_error(get_robust_cov(X, method = m)) } }) test_that("method is case-insensitive", { set.seed(1) X <- matrix(rnorm(60 * 3), nrow = 60, ncol = 3) expect_no_error(get_robust_cov(X, method = "MCD")) expect_no_error(get_robust_cov(X, method = "Mcd")) }) test_that("invalid method raises an error", { set.seed(1) X <- matrix(rnorm(60 * 3), nrow = 60, ncol = 3) expect_error(get_robust_cov(X, method = "unknown"), regexp = "must be one of") }) test_that("non-numeric data raises an error", { X <- data.frame(a = letters[1:10], b = 1:10) expect_error(get_robust_cov(X)) }) test_that("single-row data raises an error", { X <- matrix(1:5, nrow = 1) expect_error(get_robust_cov(X), regexp = "at least 2 rows") }) test_that("data frame input is accepted", { set.seed(1) X <- as.data.frame(matrix(rnorm(60 * 3), nrow = 60, ncol = 3)) expect_no_error(get_robust_cov(X, method = "mcd")) })