library(testthat) library(AutoEDA) #========================================================== # pca_analysis() #========================================================== test_that("pca_analysis returns PCAResult", { pca <- pca_analysis(iris) expect_s3_class( pca, "PCAResult" ) }) test_that("pca_analysis returns prcomp object", { pca <- pca_analysis(iris) expect_s3_class( pca, "prcomp" ) }) test_that("pca_analysis contains expected components", { pca <- pca_analysis(iris) expect_true("sdev" %in% names(pca)) expect_true("rotation" %in% names(pca)) expect_true("center" %in% names(pca)) expect_true("scale" %in% names(pca)) expect_true("x" %in% names(pca)) }) #========================================================== # scale argument #========================================================== test_that("pca_analysis accepts scale = TRUE", { expect_no_error( pca_analysis( iris, scale = TRUE ) ) }) test_that("pca_analysis accepts scale = FALSE", { expect_no_error( pca_analysis( iris, scale = FALSE ) ) }) #========================================================== # Different datasets #========================================================== test_that("pca_analysis works with numeric-only data", { pca <- pca_analysis( iris[,1:4] ) expect_s3_class( pca, "PCAResult" ) }) test_that("pca_analysis works with tibble", { skip_if_not_installed("tibble") dat <- tibble::as_tibble(iris) expect_no_error( pca_analysis(dat) ) }) #========================================================== # Invalid scale #========================================================== test_that("pca_analysis rejects numeric scale", { expect_error( pca_analysis( iris, scale = 1 ), "'scale'" ) }) test_that("pca_analysis rejects character scale", { expect_error( pca_analysis( iris, scale = "TRUE" ), "'scale'" ) }) test_that("pca_analysis rejects vector scale", { expect_error( pca_analysis( iris, scale = c(TRUE, FALSE) ), "'scale'" ) }) test_that("pca_analysis rejects NULL scale", { expect_error( pca_analysis( iris, scale = NULL ), "'scale'" ) }) #========================================================== # Invalid input #========================================================== test_that("pca_analysis rejects non-data.frame", { expect_error( pca_analysis( 1:10 ) ) }) test_that("pca_analysis rejects NULL", { expect_error( pca_analysis( NULL ) ) }) test_that("pca_analysis rejects character vector", { expect_error( pca_analysis( letters ) ) }) test_that("pca_analysis rejects empty data.frame", { expect_error( pca_analysis( data.frame() ) ) }) test_that("pca_analysis rejects one numeric variable", { expect_error( pca_analysis( data.frame( x = 1:10 ) ) ) }) test_that("pca_analysis rejects non-numeric data", { expect_error( pca_analysis( data.frame( A = letters[1:10], B = LETTERS[1:10] ) ) ) }) test_that("pca_analysis rejects one numeric and one character variable", { expect_error( pca_analysis( data.frame( x = 1:10, y = letters[1:10] ) ) ) }) test_that("pca_analysis rejects missing values", { dat <- iris dat$Sepal.Length[1:10] <- NA expect_error( pca_analysis(dat), "Missing values" ) })