tests/testthat/test-lifecycle.R

# tests/testthat/test-lifecycle.R

test_that("register -> retrieve -> release lifecycle works for matrix and vector", {
  ns <- paste0("lifecycle_", Sys.getpid(), "_", sample.int(1e6, 1))
  
  mat <- matrix(as.double(1:6), nrow = 2, ncol = 3)
  vec <- as.double(1:3)
  
  # Ensure clean state
  on.exit({
    # Try to release; ignore errors in case they were already released
    try(memshare::releaseViews(ns, c("mat", "vec")), silent = TRUE)
    try(memshare::releaseVariables(ns, c("mat", "vec")), silent = TRUE)
  }, add = TRUE)
  
  memshare::registerVariables(ns, list(mat = mat, vec = vec))
  
  # pageList() should show both names
  pages <- memshare::pageList()
  expect_true(any(grepl(paste0(ns, ".mat"), pages, fixed = TRUE)))
  expect_true(any(grepl(paste0(ns, ".vec"), pages, fixed = TRUE)))
  
  # Retrieve views and check contents
  views <- memshare::retrieveViews(ns, c("mat", "vec"))
  expect_true(is.matrix(views$mat))
  expect_true(is.numeric(views$vec))
  expect_equal(views$mat, mat)
  expect_equal(as.numeric(views$vec), vec)
  
  # viewList() must reflect that we hold mat and vec
  vlist <- memshare::viewList()
  expect_true(any(grepl(paste0(ns, ".mat"), vlist, fixed = TRUE)))
  expect_true(any(grepl(paste0(ns, ".vec"), vlist, fixed = TRUE)))
  
  # Release views
  memshare::releaseViews(ns, c("mat", "vec"))
  vlist_after <- memshare::viewList()
  expect_false(any(grepl(paste0(ns, ".mat"), vlist_after, fixed = TRUE)))
  expect_false(any(grepl(paste0(ns, ".vec"), vlist_after, fixed = TRUE)))
  
  # Release variables
  memshare::releaseVariables(ns, c("mat", "vec"))
  pages_after <- memshare::pageList()
  expect_false(any(grepl(paste0(ns, ".mat"), pages_after, fixed = TRUE)))
  expect_false(any(grepl(paste0(ns, ".vec"), pages_after, fixed = TRUE)))
})

test_that("retrieveMetadata reports correct dimensions for matrices", {
  ns <- paste0("metadata_", Sys.getpid(), "_", sample.int(1e6, 1))
  mat <- matrix(runif(12), 3, 4)
  
  on.exit({
    try(memshare::releaseViews(ns, "mat"), silent = TRUE)
    try(memshare::releaseVariables(ns, "mat"), silent = TRUE)
  }, add = TRUE)
  
  memshare::registerVariables(ns, list(mat = mat))
  
  meta <- memshare::retrieveMetadata(ns, "mat")
  # NOTE: retrieveMetadata may implicitly create a view (as per your docs),
  # so we must release that.
  expect_equal(meta$type, "matrix")
  expect_equal(meta$nrow, nrow(mat))
  expect_equal(meta$ncol, ncol(mat))
  
  memshare::releaseViews(ns, "mat")
  memshare::releaseVariables(ns, "mat")
})

test_that("register/retrieve/release lifecycle is consistent", {
  ns <- paste0("test_ns", Sys.getpid(), "_", sample.int(1e6, 1))
  mat <- matrix(as.double(1:6), 2, 3)
  
  registerVariables(ns, list(MATRIX = mat))
  expect_true(length(pageList()) >= 1L)
  
  views <- retrieveViews(ns, "MATRIX")
  expect_true("MATRIX" %in% names(views))
  expect_equal(views$MATRIX, mat)
  
  releaseViews(ns, "MATRIX")
  releaseVariables(ns, "MATRIX")
  
  expect_false(any(grepl("MATRIX", unlist(pageList()), fixed = TRUE)))
})

Try the memshare package in your browser

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

memshare documentation built on Dec. 5, 2025, 9:07 a.m.