From e5ebfff7e9247d029ecb07a1ee2a6db74b8aeabb Mon Sep 17 00:00:00 2001 From: jbaldwin Date: Sun, 19 Nov 2023 13:09:38 -0700 Subject: [PATCH] Add std::ranges::view test for coro::when_all Closes #211 --- test/test_when_all.cpp | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/test/test_when_all.cpp b/test/test_when_all.cpp index de4baf09..6ead3221 100644 --- a/test/test_when_all.cpp +++ b/test/test_when_all.cpp @@ -3,6 +3,7 @@ #include #include +#include #include TEST_CASE("when_all single task with tuple container", "[when_all]") @@ -137,4 +138,35 @@ TEST_CASE("when_all inside coroutine", "[when_all]") auto result = coro::sync_wait(runner_task()); REQUIRE(result == (1 + 2 + 3)); -} \ No newline at end of file +} + +TEST_CASE("when_all use std::ranges::view", "[when_all]") +{ + coro::thread_pool tp{}; + + auto make_task = [&](uint64_t amount) -> coro::task + { + co_await tp.schedule(); + co_return amount; + }; + + auto make_runner_task = [&]() -> coro::task + { + std::vector> tasks; + tasks.emplace_back(make_task(1)); + tasks.emplace_back(make_task(2)); + tasks.emplace_back(make_task(3)); + + auto output_tasks = co_await coro::when_all(std::ranges::views::all(tasks)); + + uint64_t result{0}; + for (const auto& task : output_tasks) + { + result += task.return_value(); + } + co_return result; + }; + + auto result = coro::sync_wait(make_runner_task()); + REQUIRE(result == (1 + 2 + 3)); +}