test_that("testJob", {
  reg = makeTestRegistry()
  f = function(x) if (x %% 2 == 0) stop("foo") else x^2
  batchMap(reg = reg, f, 1:3)
  expect_equal(testJob(reg = reg, id = 1), 1)
  expect_equal(testJob(reg = reg, id = 3), 9)
  expect_error(testJob(reg = reg, id = 2), "foo")

  expect_equal(suppressAll(testJob(reg = reg, id = 1, external = TRUE)), 1)
  expect_error(suppressAll(testJob(reg = reg, id = 2, external = TRUE)), "re-run")

  expect_equal(findSubmitted(reg = reg), data.table(job.id = integer(0L), key = "job.id"))
  expect_equal(findDone(reg = reg), data.table(job.id = integer(0L), key = "job.id"))
  expect_equal(findErrors(reg = reg), data.table(job.id = integer(0L), key = "job.id"))
})

test_that("testJob.ExperimentRegistry", {
  reg = makeTestExperimentRegistry()
  prob = addProblem(reg = reg, "p1", data = iris, fun = function(job, data, ...) nrow(data), seed = 42)
  algo = addAlgorithm(reg = reg, "a1", fun = function(job, data, instance, sq, ...) instance^sq)
  ids = addExperiments(prob.designs = list(p1 = data.table()), algo.designs = list(a1 = data.table(sq = 1:3)), reg = reg)

  suppressAll(x <- testJob(id = 1, reg = reg))
  expect_equal(x, 150)
  suppressAll(x <- testJob(id = 2, reg = reg, external = TRUE))
  expect_equal(x, 150^2)
})

test_that("traceback works in external session", {
  reg = makeTestRegistry()
  f = function(x) {
    g = function(x) findme(x)
    findme = function(x) h(x)
    h = function(x) stop("Error in h")
    g(x)
  }
  batchMap(f, 1, reg = reg)
  expect_output(expect_error(testJob(1, external = TRUE, reg = reg), "external=FALSE"), "findme")
})
