tests/testthat/test-query-explain.R

test_that("can simplify a query", {
  expect_equal(
    query_simplify(orderly_query("latest()")),
    list(outer = "latest", parts = set_names(list(), character())))
  expect_equal(
    query_simplify(orderly_query("latest(name == 'a')")),
    list(outer = "latest", parts = list(A = quote(name == "a"))))
  expect_equal(
    query_simplify(orderly_query("latest(name == 'a' && parameter:x == 1)")),
    list(outer = "latest", parts = list(A = quote(name == "a"),
                                        B = quote(parameter:x == 1))))
  expect_equal(
    query_simplify(
      orderly_query("name == 'a' && parameter:x == 1 && parameter:y == 2")),
    list(outer = character(),
         parts = list(A = quote(name == "a"),
                      B = quote(parameter:x == 1),
                      C = quote(parameter:y == 2))))
  expect_equal(
    query_simplify(orderly_query("latest((parameter:a == 1))")),
    list(outer = c("latest", "("), parts = list(A = quote(parameter:a == 1))))
})


test_that("Can explain a query", {
  root <- create_temporary_root(use_file_store = TRUE)
  ids <- list()
  for (name in c("x", "y", "z")) {
    ids[[name]] <- vcapply(1:3, function(i) {
      create_random_packet(root, name, list(a = i, b = 2 * i))
    })
  }

  x <- orderly_query_explain(quote(latest()), root = root)
  out <- testthat::evaluate_promise(print(x))
  expect_length(out$messages, 1)
  expect_match(out$messages, "Evaluated query: 'latest()' and found 1 packet",
               fixed = TRUE)

  x <- orderly_query_explain(quote(latest(parameter:x > 10)), root = root)
  out <- testthat::evaluate_promise(print(x))
  expect_length(out$messages, 2)
  expect_match(out$messages[[1]],
               "Evaluated query: 'latest(A)' and found 0 packets",
               fixed = TRUE)
  expect_match(out$messages[[2]], "A (parameter:x > 10): 0 packets",
               fixed = TRUE)

  x <- orderly_query_explain(
    quote(latest(parameter:a == 1 && parameter:b == 4)), root = root)
  expect_s3_class(x, "orderly_query_explain")
  out <- testthat::evaluate_promise(print(x))
  expect_length(out$messages, 5)
  expect_match(out$messages[[1]],
               "Evaluated query: 'latest(A && B)' and found 0 packets",
               fixed = TRUE)
  expect_match(out$messages[[2]], "A (parameter:a == 1): 3 packets",
               fixed = TRUE)
  expect_match(out$messages[[3]], "B (parameter:b == 4): 3 packets",
               fixed = TRUE)
  expect_match(out$messages[[4]], "Pairwise combinations:",
               fixed = TRUE)
  expect_match(out$messages[[5]], "A && B: 0 packets",
               fixed = TRUE)

  x <- orderly_query_explain(
    quote(latest(parameter:a == 1 && parameter:b == 1)), root = root)
  expect_s3_class(x, "orderly_query_explain")
  out <- testthat::evaluate_promise(print(x))
  expect_length(out$messages, 3)
  expect_match(out$messages[[1]],
               "Evaluated query: 'latest(A && B)' and found 0 packets",
               fixed = TRUE)
  expect_match(out$messages[[2]], "A (parameter:a == 1): 3 packets",
               fixed = TRUE)
  expect_match(out$messages[[3]], "B (parameter:b == 1): 0 packets",
               fixed = TRUE)
})

Try the orderly package in your browser

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

orderly documentation built on Jan. 24, 2026, 1:07 a.m.