Skip to content

Commit 147dfac

Browse files
committed
Thread/Scheduler: Test execution order
1 parent c5fbfd8 commit 147dfac

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

tests/Thread/Scheduler.mpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,5 +156,36 @@ export namespace CppUtils::UnitTest::Thread::Scheduler
156156
suite.expect(times[2] - times[1] > 100ms);
157157
suite.expect(times[3] - times[2] > 200ms);
158158
});
159+
160+
suite.addTest("Schedule events in reverse order", [&] {
161+
auto scheduler = CppUtils::Thread::Scheduler{};
162+
auto executionOrder = std::vector<std::size_t>{};
163+
auto record = [&](std::size_t value) { executionOrder.push_back(value); };
164+
165+
scheduler.schedule([&] { record(2); }, 200ms);
166+
scheduler.schedule([&] { record(1); }, 100ms);
167+
168+
scheduler.waitUntilFinished();
169+
170+
suite.expectEqual(executionOrder.size(), 2uz);
171+
suite.expectEqual(executionOrder[0], 1uz);
172+
suite.expectEqual(executionOrder[1], 2uz);
173+
});
174+
175+
suite.addTest("Schedule earlier task after later task", [&] {
176+
auto scheduler = CppUtils::Thread::Scheduler{};
177+
auto aExecuted = std::atomic_bool{false};
178+
auto bExecuted = std::atomic_bool{false};
179+
180+
scheduler.schedule([&] { bExecuted = true; }, 200ms);
181+
scheduler.schedule([&] { aExecuted = true; }, 100ms);
182+
183+
std::this_thread::sleep_for(150ms);
184+
scheduler.cancelAll();
185+
186+
suite.expect(aExecuted.load());
187+
suite.expect(not bExecuted.load());
188+
});
159189
}};
190+
160191
}

0 commit comments

Comments
 (0)