tests/testthat/test-finite_set.R

# Tests for the finite_set R6 class

test_that("finite_set constructor creates valid object from vector", {
  # Given: A numeric vector
  values <- c(1, 2, 3, 4, 5)

  # When: Creating a finite_set
  fs <- finite_set$new(values)

  # Then: Object has correct class and stores unique values
  expect_s3_class(fs, "finite_set")
  expect_equal(fs$values, values)
})

test_that("finite_set constructor stores unique values only", {
  # Given: A vector with duplicates
  values <- c(1, 1, 2, 2, 3)

  # When: Creating a finite_set
  fs <- finite_set$new(values)

  # Then: Only unique values are stored
  expect_equal(sort(fs$values), c(1, 2, 3))
})

test_that("finite_set works with matrix input", {
  # Given: A matrix of values
  values <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3, ncol = 2)

  # When: Creating a finite_set
  fs <- finite_set$new(values)

  # Then: Object stores the matrix
  expect_true(is.matrix(fs$values))
})

test_that("finite_set$has correctly checks membership for vectors", {
  fs <- finite_set$new(c(1, 2, 3))

  expect_true(fs$has(1))
  expect_true(fs$has(2))
  expect_true(fs$has(3))
  expect_false(fs$has(4))
  expect_false(fs$has(0))
})

test_that("finite_set$has correctly checks membership for matrices", {
  values <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3, ncol = 2)
  fs <- finite_set$new(values)

  # Row that exists in the set
  expect_true(fs$has(c(1, 4)))
  expect_true(fs$has(c(2, 5)))

  # Row that does not exist
  expect_false(fs$has(c(1, 5)))
  expect_false(fs$has(c(10, 20)))
})

test_that("finite_set$infimum returns minimum for vectors", {
  fs <- finite_set$new(c(3, 1, 4, 1, 5, 9, 2, 6))

  expect_equal(fs$infimum(), 1)
})

test_that("finite_set$infimum returns column-wise minimums for matrices", {
  values <- matrix(c(1, 2, 3, 10, 5, 15), nrow = 3, ncol = 2)
  fs <- finite_set$new(values)

  expect_equal(fs$infimum(), c(1, 5))
})

test_that("finite_set$supremum returns maximum for vectors", {
  fs <- finite_set$new(c(3, 1, 4, 1, 5, 9, 2, 6))

  expect_equal(fs$supremum(), 9)
})

test_that("finite_set$supremum returns column-wise maximums for matrices", {
  values <- matrix(c(1, 2, 3, 10, 5, 15), nrow = 3, ncol = 2)
  fs <- finite_set$new(values)

  expect_equal(fs$supremum(), c(3, 15))
})

test_that("finite_set$dim returns 1 for vectors", {
  fs <- finite_set$new(c(1, 2, 3))

  expect_equal(fs$dim(), 1)
})

test_that("finite_set$dim returns number of columns for matrices", {
  values <- matrix(1:12, nrow = 4, ncol = 3)
  fs <- finite_set$new(values)

  expect_equal(fs$dim(), 3)
})

test_that("has.finite_set S3 wrapper works correctly", {
  fs <- finite_set$new(c(1, 2, 3))

  expect_true(has(fs, 1))
  expect_false(has(fs, 4))
})

test_that("infimum.finite_set S3 wrapper works correctly", {
  fs <- finite_set$new(c(5, 3, 7))

  expect_equal(infimum(fs), 3)
})

test_that("supremum.finite_set S3 wrapper works correctly", {
  fs <- finite_set$new(c(5, 3, 7))

  expect_equal(supremum(fs), 7)
})

test_that("dim.finite_set S3 wrapper works correctly", {
  fs <- finite_set$new(c(1, 2, 3))

  expect_equal(dim(fs), 1)
})

test_that("finite_set handles single value", {
  fs <- finite_set$new(42)

  expect_equal(fs$values, 42)
  expect_true(fs$has(42))
  expect_false(fs$has(0))
  expect_equal(fs$infimum(), 42)
  expect_equal(fs$supremum(), 42)
  expect_equal(fs$dim(), 1)
})

test_that("finite_set handles negative values", {
  fs <- finite_set$new(c(-5, -3, 0, 2, 4))

  expect_true(fs$has(-5))
  expect_true(fs$has(0))
  expect_equal(fs$infimum(), -5)
  expect_equal(fs$supremum(), 4)
})

Try the algebraic.dist package in your browser

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

algebraic.dist documentation built on Feb. 27, 2026, 5:06 p.m.