test_that("works as expected", {
if('qs' %in% utils::installed.packages()){ # caching requires qs.
caches = list(
list(
name = 'cache',
depends.on = c( 'test-files' )
),
list(
name = 'cache',
depends.on = c( 'test-files' )
),
list(
name = 'cache',
depends.on = c( 'test-files' )
)
)
cache.init(at.path = tempdir(), verbose = FALSE, caches = caches)
clear.cache()
# initially the cache should be invalid/non-existent/not-ok.
expect_equal( cache.ok(1), FALSE )
expect_equal( cache.ok(2), FALSE )
# now if we use save.cache it should make the cache OK.
expect_equal( cache.ok(1), FALSE ) # sets current cache to #1
save.cache( iris )
expect_equal( cache.ok(1), TRUE )
expect_equal( cache.ok(2), FALSE ) # confirm #2 is still not ok. and sets current cache to #2.
# now save again, which will make the next one ok.
save.cache( iris )
expect_equal( cache.ok(1), TRUE )
expect_equal( cache.ok(2), TRUE )
# now clear #2 and verify #1 is still ok.
clear.cache(2)
expect_equal( cache.ok(1), TRUE )
# clear cache now should invalidate #1.
clear.cache()
expect_equal( cache.ok(1), FALSE )
# caches with warnings:
cache.init(at.path = tempdir(), verbose = TRUE, caches = caches)
clear.cache()
# first cache, no warning.
# this is the typical use of caches - check if it's OK and if not then run the script.
if(!cache.ok(1)) withCallingHandlers({
x = iris # base-R dataset.
save.cache(x)
}, warning = cache.capture_warning)
# 2nd cache, do warning.
expect_warning(
if(!cache.ok(2)) withCallingHandlers({
y = mtcars # base-R dataset.
warning('warning 1')
save.cache(x, y)
}, warning = cache.capture_warning),
regexp = 'warning 1'
)
# 3rd cache, do 2 warnings. sometimes a cache covers multiple scripts.
expect_warning(
if(!cache.ok(3)) withCallingHandlers({
z = state.division # base-R dataset.
warning('warning 2')
}, warning = cache.capture_warning),
regexp = 'warning 2'
)
expect_warning(
if(!cache.ok(3)) withCallingHandlers({
warning('warning 3')
save.cache(x, y, z)
}, warning = cache.capture_warning),
regexp = 'warning 3'
)
# now if we run the caches again, we'd like to get both warnings again.
# however we don't because the code gets skipped.
expect_warning(
if(!cache.ok(2)) withCallingHandlers({
y = mtcars # base-R dataset.
warning('warning 1')
save.cache(x, y)
}, warning = cache.capture_warning),
regexp = 'warning 1'
)
expect_warning({
if(!cache.ok(3)) withCallingHandlers({
z = state.division # base-R dataset.
warning('warning 2')
}, warning = cache.capture_warning)
if(!cache.ok(3)) withCallingHandlers({
warning('warning 3')
save.cache(x, y, z)
}, warning = cache.capture_warning)
},
regexp = 'warning 2.+warning 3' # should get 2 warnings.
)
}
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.