Commit 4ae8b4df authored by Shai Szulanski's avatar Shai Szulanski Committed by Facebook GitHub Bot

Fix vector overloads for makeUnorderedAsyncGenerator

Reviewed By: capickett

Differential Revision: D30712092

fbshipit-source-id: 642e642bab883259f177f4419a0c3d562c929beb
parent a782676b
......@@ -275,16 +275,22 @@ auto makeUnorderedAsyncGenerator(
AsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move);
auto gen =
makeUnorderedAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) {
co_yield co_result(co_await co_awaitTry(gen.next()));
}
}
template <typename SemiAwaitable>
auto makeUnorderedTryAsyncGenerator(
AsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move);
auto gen =
makeUnorderedTryAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) {
co_yield co_result(co_await co_awaitTry(gen.next()));
}
}
// Can also be used with CancellableAsyncScope
......@@ -307,16 +313,22 @@ auto makeUnorderedAsyncGenerator(
CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move);
auto gen =
makeUnorderedAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) {
co_yield co_result(co_await co_awaitTry(gen.next()));
}
}
template <typename SemiAwaitable>
auto makeUnorderedTryAsyncGenerator(
CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move);
auto gen =
makeUnorderedTryAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) {
co_yield co_result(co_await co_awaitTry(gen.next()));
}
}
///////////////////////////////////////////////////////////////////////////////
......
......@@ -910,15 +910,13 @@ TEST_F(CollectAllRangeTest, GeneratorFromRange) {
co_await folly::coro::sleep(std::chrono::milliseconds(100 * i));
co_return i;
};
auto generateTasks =
[&]() -> folly::coro::Generator<folly::coro::Task<int>&&> {
for (int i = 5; i > 0; --i) {
co_yield makeTask(i);
}
};
std::vector<folly::coro::Task<int>> tasks;
for (int i = 5; i > 0; --i) {
tasks.push_back(makeTask(i));
}
auto results =
folly::coro::makeUnorderedAsyncGenerator(scope, generateTasks());
folly::coro::makeUnorderedAsyncGenerator(scope, std::move(tasks));
// co_await doesn't work inside EXPECT_EQ
EXPECT_TRUE(*(co_await results.next()) == 1);
EXPECT_TRUE(*(co_await results.next()) == 2);
......@@ -1259,15 +1257,13 @@ TEST_F(CollectAllTryRangeTest, GeneratorFromRange) {
co_await folly::coro::sleep(std::chrono::milliseconds(100 * i));
co_return i;
};
auto generateTasks =
[&]() -> folly::coro::Generator<folly::coro::Task<int>&&> {
for (int i = 5; i > 0; --i) {
co_yield makeTask(i);
}
};
std::vector<folly::coro::Task<int>> tasks;
for (int i = 5; i > 0; --i) {
tasks.push_back(makeTask(i));
}
auto results =
folly::coro::makeUnorderedTryAsyncGenerator(scope, generateTasks());
folly::coro::makeUnorderedTryAsyncGenerator(scope, std::move(tasks));
// co_await doesn't work inside EXPECT_EQ
EXPECT_TRUE(**(co_await results.next()) == 1);
EXPECT_TRUE(**(co_await results.next()) == 2);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment