@@ -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