From 2438b58b033fe8076b73046632da533d3e895db3 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 5 Dec 2022 09:08:46 -0800 Subject: [PATCH] [promises] TryConcurrently: add tests for many push/pulls (#31758) --- test/core/promise/try_concurrently_test.cc | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/core/promise/try_concurrently_test.cc b/test/core/promise/try_concurrently_test.cc index 9815377a1fd..8b6c47d58cd 100644 --- a/test/core/promise/try_concurrently_test.cc +++ b/test/core/promise/try_concurrently_test.cc @@ -126,6 +126,36 @@ TEST(TryConcurrentlyTest, OneFailed) { EXPECT_EQ(pf.Finish(), std::vector({"1", "wha"})); } +TEST(TryConcurrently, MuchPush) { + PromiseFactory pf; + auto p = TryConcurrently(pf.OkPromise("1")) + .NecessaryPush(pf.OkPromise("2")) + .NecessaryPush(pf.OkPromise("3")) + .NecessaryPush(pf.OkPromise("4")) + .NecessaryPush(pf.OkPromise("5")) + .NecessaryPush(pf.OkPromise("6")) + .NecessaryPush(pf.OkPromise("7")) + .NecessaryPush(pf.OkPromise("8")); + EXPECT_EQ(p(), Poll(absl::OkStatus())); + EXPECT_EQ(pf.Finish(), std::vector( + {"8", "7", "6", "5", "4", "3", "2", "1"})); +} + +TEST(TryConcurrently, SoPull) { + PromiseFactory pf; + auto p = TryConcurrently(pf.OkPromise("1")) + .NecessaryPull(pf.OkPromise("2")) + .NecessaryPull(pf.OkPromise("3")) + .NecessaryPull(pf.OkPromise("4")) + .NecessaryPull(pf.OkPromise("5")) + .NecessaryPull(pf.OkPromise("6")) + .NecessaryPull(pf.OkPromise("7")) + .NecessaryPull(pf.OkPromise("8")); + EXPECT_EQ(p(), Poll(absl::OkStatus())); + EXPECT_EQ(pf.Finish(), std::vector( + {"1", "8", "7", "6", "5", "4", "3", "2"})); +} + // A pointer to an int designed to cause a double free if it's double destructed // (to flush out bugs) class ProblematicPointer {