changeset 241:1937d63a2a14

multipromise: add test for standard generator use case
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 21 Apr 2024 19:08:51 +0200
parents 44d9017dc6d9
children bfca650947ca
files test/misc_test.cc
diffstat 1 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/test/misc_test.cc	Sun Apr 21 19:04:59 2024 +0200
+++ b/test/misc_test.cc	Sun Apr 21 19:08:51 2024 +0200
@@ -145,6 +145,27 @@
   throw UvcoException("ticker");
 }
 
+TEST(MultiPromiseTest, standardGenerator) {
+  constexpr static int countMax = 10;
+  auto yielder = []() -> uvco::MultiPromise<int> {
+    for (int i = 0; i < countMax; ++i) {
+      co_yield i;
+    }
+  };
+
+  auto setup = [&yielder](const Loop &loop) -> uvco::Promise<void> {
+    MultiPromise<int> ticker = yielder();
+    for (int i = 0; i < countMax; ++i) {
+      const auto value = co_await ticker;
+      EXPECT_TRUE(value.has_value());
+      EXPECT_EQ(i, value.value());
+    }
+    EXPECT_EQ(co_await ticker, std::nullopt);
+  };
+
+  run_loop(setup);
+}
+
 TEST(MultiPromiseTest, exception) {
   auto setup = [](const Loop &loop) -> uvco::Promise<void> {
     MultiPromise<int> ticker = miniTicker(loop);
@@ -153,6 +174,7 @@
     EXPECT_EQ(co_await ticker, 2);
     EXPECT_THROW({ co_await ticker; }, UvcoException);
   };
+
   run_loop(setup);
 }