# Tests for SSIM functions test_that("create_ssim creates correct structure", { ssim <- create_ssim(4) expect_s3_class(ssim, "ssim_matrix") expect_equal(nrow(ssim), 4) expect_equal(ncol(ssim), 4) # Diagonal should be X expect_equal(as.vector(diag(ssim)), rep("X", 4)) # Lower triangle should be "-" expect_true(all(ssim[lower.tri(ssim)] == "-")) # Upper triangle should be empty expect_true(all(ssim[upper.tri(ssim)] == "")) }) test_that("create_ssim accepts character vector", { labels <- c("A", "B", "C") ssim <- create_ssim(labels) expect_equal(rownames(ssim), labels) expect_equal(colnames(ssim), labels) }) test_that("create_ssim with custom labels", { ssim <- create_ssim(3, labels = c("X", "Y", "Z")) expect_equal(rownames(ssim), c("X", "Y", "Z")) }) test_that("ssim_to_matrix converts V correctly", { ssim <- create_ssim(3) ssim[1, 2] <- "V" # 1 -> 2 ssim[1, 3] <- "V" # 1 -> 3 adj <- ssim_to_matrix(ssim) expect_equal(adj[1, 2], 1) expect_equal(adj[1, 3], 1) expect_equal(adj[2, 1], 0) expect_equal(adj[3, 1], 0) }) test_that("ssim_to_matrix converts A correctly", { ssim <- create_ssim(3) ssim[1, 2] <- "A" # 2 -> 1 adj <- ssim_to_matrix(ssim) expect_equal(adj[2, 1], 1) expect_equal(adj[1, 2], 0) }) test_that("ssim_to_matrix converts X correctly", { ssim <- create_ssim(3) ssim[1, 2] <- "X" # 1 <-> 2 adj <- ssim_to_matrix(ssim) expect_equal(adj[1, 2], 1) expect_equal(adj[2, 1], 1) }) test_that("ssim_to_matrix converts O correctly", { ssim <- create_ssim(3) ssim[1, 2] <- "O" # No relation adj <- ssim_to_matrix(ssim) expect_equal(adj[1, 2], 0) expect_equal(adj[2, 1], 0) }) test_that("ssim_to_matrix is case-insensitive", { ssim <- create_ssim(3) ssim[1, 2] <- "v" # lowercase ssim[1, 3] <- "a" adj <- ssim_to_matrix(ssim) expect_equal(adj[1, 2], 1) expect_equal(adj[3, 1], 1) }) test_that("ssim_to_matrix validates invalid codes", { ssim <- create_ssim(3) ssim[1, 2] <- "Z" # Invalid expect_error(ssim_to_matrix(ssim), "Invalid SSIM codes") }) test_that("ssim_to_matrix preserves labels", { ssim <- create_ssim(c("A", "B", "C")) ssim["A", "B"] <- "V" adj <- ssim_to_matrix(ssim) expect_equal(rownames(adj), c("A", "B", "C")) expect_equal(colnames(adj), c("A", "B", "C")) }) test_that("print.ssim_matrix works", { ssim <- create_ssim(3) expect_output(print(ssim), "Structural Self-Interaction Matrix") expect_output(print(ssim), "V = i->j") })