From adc6a5c0a59b66b3ed56b74af70361e04d821909 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Fri, 2 Feb 2024 16:20:51 +0100 Subject: [PATCH] Tests: Add task scheduler tests --- .../Engine/Core/TaskSchedulerTests.cpp | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp diff --git a/tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp b/tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp new file mode 100644 index 000000000..51b0bb802 --- /dev/null +++ b/tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp @@ -0,0 +1,48 @@ +#include +#include +#include + +SCENARIO("TaskScheduler", "[CORE][TaskScheduler]") +{ + for (std::size_t workerCount : { 0, 1, 2, 4 }) + { + GIVEN("A task scheduler with " << workerCount << " workers") + { + Nz::TaskScheduler scheduler(4); + + WHEN("We add a single task and wait for it") + { + bool executed = false; + scheduler.AddTask([&] { executed = true; }); + scheduler.WaitForTasks(); + + CHECK(executed); + } + + WHEN("We add a lot of tasks and wait for all of them") + { + constexpr std::size_t taskCount = 512; + + std::vector completionBuffer(taskCount, 0); + std::atomic_uint count = 0; + for (std::size_t i = 0; i < taskCount; ++i) + { + scheduler.AddTask([&, i] + { + completionBuffer[i]++; + count++; + }); + } + scheduler.WaitForTasks(); + + CHECK(count == taskCount); + + for (std::size_t i = 0; i < taskCount; ++i) + { + INFO("checking that task " << i << " was executed once"); + CHECK(completionBuffer[i] == 1); + } + } + } + } +}