Nothing
drake_context("memory")
test_with_dir("manage_memory() warns if loading missing deps", {
skip_on_cran() # CRAN gets essential tests only (check time limits).
con <- drake_config(
drake_plan(a = 1, b = a),
memory_strategy = "lookahead",
garbage_collection = TRUE
)
con$envir_graph <- ht_new()
con$envir_graph$graph <- con$graph
capture.output(
suppressWarnings( # https://github.com/richfitz/storr/issues/105 # nolint
manage_memory(target = "b", config = con)
),
type = "message"
)
expect_false(exists("b", envir = con$envir_targets, inherits = FALSE))
})
test_with_dir("garbage collection", {
skip_on_cran()
plan <- drake_plan(x = "x", y = "y")
make(plan, garbage_collection = TRUE)
expect_equal(readd(y), "y")
})
test_with_dir("a close look at the memory strategies", {
plan <- drake_plan(
x = 1,
y = 2,
z = 3,
a_x = x,
a_y = y,
a_z = z,
b_x = x,
b_y = y,
b_z = z,
c_x = x,
c_y = y,
c_z = z,
s = c(
s_a_x = s_a_x, s_a_y = s_a_y, s_a_z = s_a_z, s_b_x = s_b_x,
s_b_y = s_b_y, s_b_z = s_b_z, s_c_x = s_c_x, s_c_y = s_c_y,
s_c_z = s_c_z
),
t = c(
t_a_x = t_a_x, t_a_y = t_a_y, t_a_z = t_a_z, t_b_x = t_b_x,
t_b_y = t_b_y, t_b_z = t_b_z, t_c_x = t_c_x, t_c_y = t_c_y,
t_c_z = t_c_z
),
s_a_x = c(x, a_x),
s_a_y = c(y, a_y),
s_a_z = c(z, a_z),
s_b_x = c(x, b_x),
s_b_y = c(y, b_y),
s_b_z = c(z, b_z),
s_c_x = c(x, c_x),
s_c_y = c(y, c_y),
s_c_z = c(z, c_z),
t_a_x = a_x,
t_a_y = a_y,
t_a_z = a_z,
t_b_x = b_x,
t_b_y = b_y,
t_b_z = b_z,
t_c_x = c_x,
t_c_y = c_y,
t_c_z = c_z,
final1 = mean(s) + mean(t),
final2 = mean(s) - mean(t),
waitforme = c(a_x, c_y, s_b_x, t_a_z),
waitformetoo = c(waitforme, y)
)
envir <- environment()
config <- drake_config(
plan,
envir = envir,
cache = storr::storr_environment(),
session_info = FALSE,
memory_strategy = "lookahead"
)
config$envir_graph$graph <- config$graph
config$envir_loaded <- ht_new()
# actually run
config$plan <- plan
make_impl(config = config)
expect_true(all(plan$target %in% cached(cache = config$cache)))
# lookahead
clear_envir_targets("", config)
expect_equal(ls(config$envir_targets), character(0))
lapply(c("x", "y", "z"), function(x) {
manage_memory(x, config)
expect_equal(ls(config$envir_targets), character(0))
})
lapply(c("a_x", "b_x", "c_x"), function(x) {
manage_memory(x, config)
expect_equal(ls(config$envir_targets), "x")
})
manage_memory("a_y", config, downstream = "a_x")
expect_equal(sort(ls(config$envir_targets)), sort(c("x", "y")))
manage_memory("s", config)
deps <- paste(
"s",
rep(letters[1:3], times = 3),
rep(letters[24:26], each = 3),
sep = "_"
)
expect_equal(sort(deps), sort(ls(config$envir_targets)))
config$envir_targets$y <- 1
config$envir_loaded$targets <- c(config$envir_loaded$targets, "y")
manage_memory("waitforme", config)
deps <- c("y", "a_x", "c_y", "t_a_z", "s_b_x")
expect_equal(sort(deps), sort(ls(config$envir_targets)))
manage_memory("waitforme", config, downstream = "waitforme")
deps <- c("a_x", "c_y", "t_a_z", "s_b_x")
expect_equal(sort(deps), sort(ls(config$envir_targets)))
# speed
config$settings$memory_strategy <- "speed"
clear_envir_targets("", config)
expect_equal(ls(config$envir_targets), character(0))
lapply(c("x", "y", "z"), function(x) {
manage_memory(x, config)
expect_equal(ls(config$envir_targets), character(0))
})
lapply(c("a_x", "b_x", "c_x"), function(x) {
manage_memory(x, config)
expect_equal(ls(config$envir_targets), "x")
})
manage_memory("a_y", config)
expect_equal(sort(ls(config$envir_targets)), sort(c("x", "y")))
manage_memory("s", config)
deps <- paste(
"s",
rep(letters[1:3], times = 3),
rep(letters[24:26], each = 3),
sep = "_"
)
deps <- c(deps, c("x", "y"))
expect_equal(sort(deps), sort(ls(config$envir_targets)))
config$envir_targets$y <- 1
config$envir_loaded$targets <- c(config$envir_loaded$targets, "y")
manage_memory("waitforme", config)
deps <- unique(c(deps, "a_x", "c_y", "t_a_z", "s_b_x"))
expect_equal(sort(deps), sort(ls(config$envir_targets)))
# autoclean and preclean
for (strategy in c("preclean", "autoclean")) {
config$settings$memory_strategy <- strategy
rm(list = names(config$envir_targets), envir = config$envir_targets)
config$envir_loaded$targets <- character(0)
# initial discard and load
expect_equal(ls(config$envir_targets), character(0))
lapply(c("x", "y", "z"), function(x) {
manage_memory(x, config)
expect_equal(ls(config$envir_targets), character(0))
})
lapply(c("a_x", "b_x", "c_x"), function(x) {
manage_memory(x, config)
expect_equal(ls(config$envir_targets), "x")
})
manage_memory("a_y", config)
expect_equal(ls(config$envir_targets), "y")
manage_memory("s", config)
deps <- paste(
"s",
rep(letters[1:3], times = 3),
rep(letters[24:26], each = 3),
sep = "_"
)
expect_equal(sort(deps), sort(ls(config$envir_targets)))
config$envir_targets$y <- 1
config$envir_loaded$targets <- c(config$envir_loaded$targets, "y")
manage_memory("waitforme", config)
deps <- c("a_x", "c_y", "t_a_z", "s_b_x")
expect_equal(sort(deps), sort(ls(config$envir_targets)))
# final discard
if (exists("x", envir = config$envir_targets, inherits = FALSE)) {
rm(list = "x", envir = config$envir_targets)
}
config$envir_loaded$targets <- setdiff(config$envir_loaded$targets, "x")
assign_to_envir("x", "value", config)
e <- exists("x", envir = config$envir_targets, inherits = FALSE)
e2 <- "x" %in% config$envir_loaded$targets
expect_equal(e, config$settings$memory_strategy == "preclean")
expect_equal(e, e2)
if (e) {
rm(list = "x", envir = config$envir_targets)
config$envir_loaded$targets <- setdiff(config$envir_loaded$targets, "x")
}
}
# none
config$settings$memory_strategy <- "none"
manage_memory("final1", config)
expect_equal(sort(deps), sort(ls(config$envir_targets)))
# unload
config$settings$memory_strategy <- "unload"
manage_memory("s", config)
expect_equal(ls(config$envir_targets), character(0))
})
test_with_dir("primary memory strategies actually build everything", {
skip_on_cran() # CRAN gets essential tests only (check time limits).
skip_if_not_installed("knitr")
for (memory_strategy in c("speed", "autoclean", "preclean", "lookahead")) {
envir <- new.env(parent = globalenv())
cache <- storr::storr_environment()
load_mtcars_example(envir = envir)
make(
envir$my_plan,
envir = envir,
cache = cache,
session_info = FALSE,
memory_strategy = memory_strategy
)
expect_true(file_store("report.md") %in% cache$list())
}
})
test_with_dir("The unload and none strategies do not hold on to targets", {
skip_on_cran()
for (mem in c("none", "unload")) {
plan <- drake_plan(target84d2fe31 = 1, target167ff309 = target84d2fe31)
expect_error(make(plan, memory_strategy = mem), regexp = "not found")
expect_equal(drake_failed(), "target167ff309")
clean()
plan <- drake_plan(
target84d2fe31 = 1,
target167ff309 = readd(target84d2fe31)
)
clean()
make(plan, memory_strategy = mem)
config <- drake_config(plan, garbage_collection = TRUE)
expect_equal(sort(justbuilt(config)), sort(plan$target))
rm(envir = config$envir_targets)
rm(envir = config$cache$envir)
clean(destroy = TRUE, cache = config$cache)
gc()
}
})
test_with_dir("different memory strategies for each targret", {
skip_on_cran()
plan <- drake_plan(
targetx84d2fe31 = 1,
targetx167ff309 = target(targetx84d2fe31, memory_strategy = "speed"),
targetx523e1fba = target(targetx167ff309, memory_strategy = "unload")
)
expect_error(make(plan), regexp = "not found")
expect_equal(drake_failed(), "targetx523e1fba")
})
test_with_dir("drake_envir() and memory strategies", {
skip_on_cran()
plan <- drake_plan(
targety84d2fe31 = {
i <- 1
i
},
targety167ff309 = targety84d2fe31,
targety523e1fba = {
saveRDS(
ls(envir = drake_envir("targets")),
"ls.rds"
)
targety167ff309
}
)
make(
plan,
memory_strategy = "speed",
cache = storr::storr_environment(),
session_info = FALSE
)
l <- readRDS("ls.rds")
expect_true(all(c("targety84d2fe31", "targety167ff309") %in% l))
expect_false(any(c("i") %in% l))
make(
plan,
memory_strategy = "preclean",
cache = storr::storr_environment(),
session_info = FALSE
)
l <- readRDS("ls.rds")
expect_true(all(c("targety167ff309") %in% l))
expect_false(any(c("targety84d2fe31", "i") %in% l))
make(
plan,
memory_strategy = "lookahead",
cache = storr::storr_environment(),
session_info = FALSE
)
l <- readRDS("ls.rds")
expect_true(all(c("targety167ff309") %in% l))
expect_false(any(c("targety84d2fe31", "i") %in% l))
plan <- drake_plan(
targety84d2fe31 = {
i <- 1
i
},
targety167ff309 = {
out <- targety84d2fe31
rm(
targety84d2fe31,
envir = drake_envir("targets")
)
out
},
c = {
saveRDS(
ls(envir = drake_envir("targets")),
"ls.rds"
)
targety167ff309
}
)
make(
plan,
memory_strategy = "speed",
cache = storr::storr_environment(),
session_info = FALSE
)
l <- readRDS("ls.rds")
expect_true(all(c("targety167ff309") %in% l))
expect_false(any(c("targety84d2fe31", "i", "out") %in% l))
})
test_with_dir("drake_envir() depth", {
skip_on_cran()
e <- new.env(parent = globalenv())
plan <- drake_plan(
large_data_1 = sample.int(1e4),
large_data_2 = sample.int(1e4),
subset = c(large_data_1[seq_len(10)], large_data_2[seq_len(10)]),
summary = {
targs <- c("large_data_1", "large_data_2")
expect_true(all(targs %in% ls(
envir = drake_envir("targets")
)))
identity(
invisible(
invisible(
rm(
large_data_1,
large_data_2,
envir = drake_envir("targets")
)
)
)
)
expect_false(
any(targs %in% ls(envir = drake_envir("targets")))
)
mean(subset)
}
)
make(
plan,
envir = e,
cache = storr::storr_environment(),
session_info = FALSE
)
})
test_with_dir("drake_envir() in wrong context", {
skip_on_cran()
expect_error(
drake_envir(),
regexp = "the environment where drake builds targets"
)
})
test_with_dir("drake_envir(\"imports\") (#882)", {
skip_on_cran()
a <- 1
plan <- drake_plan(x = ls(drake_envir("imports")))
make(plan)
expect_true("a" %in% readd(x))
})
test_with_dir("centralized metadata (#1177)", {
skip_on_cran()
plan <- drake_plan(x = 1)
make(plan)
config <- drake_config(plan)
expect_error(drake_meta_("x", config, spec = NA))
expect_false(exists("x", envir = config$meta))
meta1 <- drake_meta_("x", config)
expect_true(exists("x", envir = config$meta))
meta2 <- drake_meta_("x", config)
expect_equal(meta1, meta2)
})
test_with_dir("centralized old metadata (#1177)", {
skip_on_cran()
plan <- drake_plan(x = 1)
make(plan)
config <- drake_config(plan)
expect_error(drake_meta_old("x", config = NA))
expect_false(exists("x", envir = config$meta_old))
meta1 <- drake_meta_old("x", config)
expect_true(exists("x", envir = config$meta_old))
meta2 <- drake_meta_old("x", config)
expect_equal(meta1, meta2)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.