xref: /aosp_15_r20/external/pigweed/pw_async2/poll_test.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker // Copyright 2023 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker 
15*61c4878aSAndroid Build Coastguard Worker #include "pw_async2/poll.h"
16*61c4878aSAndroid Build Coastguard Worker 
17*61c4878aSAndroid Build Coastguard Worker #include <type_traits>
18*61c4878aSAndroid Build Coastguard Worker 
19*61c4878aSAndroid Build Coastguard Worker #include "gtest/gtest.h"
20*61c4878aSAndroid Build Coastguard Worker #include "pw_async2/try.h"
21*61c4878aSAndroid Build Coastguard Worker #include "pw_result/result.h"
22*61c4878aSAndroid Build Coastguard Worker 
23*61c4878aSAndroid Build Coastguard Worker namespace pw::async2 {
24*61c4878aSAndroid Build Coastguard Worker namespace {
25*61c4878aSAndroid Build Coastguard Worker 
26*61c4878aSAndroid Build Coastguard Worker class MoveOnly {
27*61c4878aSAndroid Build Coastguard Worker  public:
28*61c4878aSAndroid Build Coastguard Worker   MoveOnly() = delete;
MoveOnly(int value)29*61c4878aSAndroid Build Coastguard Worker   MoveOnly(int value) : value_(value) {}
30*61c4878aSAndroid Build Coastguard Worker   MoveOnly(const MoveOnly&) = delete;
31*61c4878aSAndroid Build Coastguard Worker   MoveOnly& operator=(const MoveOnly&) = delete;
32*61c4878aSAndroid Build Coastguard Worker   MoveOnly(MoveOnly&&) = default;
33*61c4878aSAndroid Build Coastguard Worker   MoveOnly& operator=(MoveOnly&&) = default;
value() const34*61c4878aSAndroid Build Coastguard Worker   int value() const { return value_; }
35*61c4878aSAndroid Build Coastguard Worker 
36*61c4878aSAndroid Build Coastguard Worker  private:
37*61c4878aSAndroid Build Coastguard Worker   int value_;
38*61c4878aSAndroid Build Coastguard Worker };
39*61c4878aSAndroid Build Coastguard Worker 
40*61c4878aSAndroid Build Coastguard Worker struct Immovable {
41*61c4878aSAndroid Build Coastguard Worker  public:
42*61c4878aSAndroid Build Coastguard Worker   Immovable() = delete;
Immovablepw::async2::__anon57899f4a0111::Immovable43*61c4878aSAndroid Build Coastguard Worker   Immovable(MoveOnly&& value) : value_(std::move(value)) {}
44*61c4878aSAndroid Build Coastguard Worker   Immovable(const Immovable&) = delete;
45*61c4878aSAndroid Build Coastguard Worker   Immovable& operator=(const Immovable&) = delete;
46*61c4878aSAndroid Build Coastguard Worker   Immovable(Immovable&&) = delete;
47*61c4878aSAndroid Build Coastguard Worker   Immovable& operator=(Immovable&&) = delete;
valuepw::async2::__anon57899f4a0111::Immovable48*61c4878aSAndroid Build Coastguard Worker   int value() const { return value_.value(); }
49*61c4878aSAndroid Build Coastguard Worker 
50*61c4878aSAndroid Build Coastguard Worker  private:
51*61c4878aSAndroid Build Coastguard Worker   MoveOnly value_;
52*61c4878aSAndroid Build Coastguard Worker };
53*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ConstructsReadyInPlace)54*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ConstructsReadyInPlace) {
55*61c4878aSAndroid Build Coastguard Worker   Poll<Immovable> mr(std::in_place, MoveOnly(5));
56*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(mr.IsReady());
57*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(mr->value(), 5);
58*61c4878aSAndroid Build Coastguard Worker }
59*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ConstructsReadyFromValueType)60*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ConstructsReadyFromValueType) {
61*61c4878aSAndroid Build Coastguard Worker   Poll<MoveOnly> mr = MoveOnly(5);
62*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(mr.IsReady());
63*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(mr->value(), 5);
64*61c4878aSAndroid Build Coastguard Worker }
65*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ConstructsFromValueConvertibleToValueType)66*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ConstructsFromValueConvertibleToValueType) {
67*61c4878aSAndroid Build Coastguard Worker   Poll<Immovable> mr(MoveOnly(5));
68*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(mr.IsReady());
69*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(mr->value(), 5);
70*61c4878aSAndroid Build Coastguard Worker }
71*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ConstructsFromPollWithValueConvertibleToValueType)72*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ConstructsFromPollWithValueConvertibleToValueType) {
73*61c4878aSAndroid Build Coastguard Worker   Poll<MoveOnly> move_poll(MoveOnly(5));
74*61c4878aSAndroid Build Coastguard Worker   Poll<Immovable> no_move_poll(std::move(move_poll));
75*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(no_move_poll.IsReady());
76*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(no_move_poll->value(), 5);
77*61c4878aSAndroid Build Coastguard Worker }
78*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ConstructsPendingFromPendingType)79*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ConstructsPendingFromPendingType) {
80*61c4878aSAndroid Build Coastguard Worker   Poll<MoveOnly> mr(Pending());
81*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(mr.IsReady());
82*61c4878aSAndroid Build Coastguard Worker }
83*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ConstructorInfersValueType)84*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ConstructorInfersValueType) {
85*61c4878aSAndroid Build Coastguard Worker   auto res = Poll("hello");
86*61c4878aSAndroid Build Coastguard Worker   static_assert(std::is_same_v<decltype(res), Poll<const char*>>);
87*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(res.IsReady());
88*61c4878aSAndroid Build Coastguard Worker   EXPECT_STREQ(res.value(), "hello");
89*61c4878aSAndroid Build Coastguard Worker }
90*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ReadinessOnReadyValueReturnsReadyWithoutValue)91*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ReadinessOnReadyValueReturnsReadyWithoutValue) {
92*61c4878aSAndroid Build Coastguard Worker   Poll<int> v = Ready(5);
93*61c4878aSAndroid Build Coastguard Worker   Poll<> readiness = v.Readiness();
94*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(readiness.IsReady());
95*61c4878aSAndroid Build Coastguard Worker }
96*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ReadinessOnPendingValueReturnsPendingWithoutValue)97*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ReadinessOnPendingValueReturnsPendingWithoutValue) {
98*61c4878aSAndroid Build Coastguard Worker   Poll<int> v = Pending();
99*61c4878aSAndroid Build Coastguard Worker   Poll<> readiness = v.Readiness();
100*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(readiness.IsPending());
101*61c4878aSAndroid Build Coastguard Worker }
102*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ReadyToString)103*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ReadyToString) {
104*61c4878aSAndroid Build Coastguard Worker   char buffer[128] = {};
105*61c4878aSAndroid Build Coastguard Worker   Poll<> v = Ready();
106*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(5u, ToString(v, buffer).size());
107*61c4878aSAndroid Build Coastguard Worker   EXPECT_STREQ("Ready", buffer);
108*61c4878aSAndroid Build Coastguard Worker }
109*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,ReadyValueToString)110*61c4878aSAndroid Build Coastguard Worker TEST(Poll, ReadyValueToString) {
111*61c4878aSAndroid Build Coastguard Worker   char buffer[128] = {};
112*61c4878aSAndroid Build Coastguard Worker   Poll<uint16_t> v = 5;
113*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(8u, ToString(v, buffer).size());
114*61c4878aSAndroid Build Coastguard Worker   EXPECT_STREQ("Ready(5)", buffer);
115*61c4878aSAndroid Build Coastguard Worker }
116*61c4878aSAndroid Build Coastguard Worker 
TEST(Poll,PendingToString)117*61c4878aSAndroid Build Coastguard Worker TEST(Poll, PendingToString) {
118*61c4878aSAndroid Build Coastguard Worker   char buffer[128] = {};
119*61c4878aSAndroid Build Coastguard Worker   Poll<uint16_t> v = Pending();
120*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(7u, ToString(v, buffer).size());
121*61c4878aSAndroid Build Coastguard Worker   EXPECT_STREQ("Pending", buffer);
122*61c4878aSAndroid Build Coastguard Worker }
123*61c4878aSAndroid Build Coastguard Worker 
TEST(PendingFunction,ReturnsValueConvertibleToPendingPoll)124*61c4878aSAndroid Build Coastguard Worker TEST(PendingFunction, ReturnsValueConvertibleToPendingPoll) {
125*61c4878aSAndroid Build Coastguard Worker   Poll<MoveOnly> mr = Pending();
126*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(mr.IsReady());
127*61c4878aSAndroid Build Coastguard Worker }
128*61c4878aSAndroid Build Coastguard Worker 
TEST(ReadyFunction,CalledWithNoArgumentsReturnsPollWithReadyType)129*61c4878aSAndroid Build Coastguard Worker TEST(ReadyFunction, CalledWithNoArgumentsReturnsPollWithReadyType) {
130*61c4878aSAndroid Build Coastguard Worker   Poll<> mr = Ready();
131*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(mr.IsReady());
132*61c4878aSAndroid Build Coastguard Worker   [[maybe_unused]] ReadyType& ready_value = mr.value();
133*61c4878aSAndroid Build Coastguard Worker }
134*61c4878aSAndroid Build Coastguard Worker 
TEST(ReadyFunction,ConstructsReadyInPlace)135*61c4878aSAndroid Build Coastguard Worker TEST(ReadyFunction, ConstructsReadyInPlace) {
136*61c4878aSAndroid Build Coastguard Worker   Poll<Immovable> mr = Ready<Immovable>(std::in_place, MoveOnly(5));
137*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(mr.IsReady());
138*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(mr->value(), 5);
139*61c4878aSAndroid Build Coastguard Worker }
140*61c4878aSAndroid Build Coastguard Worker 
TEST(ReadyFunction,ConstructsReadyFromValueType)141*61c4878aSAndroid Build Coastguard Worker TEST(ReadyFunction, ConstructsReadyFromValueType) {
142*61c4878aSAndroid Build Coastguard Worker   Poll<MoveOnly> mr = Ready(MoveOnly(5));
143*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(mr.IsReady());
144*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(mr->value(), 5);
145*61c4878aSAndroid Build Coastguard Worker }
146*61c4878aSAndroid Build Coastguard Worker 
EndToEndTest(int input)147*61c4878aSAndroid Build Coastguard Worker Poll<Result<int>> EndToEndTest(int input) {
148*61c4878aSAndroid Build Coastguard Worker   if (input == 0) {
149*61c4878aSAndroid Build Coastguard Worker     // Check that returning plain ``Status`` works.
150*61c4878aSAndroid Build Coastguard Worker     return Status::PermissionDenied();
151*61c4878aSAndroid Build Coastguard Worker   }
152*61c4878aSAndroid Build Coastguard Worker   if (input == 1) {
153*61c4878aSAndroid Build Coastguard Worker     // Check that returning ``Pending`` works.
154*61c4878aSAndroid Build Coastguard Worker     return Pending();
155*61c4878aSAndroid Build Coastguard Worker   }
156*61c4878aSAndroid Build Coastguard Worker   if (input == 2) {
157*61c4878aSAndroid Build Coastguard Worker     // Check that returning ``Result<int>`` works.
158*61c4878aSAndroid Build Coastguard Worker     Result<int> v = 2;
159*61c4878aSAndroid Build Coastguard Worker     return v;
160*61c4878aSAndroid Build Coastguard Worker   }
161*61c4878aSAndroid Build Coastguard Worker   if (input == 3) {
162*61c4878aSAndroid Build Coastguard Worker     // Check that returning plain ``int`` works.
163*61c4878aSAndroid Build Coastguard Worker     return 3;
164*61c4878aSAndroid Build Coastguard Worker   }
165*61c4878aSAndroid Build Coastguard Worker   if (input == 4) {
166*61c4878aSAndroid Build Coastguard Worker     // Check that returning ``Poll<int>`` works.
167*61c4878aSAndroid Build Coastguard Worker     return Ready(4);
168*61c4878aSAndroid Build Coastguard Worker   }
169*61c4878aSAndroid Build Coastguard Worker   if (input == 5) {
170*61c4878aSAndroid Build Coastguard Worker     // Check that returning ``Poll<Status>`` works.
171*61c4878aSAndroid Build Coastguard Worker     return Ready(Status::DataLoss());
172*61c4878aSAndroid Build Coastguard Worker   }
173*61c4878aSAndroid Build Coastguard Worker   return Status::Unknown();
174*61c4878aSAndroid Build Coastguard Worker }
175*61c4878aSAndroid Build Coastguard Worker 
TEST(EndToEndTest,ReturnsStatus)176*61c4878aSAndroid Build Coastguard Worker TEST(EndToEndTest, ReturnsStatus) {
177*61c4878aSAndroid Build Coastguard Worker   Poll<Result<int>> result = EndToEndTest(0);
178*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(result.IsReady());
179*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(result->status(), Status::PermissionDenied());
180*61c4878aSAndroid Build Coastguard Worker }
181*61c4878aSAndroid Build Coastguard Worker 
TEST(EndToEndTest,ReturnsPending)182*61c4878aSAndroid Build Coastguard Worker TEST(EndToEndTest, ReturnsPending) {
183*61c4878aSAndroid Build Coastguard Worker   Poll<Result<int>> result = EndToEndTest(1);
184*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(result.IsReady());
185*61c4878aSAndroid Build Coastguard Worker }
186*61c4878aSAndroid Build Coastguard Worker 
TEST(EndToEndTest,ReturnsValue)187*61c4878aSAndroid Build Coastguard Worker TEST(EndToEndTest, ReturnsValue) {
188*61c4878aSAndroid Build Coastguard Worker   Poll<Result<int>> result = EndToEndTest(3);
189*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(result.IsReady());
190*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(result->ok());
191*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(**result, 3);
192*61c4878aSAndroid Build Coastguard Worker }
193*61c4878aSAndroid Build Coastguard Worker 
TEST(EndToEndTest,ReturnsReady)194*61c4878aSAndroid Build Coastguard Worker TEST(EndToEndTest, ReturnsReady) {
195*61c4878aSAndroid Build Coastguard Worker   Poll<Result<int>> result = EndToEndTest(4);
196*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(result.IsReady());
197*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(result->ok());
198*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(**result, 4);
199*61c4878aSAndroid Build Coastguard Worker }
200*61c4878aSAndroid Build Coastguard Worker 
TEST(EndToEndTest,ReturnsPollStatus)201*61c4878aSAndroid Build Coastguard Worker TEST(EndToEndTest, ReturnsPollStatus) {
202*61c4878aSAndroid Build Coastguard Worker   Poll<Result<int>> result = EndToEndTest(5);
203*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(result.IsReady());
204*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(result->status(), Status::DataLoss());
205*61c4878aSAndroid Build Coastguard Worker }
206*61c4878aSAndroid Build Coastguard Worker 
207*61c4878aSAndroid Build Coastguard Worker enum TryReadyAction {
208*61c4878aSAndroid Build Coastguard Worker   kDoPend,
209*61c4878aSAndroid Build Coastguard Worker   kDoReady,
210*61c4878aSAndroid Build Coastguard Worker };
211*61c4878aSAndroid Build Coastguard Worker 
TestTryReady(TryReadyAction action)212*61c4878aSAndroid Build Coastguard Worker Poll<Status> TestTryReady(TryReadyAction action) {
213*61c4878aSAndroid Build Coastguard Worker   Poll<Status> pending(Pending());
214*61c4878aSAndroid Build Coastguard Worker   Poll<Status> ready(Ready(OkStatus()));
215*61c4878aSAndroid Build Coastguard Worker   PW_TRY_READY(action == kDoPend ? pending : ready);
216*61c4878aSAndroid Build Coastguard Worker   return ready;
217*61c4878aSAndroid Build Coastguard Worker }
218*61c4878aSAndroid Build Coastguard Worker 
TEST(TryReady,PollPending)219*61c4878aSAndroid Build Coastguard Worker TEST(TryReady, PollPending) {
220*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(TestTryReady(kDoPend).IsPending());
221*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(TestTryReady(kDoReady).IsReady());
222*61c4878aSAndroid Build Coastguard Worker }
223*61c4878aSAndroid Build Coastguard Worker 
TestTryReadyAssignSimple(TryReadyAction action)224*61c4878aSAndroid Build Coastguard Worker Poll<Status> TestTryReadyAssignSimple(TryReadyAction action) {
225*61c4878aSAndroid Build Coastguard Worker   Poll<Status> pending(Pending());
226*61c4878aSAndroid Build Coastguard Worker   Poll<Status> ready(Ready(OkStatus()));
227*61c4878aSAndroid Build Coastguard Worker   PW_TRY_READY_ASSIGN(auto poll, action == kDoPend ? pending : ready);
228*61c4878aSAndroid Build Coastguard Worker   return poll;
229*61c4878aSAndroid Build Coastguard Worker }
230*61c4878aSAndroid Build Coastguard Worker 
TEST(TryReadyAssign,PollPending)231*61c4878aSAndroid Build Coastguard Worker TEST(TryReadyAssign, PollPending) {
232*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(TestTryReadyAssignSimple(kDoPend).IsPending());
233*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(TestTryReadyAssignSimple(kDoReady).IsReady());
234*61c4878aSAndroid Build Coastguard Worker }
235*61c4878aSAndroid Build Coastguard Worker 
MakeImmovable(TryReadyAction action)236*61c4878aSAndroid Build Coastguard Worker Poll<Immovable> MakeImmovable(TryReadyAction action) {
237*61c4878aSAndroid Build Coastguard Worker   return action == kDoReady ? Poll<Immovable>(5) : Pending();
238*61c4878aSAndroid Build Coastguard Worker }
239*61c4878aSAndroid Build Coastguard Worker 
TryReadyAssignImmovable(TryReadyAction action)240*61c4878aSAndroid Build Coastguard Worker Poll<int> TryReadyAssignImmovable(TryReadyAction action) {
241*61c4878aSAndroid Build Coastguard Worker   PW_TRY_READY_ASSIGN(auto&& x, MakeImmovable(action));
242*61c4878aSAndroid Build Coastguard Worker   return x.value();
243*61c4878aSAndroid Build Coastguard Worker }
244*61c4878aSAndroid Build Coastguard Worker 
TEST(TryReadyAssign,ImmovableIsReady)245*61c4878aSAndroid Build Coastguard Worker TEST(TryReadyAssign, ImmovableIsReady) {
246*61c4878aSAndroid Build Coastguard Worker   auto poll = TryReadyAssignImmovable(kDoReady);
247*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(poll.IsReady());
248*61c4878aSAndroid Build Coastguard Worker   ASSERT_EQ(poll.value(), 5);
249*61c4878aSAndroid Build Coastguard Worker }
250*61c4878aSAndroid Build Coastguard Worker 
TEST(TryReadyAssign,ImmovableIsPending)251*61c4878aSAndroid Build Coastguard Worker TEST(TryReadyAssign, ImmovableIsPending) {
252*61c4878aSAndroid Build Coastguard Worker   auto poll = TryReadyAssignImmovable(kDoPend);
253*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(poll.IsPending());
254*61c4878aSAndroid Build Coastguard Worker }
255*61c4878aSAndroid Build Coastguard Worker 
TryReadyAssignMoveOnly(TryReadyAction action)256*61c4878aSAndroid Build Coastguard Worker Poll<int> TryReadyAssignMoveOnly(TryReadyAction action) {
257*61c4878aSAndroid Build Coastguard Worker   PW_TRY_READY_ASSIGN(auto&& x,
258*61c4878aSAndroid Build Coastguard Worker                       action == kDoReady ? Ready(MoveOnly(5)) : Pending());
259*61c4878aSAndroid Build Coastguard Worker   return x.value();
260*61c4878aSAndroid Build Coastguard Worker }
261*61c4878aSAndroid Build Coastguard Worker 
TEST(TryReadyAssign,MoveOnlyIsReady)262*61c4878aSAndroid Build Coastguard Worker TEST(TryReadyAssign, MoveOnlyIsReady) {
263*61c4878aSAndroid Build Coastguard Worker   auto poll = TryReadyAssignMoveOnly(kDoReady);
264*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(poll.IsReady());
265*61c4878aSAndroid Build Coastguard Worker   ASSERT_EQ(poll.value(), 5);
266*61c4878aSAndroid Build Coastguard Worker }
267*61c4878aSAndroid Build Coastguard Worker 
TEST(TryReadyAssign,MoveOnlyIsPending)268*61c4878aSAndroid Build Coastguard Worker TEST(TryReadyAssign, MoveOnlyIsPending) {
269*61c4878aSAndroid Build Coastguard Worker   auto poll = TryReadyAssignMoveOnly(kDoPend);
270*61c4878aSAndroid Build Coastguard Worker   ASSERT_TRUE(poll.IsPending());
271*61c4878aSAndroid Build Coastguard Worker }
272*61c4878aSAndroid Build Coastguard Worker 
273*61c4878aSAndroid Build Coastguard Worker }  // namespace
274*61c4878aSAndroid Build Coastguard Worker }  // namespace pw::async2
275