tests/testthat/test-cache_logic.R

test_function <- function() {
  data.frame(x = rnorm(100), y = rnorm(100))
}


test_function_memoised <- memoise::memoise(test_function)


same <- function(x, y) {
  isTRUE(all.equal(x, y))
}


context("cache logic")

test_that("doesn't cache by default", {
  res1 <- with_cache(
    use_cache = FALSE,
    file = NULL,
    test_function_memoised,
    test_function
  )
  res2 <- with_cache(
    use_cache = FALSE,
    file = NULL,
    test_function_memoised,
    test_function
  )

  expect_false(same(res1, res2))

  file <- tempfile()
  res1 <- with_cache(
    use_cache = FALSE,
    file = file,
    test_function_memoised,
    test_function
  )
  res2 <- with_cache(
    use_cache = FALSE,
    file = file,
    test_function_memoised,
    test_function
  )

  expect_false(same(res1, res2))

  res_file <- read.csv(file)
  expect_equal(res2, res_file, check.attributes = FALSE)
})


test_that("cache works", {
  res1 <- with_cache(
    use_cache = TRUE,
    file = NULL,
    test_function_memoised,
    test_function
  )
  res2 <- with_cache(
    use_cache = TRUE,
    file = NULL,
    test_function_memoised,
    test_function
  )

  expect_equal(res1, res2, check.attributes = FALSE)
  file <- tempfile()
  res3 <- with_cache(
    use_cache = TRUE,
    file = file,
    test_function_memoised,
    test_function
  )
  res4 <- with_cache(
    use_cache = TRUE,
    file = file,
    test_function_memoised,
    test_function
  )

  expect_equal(res3, res4, check.attributes = FALSE)

  expect_false(same(res1, res3))
})

Try the rsoi package in your browser

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

rsoi documentation built on March 13, 2026, 9:07 a.m.