library(testthat) library(AutoEDA) #========================================================== # outlier_summary() #========================================================== test_that("outlier_summary returns OutlierSummary object", { out <- outlier_summary(iris) expect_s3_class( out, "OutlierSummary" ) }) test_that("outlier_summary returns data.frame", { out <- outlier_summary(iris) expect_s3_class( out, "data.frame" ) }) test_that("outlier_summary accepts IQR method", { expect_no_error( outlier_summary( iris, method = "IQR" ) ) }) test_that("outlier_summary accepts ZScore method", { expect_no_error( outlier_summary( iris, method = "ZScore" ) ) }) test_that("outlier_summary accepts MAD method", { expect_no_error( outlier_summary( iris, method = "MAD" ) ) }) test_that("outlier_summary works with numeric-only data", { out <- outlier_summary( iris[, 1:4] ) expect_s3_class( out, "OutlierSummary" ) }) test_that("outlier_summary works with missing values", { dat <- iris dat$Sepal.Length[1:10] <- NA expect_no_error( outlier_summary(dat) ) }) test_that("outlier_summary works when no outliers exist", { dat <- data.frame( x = c(10,11,12,13,14,15), y = c(20,21,22,23,24,25) ) out <- outlier_summary(dat) expect_true( all(out$Outliers == 0) ) }) test_that("outlier_summary returns expected columns", { out <- outlier_summary(iris) expect_equal( names(out), c( "Variable", "Method", "Outliers", "Percent" ) ) }) #========================================================== # Invalid input #========================================================== test_that("outlier_summary rejects non-data.frame", { expect_error( outlier_summary( 1:10 ) ) }) test_that("outlier_summary rejects empty data.frame", { expect_error( outlier_summary( data.frame() ) ) }) test_that("outlier_summary rejects non-numeric data", { expect_error( outlier_summary( data.frame( A = letters[1:10], B = LETTERS[1:10] ) ) ) }) test_that("outlier_summary rejects invalid method", { expect_error( outlier_summary( iris, method = "ABC" ) ) })