From 787c1a6016dd2fdb51f20fcb5ca0ac5e461892d6 Mon Sep 17 00:00:00 2001 From: aqua Date: Sun, 5 Mar 2023 14:38:54 +0200 Subject: Move all tests next to the code they're testing --- src/sched/test_roundrobin.cc | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/sched/test_roundrobin.cc (limited to 'src/sched/test_roundrobin.cc') diff --git a/src/sched/test_roundrobin.cc b/src/sched/test_roundrobin.cc new file mode 100644 index 0000000..1431788 --- /dev/null +++ b/src/sched/test_roundrobin.cc @@ -0,0 +1,50 @@ +#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); +} -- cgit v1.2.1