#include #include #include #include #include #include "../sched/roundrobin.cpp" void run(Task *task, int slice) { std::cout << "Running task " << task->name << " id=" << std::setw(2) << task->id << " prio=" << std::setw(2) << task->priority << " burst=" << std::setw(2) << task->burst << " slice=" << slice << " "; } struct DebugRoundRobinQueue : public RoundRobinQueue { public: void print() const { for (auto *it = head; it != nullptr; it = it->next) { std::cout << it->node->name << '(' << std::setw(2) << it->node->burst << ") "; } std::cout << std::endl; } }; TEST(roundrobin, RoundRobinQueue) { DebugRoundRobinQueue queue; queue.insert(new Task{"P1", 1, 1, 50}); queue.insert(new Task{"P2", 2, 1, 40}); queue.insert(new Task{"P3", 3, 1, 50}); queue.insert(new Task{"P4", 4, 1, 40}); const auto begin = std::chrono::system_clock::now(); for (auto *t = queue.next(10); t != nullptr; t = queue.next(10)) { run(t, 10); queue.print(); } const auto end = std::chrono::system_clock::now(); const auto duration = std::chrono::duration_cast(end - begin).count(); std::cout << "Completed in (us): " << duration << std::endl; // test should complete in 250us unless running on valgrind if (!RUNNING_ON_VALGRIND) { EXPECT_LE(duration, 250); } EXPECT_EQ(queue.head, nullptr); EXPECT_EQ(queue.tail, nullptr); }