test_that("when_any", { do <- async(function() { d1 <- delay(1/10)$then(function(value) "foo") d2 <- delay(1/10000)$then(function(value) "bar") when_any(d1, d2)$ then(function(value) expect_equal(value, "bar")) }) synchronise(do()) }) test_that("when_any, non-deferred", { do <- async(function() { d1 <- delay(1/100)$then(function(value) "foo") d2 <- "bar" when_any(d1, d2)$ then(function(value) expect_equal(value, "bar"))$ then(function(.) d1)$ catch(error = identity) }) synchronise(do()) }) test_that("when_any, non-deferred only", { do <- async(function() { d1 <- "foo" d2 <- "bar" dx <- when_any(d1, d2)$ then(function(value) expect_true(value %in% c("foo", "bar"))) }) synchronise(do()) }) test_that("when_any, error first, success then", { do <- async(function() { d1 <- delay(1/10000)$then(function(value) stop("foo")) d2 <- delay(1/10)$then(function(value) "bar") dx <- when_any(d1, d2)$ then(function(value) expect_equal(value, "bar")) }) synchronise(do()) }) test_that("when_any, late error is ignored", { do <- async(function() { d1 <- delay(1/10)$then(function(value) stop("foo")) d2 <- delay(1/10000)$then(function(value) "bar") dx <- when_any(d1, d2)$ catch(error = function(value) expect_equal(value, "bar")) }) expect_silent(synchronise(do())) }) test_that("when_any, multiple errors", { skip_on_cran() errors <- list() do <- async(function() { d1 <- delay(1/10 )$then(function(value) stop("foo")) d2 <- delay(1/100000)$then(function(value) stop("bar")) dx <- when_any(d1, d2)$ catch(error = function(reason) { errors <<- reason$errors }) }) synchronise(do()) expect_match(conditionMessage(errors[[1]]), "bar") expect_match(conditionMessage(errors[[2]]), "foo") })