tests/testthat/test-class_parallel.R

tar_test("parallel$validate() on a good queue", {
  q <- parallel_init(names = letters[seq_len(3)], ranks = seq_len(3))
  expect_silent(q$validate())
})

tar_test("parallel$validate() with non-numeric ranks", {
  data <- letters[seq_len(3)]
  names(data) <- data
  q <- parallel_new(data)
  expect_error(q$validate(), class = "tar_condition_validate")
})

tar_test("parallel$is_nonempty()", {
  q <- parallel_init()
  expect_false(q$is_nonempty())
  expect_equal(length(q$data), q$n_data)
  expect_equal(q$n_data, 0L)
  expect_equal(length(q$ready$data), 0L)
  q$append(names = "abc", rank = 1L)
  expect_true(q$is_nonempty())
  expect_equal(length(q$data), q$n_data)
  expect_equal(q$n_data, 1L)
  q$increment_ranks(names = "abc", by = -1L)
  expect_equal(length(q$data), q$n_data)
  expect_equal(q$n_data, 0L)
  expect_true(q$is_nonempty())
  expect_equal(q$dequeue(), "abc")
  expect_equal(length(q$data), q$n_data)
  expect_equal(q$n_data, 0L)
  expect_false(q$is_nonempty())
})

tar_test("parallel$dequeue() and parallel$should_dequeue()", {
  q <- parallel_init(names = c("a", "b", "c", "d"), ranks = c(1, 0, 2, 0))
  expect_equal(as.list(q$data), list(a = 1, c = 2))
  expect_equal(q$n_data, 2L)
  expect_equal(q$ready$data, c("b", "d"))
  expect_true(q$should_dequeue())
  expect_equal(q$dequeue(), "b")
  expect_true(q$should_dequeue())
  expect_equal(q$dequeue(), "d")
  expect_false(q$should_dequeue())
  expect_null(q$dequeue())
  q$increment_ranks(names = c("a", "c"), by = c(-1L, -2L))
  expect_true(q$should_dequeue())
  expect_equal(q$dequeue(), "a")
  expect_true(q$should_dequeue())
  expect_equal(q$dequeue(), "c")
  expect_false(q$should_dequeue())
  expect_null(q$dequeue())
})

tar_test("parallel$append()", {
  q <- parallel_init(
    names = c("a", "b", "c", "d"), ranks = c(1, 0, 2, 0),
    step = 4L
  )
  q$append(names = c("x", "y"), ranks = c(0, 3))
  expect_equal(q$ready$data, c("b", "d", "x", rep(NA_character_, 3L)))
  expect_equal(length(as.list(q$data)), 3L)
  expect_equal(
    as.list(q$data)[sort(names(q$data))],
    list(a = 1, c = 2, y = 3)[sort(c("a", "c", "y"))]
  )
  q$append(names = c("w", "z"), ranks = c(0, 3))
  expect_equal(q$ready$data, c("b", "d", "x", "w", rep(NA_character_, 2L)))
  expect_equal(length(as.list(q$data)), 4L)
  expect_equal(
    as.list(q$data)[sort(names(q$data))],
    list(a = 1, c = 2, y = 3, z = 3)[sort(c("a", "c", "y", "z"))]
  )
})

tar_test("parallel$prepend()", {
  q <- parallel_init(
    names = c("a", "b", "c", "d"), ranks = c(1, 0, 2, 0),
    step = 4L
  )
  q$prepend(names = c("x", "y"), ranks = c(0, 3))
  expect_equal(q$ready$data, c("x", "b", "d"))
  expect_equal(length(as.list(q$data)), 3L)
  expect_equal(
    as.list(q$data)[sort(names(q$data))],
    list(a = 1, c = 2, y = 3)[sort(c("a", "c", "y"))]
  )
  q$prepend(names = c("w", "z"), ranks = c(0, 3))
  expect_equal(q$ready$data, c("w", "x", "b", "d"))
  expect_equal(length(as.list(q$data)), 4L)
  expect_equal(q$n_data, 4L)
  expect_equal(
    as.list(q$data)[sort(names(q$data))],
    list(a = 1, c = 2, y = 3, z = 3)[sort(c("a", "c", "y", "z"))]
  )
})

tar_test("parallel$increment_ranks()", {
  q <- parallel_init(
    names = c("a", "b", "c", "d"), ranks = c(1, 0, 2, 0),
    step = 4L
  )
  q$increment_ranks(names = c("b", "c", "x"), by = c(6, 7, 8))
  expect_equal(q$ready$data, c("b", "d"))
  expect_equal(length(q$data), 2L)
  expect_equal(q$n_data, 2L)
  expect_equal(as.list(q$data)[c("a", "c")], list(a = 1, c = 9))
  q$increment_ranks(names = c("a", "c"), by = -10)
  expect_equal(
    q$ready$data,
    c("b", "d", "a", "c", NA_character_, NA_character_)
  )
  expect_equal(length(q$data), 0L)
  expect_equal(q$n_data, 0L)
})

tar_test("parallel$reset()", {
  q <- parallel_init(
    names = letters,
    ranks = c(1, 2, rep(0, 24L)),
    step = 100L
  )
  expect_equal(q$dequeue(), "c")
  expect_equal(q$ready$data, letters[-c(1L, 2L)])
  expect_equal(q$ready$head, 2L)
  expect_equal(q$ready$tail, 24L)
  expect_equal(length(as.list(q$data)), 2L)
  expect_equal(
    as.list(q$data)[c("a", "b")],
    list(a = 1, b = 2)
  )
  expect_true(q$is_nonempty())
  q$reset()
  expect_equal(q$ready$data, character(0L))
  expect_equal(q$ready$head, 1L)
  expect_equal(q$ready$tail, 0L)
  expect_equal(as.list(q$data), list())
  expect_false(q$is_nonempty())
})
ropensci/targets documentation built on June 13, 2025, 5:18 a.m.