tests/testthat/test-utils-AddOnlyOrderedMap.R

test_that("AddOnlyOrderedMap basic creation and length", {
    map <- AddOnlyOrderedMap(keys = list("a", "b"), values = list(1, 2))
    expect_s3_class(map, "AddOnlyOrderedMap")
    expect_equal(length(map), 2)
})

test_that("AddOnlyOrderedMap insertion and querying", {
    map <- AddOnlyOrderedMap()
    map[["x"]] <- 10
    map[["y"]] <- 20
    expect_equal(map[["x"]], 10)
    expect_equal(map[["y"]], 20)
    expect_equal(map["x"], list(10))
    expect_equal(map["y"], list(20))
})

test_that("AddOnlyOrderedMap vectorized insertion and update", {
    map <- AddOnlyOrderedMap()
    map[c("a", "b")] <- c(1, 2)
    expect_equal(map[["a"]], 1)
    expect_equal(map[["b"]], 2)
    map[["a"]] <- 100
    expect_equal(map[["a"]], 100)
})

test_that("keys, has_key, values, as.list, get_key_to_index_map", {
    map <- AddOnlyOrderedMap(keys = list("k1", "k2"), values = list(11, 22))
    expect_equal(keys(map), list("k1", "k2"))
    expect_true(has_key(map, "k1"))
    expect_false(has_key(map, "not_in_map"))
    expect_equal(values(map), list(11, 22))
    aslist <- as.list(map)
    expect_true(is.list(aslist))
    expect_equal(unname(aslist), list(11, 22))
    idx_map <- get_key_to_index_map(map)
    expect_true("k1" %in% r2r::keys(idx_map))
    expect_true("k2" %in% r2r::keys(idx_map))
})

test_that("AddOnlyOrderedMap respects key and value validators", {
    key_val <- function(x) is.character(x) && nchar(x) == 1
    val_val <- function(x) is.numeric(x) && x > 0
    map <- AddOnlyOrderedMap(key_validator = key_val, val_validator = val_val)
    map[["z"]] <- 5
    expect_equal(map[["z"]], 5)
    expect_error(map[["zz"]] <- 1, "Key validation failed")
    expect_error(map[["a"]] <- -1, "Value validation failed")
})

test_that("get_keys_in_order and get_values_in_order preserve order", {
    map <- AddOnlyOrderedMap()
    map[["first"]] <- 1
    map[["second"]] <- 2
    map[["third"]] <- 3
    expect_equal(map$get_keys_in_order(), list("first", "second", "third"))
    expect_equal(map$get_values_in_order(), list(1, 2, 3))
})

test_that("size method returns correct size", {
    map <- AddOnlyOrderedMap()
    expect_equal(map$size(), 0)
    map[["a"]] <- 1
    expect_equal(map$size(), 1)
    map[["b"]] <- 2
    expect_equal(map$size(), 2)
})

test_that("modifying a value preserves map integrity", {
    map <- AddOnlyOrderedMap(keys = list("foo", "bar"), values = list(1, 2))
    map[["foo"]] <- 99
    expect_equal(map[["foo"]], 99)
    expect_equal(map[["bar"]], 2)
    expect_equal(keys(map), list("foo", "bar"))
    expect_equal(values(map), list(99, 2))
    expect_equal(unname(as.list(map)), list(99, 2))
    expect_equal(map$size(), 2)
})

Try the einops package in your browser

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

einops documentation built on Sept. 9, 2025, 5:29 p.m.