summaryrefslogtreecommitdiffstats
path: root/mojo/system/simple_dispatcher_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/system/simple_dispatcher_unittest.cc')
-rw-r--r--mojo/system/simple_dispatcher_unittest.cc163
1 files changed, 99 insertions, 64 deletions
diff --git a/mojo/system/simple_dispatcher_unittest.cc b/mojo/system/simple_dispatcher_unittest.cc
index 26fc277..3b292ddd 100644
--- a/mojo/system/simple_dispatcher_unittest.cc
+++ b/mojo/system/simple_dispatcher_unittest.cc
@@ -92,6 +92,7 @@ TEST(SimpleDispatcherTest, Basic) {
scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
Waiter w;
+ uint32_t context = 0;
// Try adding a readable waiter when already readable.
w.Init();
@@ -106,8 +107,9 @@ TEST(SimpleDispatcherTest, Basic) {
EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 1));
d->SetSatisfiedFlags(MOJO_WAIT_FLAG_WRITABLE);
stopwatch.Start();
- EXPECT_EQ(1, w.Wait(MOJO_DEADLINE_INDEFINITE));
+ EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(1u, context);
d->RemoveWaiter(&w);
// Wait for zero time for writable when already writable.
@@ -116,8 +118,9 @@ TEST(SimpleDispatcherTest, Basic) {
EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 2));
d->SetSatisfiedFlags(MOJO_WAIT_FLAG_WRITABLE);
stopwatch.Start();
- EXPECT_EQ(2, w.Wait(0));
+ EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(2u, context);
d->RemoveWaiter(&w);
// Wait for non-zero, finite time for writable when already writable.
@@ -126,8 +129,10 @@ TEST(SimpleDispatcherTest, Basic) {
EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 3));
d->SetSatisfiedFlags(MOJO_WAIT_FLAG_WRITABLE);
stopwatch.Start();
- EXPECT_EQ(3, w.Wait(2 * test::EpsilonTimeout().InMicroseconds()));
+ EXPECT_EQ(MOJO_RESULT_OK,
+ w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(3u, context);
d->RemoveWaiter(&w);
// Wait for zero time for writable when not writable (will time out).
@@ -135,7 +140,7 @@ TEST(SimpleDispatcherTest, Basic) {
d->SetSatisfiedFlags(MOJO_WAIT_FLAG_READABLE);
EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4));
stopwatch.Start();
- EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0));
+ EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, NULL));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
d->RemoveWaiter(&w);
@@ -143,10 +148,10 @@ TEST(SimpleDispatcherTest, Basic) {
// out).
w.Init();
d->SetSatisfiedFlags(MOJO_WAIT_FLAG_READABLE);
- EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4));
+ EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 5));
stopwatch.Start();
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
- w.Wait(2 * test::EpsilonTimeout().InMicroseconds()));
+ w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), NULL));
base::TimeDelta elapsed = stopwatch.Elapsed();
EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
@@ -160,45 +165,50 @@ TEST(SimpleDispatcherTest, BasicUnsatisfiable) {
scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
Waiter w;
+ uint32_t context = 0;
// Try adding a writable waiter when it can never be writable.
w.Init();
d->SetSatisfiableFlags(MOJO_WAIT_FLAG_READABLE);
d->SetSatisfiedFlags(0);
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
- d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 5));
+ d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 1));
// Shouldn't need to remove the waiter (it was not added).
// Wait (forever) for writable and then it becomes never writable.
w.Init();
d->SetSatisfiableFlags(MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE);
- EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 6));
+ EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 2));
d->SetSatisfiableFlags(MOJO_WAIT_FLAG_READABLE);
stopwatch.Start();
- EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, w.Wait(MOJO_DEADLINE_INDEFINITE));
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
+ w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(2u, context);
d->RemoveWaiter(&w);
// Wait for zero time for writable and then it becomes never writable.
w.Init();
d->SetSatisfiableFlags(MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE);
- EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 6));
+ EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 3));
d->SetSatisfiableFlags(MOJO_WAIT_FLAG_READABLE);
stopwatch.Start();
- EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, w.Wait(0));
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, w.Wait(0, &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(3u, context);
d->RemoveWaiter(&w);
// Wait for non-zero, finite time for writable and then it becomes never
// writable.
w.Init();
d->SetSatisfiableFlags(MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE);
- EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 7));
+ EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4));
d->SetSatisfiableFlags(MOJO_WAIT_FLAG_READABLE);
stopwatch.Start();
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
- w.Wait(2 * test::EpsilonTimeout().InMicroseconds()));
+ w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(4u, context);
d->RemoveWaiter(&w);
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
@@ -209,45 +219,49 @@ TEST(SimpleDispatcherTest, BasicClosed) {
scoped_refptr<MockSimpleDispatcher> d;
Waiter w;
+ uint32_t context = 0;
// Try adding a writable waiter when the dispatcher has been closed.
d = new MockSimpleDispatcher();
w.Init();
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
- d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 8));
+ d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 1));
// Shouldn't need to remove the waiter (it was not added).
// Wait (forever) for writable and then the dispatcher is closed.
d = new MockSimpleDispatcher();
w.Init();
- EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 9));
+ EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 2));
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
stopwatch.Start();
- EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(MOJO_DEADLINE_INDEFINITE));
+ EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(2u, context);
// Don't need to remove waiters from closed dispatchers.
// Wait for zero time for writable and then the dispatcher is closed.
d = new MockSimpleDispatcher();
w.Init();
- EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 10));
+ EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 3));
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
stopwatch.Start();
- EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(0));
+ EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(0, &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(3u, context);
// Don't need to remove waiters from closed dispatchers.
// Wait for non-zero, finite time for writable and then the dispatcher is
// closed.
d = new MockSimpleDispatcher();
w.Init();
- EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 11));
+ EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4));
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
stopwatch.Start();
EXPECT_EQ(MOJO_RESULT_CANCELLED,
- w.Wait(2 * test::EpsilonTimeout().InMicroseconds()));
+ w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context));
EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
+ EXPECT_EQ(4u, context);
// Don't need to remove waiters from closed dispatchers.
}
@@ -255,6 +269,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
test::Stopwatch stopwatch;
bool did_wait;
MojoResult result;
+ uint32_t context;
// Wait for readable (already readable).
{
@@ -264,8 +279,8 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
test::WaiterThread thread(d,
MOJO_WAIT_FLAG_READABLE,
MOJO_DEADLINE_INDEFINITE,
- 0,
- &did_wait, &result);
+ 1,
+ &did_wait, &result, &context);
stopwatch.Start();
thread.Start();
} // Joins the thread.
@@ -282,8 +297,8 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
test::WaiterThread thread(d,
MOJO_WAIT_FLAG_READABLE,
MOJO_DEADLINE_INDEFINITE,
- 1,
- &did_wait, &result);
+ 2,
+ &did_wait, &result, &context);
stopwatch.Start();
thread.Start();
base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
@@ -294,7 +309,8 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
EXPECT_TRUE(did_wait);
- EXPECT_EQ(1, result);
+ EXPECT_EQ(MOJO_RESULT_OK, result);
+ EXPECT_EQ(2u, context);
// Wait for readable and becomes never-readable after some time.
{
@@ -302,8 +318,8 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
test::WaiterThread thread(d,
MOJO_WAIT_FLAG_READABLE,
MOJO_DEADLINE_INDEFINITE,
- 2,
- &did_wait, &result);
+ 3,
+ &did_wait, &result, &context);
stopwatch.Start();
thread.Start();
base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
@@ -315,6 +331,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
EXPECT_TRUE(did_wait);
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
+ EXPECT_EQ(3u, context);
// Wait for readable and dispatcher gets closed.
{
@@ -322,8 +339,8 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
test::WaiterThread thread(d,
MOJO_WAIT_FLAG_READABLE,
MOJO_DEADLINE_INDEFINITE,
- 3,
- &did_wait, &result);
+ 4,
+ &did_wait, &result, &context);
stopwatch.Start();
thread.Start();
base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
@@ -334,6 +351,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
EXPECT_TRUE(did_wait);
EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
+ EXPECT_EQ(4u, context);
// Wait for readable and times out.
{
@@ -342,8 +360,8 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
test::WaiterThread thread(d,
MOJO_WAIT_FLAG_READABLE,
2 * test::EpsilonTimeout().InMicroseconds(),
- 4,
- &did_wait, &result);
+ 5,
+ &did_wait, &result, &context);
stopwatch.Start();
thread.Start();
base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
@@ -361,30 +379,34 @@ TEST(SimpleDispatcherTest, BasicThreaded) {
}
TEST(SimpleDispatcherTest, MultipleWaiters) {
- static const size_t kNumWaiters = 20;
+ static const uint32_t kNumWaiters = 20;
bool did_wait[kNumWaiters];
MojoResult result[kNumWaiters];
+ uint32_t context[kNumWaiters];
// All wait for readable and becomes readable after some time.
{
scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
ScopedVector<test::WaiterThread> threads;
- for (size_t i = 0; i < kNumWaiters; i++) {
+ for (uint32_t i = 0; i < kNumWaiters; i++) {
threads.push_back(new test::WaiterThread(d,
MOJO_WAIT_FLAG_READABLE,
MOJO_DEADLINE_INDEFINITE,
- static_cast<MojoResult>(i),
- &did_wait[i], &result[i]));
+ i,
+ &did_wait[i],
+ &result[i],
+ &context[i]));
threads.back()->Start();
}
base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
d->SetSatisfiedFlags(MOJO_WAIT_FLAG_READABLE);
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
} // Joins the threads.
- for (size_t i = 0; i < kNumWaiters; i++) {
+ for (uint32_t i = 0; i < kNumWaiters; i++) {
EXPECT_TRUE(did_wait[i]);
- EXPECT_EQ(static_cast<MojoResult>(i), result[i]);
+ EXPECT_EQ(MOJO_RESULT_OK, result[i]);
+ EXPECT_EQ(i, context[i]);
}
// Some wait for readable, some for writable, and becomes readable after some
@@ -392,20 +414,24 @@ TEST(SimpleDispatcherTest, MultipleWaiters) {
{
scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
ScopedVector<test::WaiterThread> threads;
- for (size_t i = 0; i < kNumWaiters / 2; i++) {
+ for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
threads.push_back(new test::WaiterThread(d,
MOJO_WAIT_FLAG_READABLE,
MOJO_DEADLINE_INDEFINITE,
- static_cast<MojoResult>(i),
- &did_wait[i], &result[i]));
+ i,
+ &did_wait[i],
+ &result[i],
+ &context[i]));
threads.back()->Start();
}
- for (size_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
+ for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
threads.push_back(new test::WaiterThread(d,
MOJO_WAIT_FLAG_WRITABLE,
MOJO_DEADLINE_INDEFINITE,
- static_cast<MojoResult>(i),
- &did_wait[i], &result[i]));
+ i,
+ &did_wait[i],
+ &result[i],
+ &context[i]));
threads.back()->Start();
}
base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
@@ -413,13 +439,15 @@ TEST(SimpleDispatcherTest, MultipleWaiters) {
// This will wake up the ones waiting to write.
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
} // Joins the threads.
- for (size_t i = 0; i < kNumWaiters / 2; i++) {
+ for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
EXPECT_TRUE(did_wait[i]);
- EXPECT_EQ(static_cast<MojoResult>(i), result[i]);
+ EXPECT_EQ(MOJO_RESULT_OK, result[i]);
+ EXPECT_EQ(i, context[i]);
}
- for (size_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
+ for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
EXPECT_TRUE(did_wait[i]);
EXPECT_EQ(MOJO_RESULT_CANCELLED, result[i]);
+ EXPECT_EQ(i, context[i]);
}
// Some wait for readable, some for writable, and becomes readable and
@@ -427,20 +455,24 @@ TEST(SimpleDispatcherTest, MultipleWaiters) {
{
scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
ScopedVector<test::WaiterThread> threads;
- for (size_t i = 0; i < kNumWaiters / 2; i++) {
+ for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
threads.push_back(new test::WaiterThread(d,
MOJO_WAIT_FLAG_READABLE,
MOJO_DEADLINE_INDEFINITE,
- static_cast<MojoResult>(i),
- &did_wait[i], &result[i]));
+ i,
+ &did_wait[i],
+ &result[i],
+ &context[i]));
threads.back()->Start();
}
- for (size_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
+ for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
threads.push_back(new test::WaiterThread(d,
MOJO_WAIT_FLAG_WRITABLE,
MOJO_DEADLINE_INDEFINITE,
- static_cast<MojoResult>(i),
- &did_wait[i], &result[i]));
+ i,
+ &did_wait[i],
+ &result[i],
+ &context[i]));
threads.back()->Start();
}
base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
@@ -449,13 +481,15 @@ TEST(SimpleDispatcherTest, MultipleWaiters) {
d->SetSatisfiedFlags(MOJO_WAIT_FLAG_READABLE);
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
} // Joins the threads.
- for (size_t i = 0; i < kNumWaiters / 2; i++) {
+ for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
EXPECT_TRUE(did_wait[i]);
- EXPECT_EQ(static_cast<MojoResult>(i), result[i]);
+ EXPECT_EQ(MOJO_RESULT_OK, result[i]);
+ EXPECT_EQ(i, context[i]);
}
- for (size_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
+ for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
EXPECT_TRUE(did_wait[i]);
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result[i]);
+ EXPECT_EQ(i, context[i]);
}
// Some wait for readable, some for writable, and becomes readable after some
@@ -463,22 +497,22 @@ TEST(SimpleDispatcherTest, MultipleWaiters) {
{
scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
ScopedVector<test::WaiterThread> threads;
- for (size_t i = 0; i < kNumWaiters / 2; i++) {
+ for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
threads.push_back(
new test::WaiterThread(d,
MOJO_WAIT_FLAG_READABLE,
3 * test::EpsilonTimeout().InMicroseconds(),
- static_cast<MojoResult>(i),
- &did_wait[i], &result[i]));
+ i,
+ &did_wait[i], &result[i], &context[i]));
threads.back()->Start();
}
- for (size_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
+ for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
threads.push_back(
new test::WaiterThread(d,
MOJO_WAIT_FLAG_WRITABLE,
1 * test::EpsilonTimeout().InMicroseconds(),
- static_cast<MojoResult>(i),
- &did_wait[i], &result[i]));
+ i,
+ &did_wait[i], &result[i], &context[i]));
threads.back()->Start();
}
base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
@@ -486,11 +520,12 @@ TEST(SimpleDispatcherTest, MultipleWaiters) {
// All those waiting for writable should have timed out.
EXPECT_EQ(MOJO_RESULT_OK, d->Close());
} // Joins the threads.
- for (size_t i = 0; i < kNumWaiters / 2; i++) {
+ for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
EXPECT_TRUE(did_wait[i]);
- EXPECT_EQ(static_cast<MojoResult>(i), result[i]);
+ EXPECT_EQ(MOJO_RESULT_OK, result[i]);
+ EXPECT_EQ(i, context[i]);
}
- for (size_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
+ for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
EXPECT_TRUE(did_wait[i]);
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, result[i]);
}