Skip to content

Commit 9a4c0d1

Browse files
committed
add another test with more threads
1 parent 50adc32 commit 9a4c0d1

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

libs/internal/tests/promise_test.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,3 +406,38 @@ TEST(WhenAny, AlreadyResolved) {
406406
ASSERT_TRUE(r.has_value());
407407
EXPECT_EQ(*r, 0u);
408408
}
409+
410+
TEST(WhenAll, ConcurrentResolution) {
411+
auto spawn = [](int val) {
412+
Promise<int> p;
413+
Future<int> f = p.GetFuture();
414+
return std::make_pair(
415+
f, std::thread([p = std::move(p), val]() mutable {
416+
std::this_thread::sleep_for(std::chrono::milliseconds(10));
417+
p.Resolve(val);
418+
}));
419+
};
420+
421+
auto [f1, t1] = spawn(1);
422+
auto [f2, t2] = spawn(2);
423+
auto [f3, t3] = spawn(3);
424+
auto [f4, t4] = spawn(4);
425+
auto [f5, t5] = spawn(5);
426+
427+
auto result = WhenAll(f1, f2, f3, f4, f5);
428+
429+
auto r = result.WaitForResult(std::chrono::seconds(5));
430+
ASSERT_TRUE(r.has_value());
431+
432+
EXPECT_EQ(f1.GetResult().value(), 1);
433+
EXPECT_EQ(f2.GetResult().value(), 2);
434+
EXPECT_EQ(f3.GetResult().value(), 3);
435+
EXPECT_EQ(f4.GetResult().value(), 4);
436+
EXPECT_EQ(f5.GetResult().value(), 5);
437+
438+
t1.join();
439+
t2.join();
440+
t3.join();
441+
t4.join();
442+
t5.join();
443+
}

0 commit comments

Comments
 (0)