tests/testthat/test-ssim.R

# 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")
})

Try the ISMtools package in your browser

Any scripts or data that you put into this service are public.

ISMtools documentation built on March 13, 2026, 1:06 a.m.