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( ...@@ -275,16 +275,22 @@ auto makeUnorderedAsyncGenerator(
AsyncScope& scope, std::vector<SemiAwaitable> awaitables) AsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedAsyncGenerator( -> decltype(makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedAsyncGenerator( auto gen =
scope, awaitables | ranges::views::move); makeUnorderedAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) {
co_yield co_result(co_await co_awaitTry(gen.next()));
}
} }
template <typename SemiAwaitable> template <typename SemiAwaitable>
auto makeUnorderedTryAsyncGenerator( auto makeUnorderedTryAsyncGenerator(
AsyncScope& scope, std::vector<SemiAwaitable> awaitables) AsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedTryAsyncGenerator( -> decltype(makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedTryAsyncGenerator( auto gen =
scope, awaitables | ranges::views::move); makeUnorderedTryAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) {
co_yield co_result(co_await co_awaitTry(gen.next()));
}
} }
// Can also be used with CancellableAsyncScope // Can also be used with CancellableAsyncScope
...@@ -307,16 +313,22 @@ auto makeUnorderedAsyncGenerator( ...@@ -307,16 +313,22 @@ auto makeUnorderedAsyncGenerator(
CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables) CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedAsyncGenerator( -> decltype(makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedAsyncGenerator( auto gen =
scope, awaitables | ranges::views::move); makeUnorderedAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) {
co_yield co_result(co_await co_awaitTry(gen.next()));
}
} }
template <typename SemiAwaitable> template <typename SemiAwaitable>
auto makeUnorderedTryAsyncGenerator( auto makeUnorderedTryAsyncGenerator(
CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables) CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedTryAsyncGenerator( -> decltype(makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, awaitables | ranges::views::move)) {
co_return co_await makeUnorderedTryAsyncGenerator( auto gen =
scope, awaitables | ranges::views::move); 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) { ...@@ -910,15 +910,13 @@ TEST_F(CollectAllRangeTest, GeneratorFromRange) {
co_await folly::coro::sleep(std::chrono::milliseconds(100 * i)); co_await folly::coro::sleep(std::chrono::milliseconds(100 * i));
co_return i; co_return i;
}; };
auto generateTasks = std::vector<folly::coro::Task<int>> tasks;
[&]() -> folly::coro::Generator<folly::coro::Task<int>&&> { for (int i = 5; i > 0; --i) {
for (int i = 5; i > 0; --i) { tasks.push_back(makeTask(i));
co_yield makeTask(i); }
}
};
auto results = auto results =
folly::coro::makeUnorderedAsyncGenerator(scope, generateTasks()); folly::coro::makeUnorderedAsyncGenerator(scope, std::move(tasks));
// co_await doesn't work inside EXPECT_EQ // co_await doesn't work inside EXPECT_EQ
EXPECT_TRUE(*(co_await results.next()) == 1); EXPECT_TRUE(*(co_await results.next()) == 1);
EXPECT_TRUE(*(co_await results.next()) == 2); EXPECT_TRUE(*(co_await results.next()) == 2);
...@@ -1259,15 +1257,13 @@ TEST_F(CollectAllTryRangeTest, GeneratorFromRange) { ...@@ -1259,15 +1257,13 @@ TEST_F(CollectAllTryRangeTest, GeneratorFromRange) {
co_await folly::coro::sleep(std::chrono::milliseconds(100 * i)); co_await folly::coro::sleep(std::chrono::milliseconds(100 * i));
co_return i; co_return i;
}; };
auto generateTasks = std::vector<folly::coro::Task<int>> tasks;
[&]() -> folly::coro::Generator<folly::coro::Task<int>&&> { for (int i = 5; i > 0; --i) {
for (int i = 5; i > 0; --i) { tasks.push_back(makeTask(i));
co_yield makeTask(i); }
}
};
auto results = auto results =
folly::coro::makeUnorderedTryAsyncGenerator(scope, generateTasks()); folly::coro::makeUnorderedTryAsyncGenerator(scope, std::move(tasks));
// co_await doesn't work inside EXPECT_EQ // co_await doesn't work inside EXPECT_EQ
EXPECT_TRUE(**(co_await results.next()) == 1); EXPECT_TRUE(**(co_await results.next()) == 1);
EXPECT_TRUE(**(co_await results.next()) == 2); 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