52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
#include "doctest.h"
|
|
#include "fl/async.h"
|
|
#include "fl/task.h"
|
|
#include "fl/time.h"
|
|
#include "fl/warn.h"
|
|
|
|
TEST_CASE("Async tasks run correctly [async]") {
|
|
// Clear any leftover tasks from previous tests
|
|
fl::Scheduler::instance().clear_all_tasks();
|
|
|
|
SUBCASE("A simple task runs") {
|
|
bool task_ran = false;
|
|
auto task = fl::task::every_ms(10);
|
|
task.then([&task_ran]() {
|
|
task_ran = true;
|
|
});
|
|
|
|
fl::Scheduler::instance().add_task(task);
|
|
|
|
fl::Scheduler::instance().update();
|
|
|
|
REQUIRE(task_ran);
|
|
|
|
// Clear task after this subcase to prevent interference
|
|
fl::Scheduler::instance().clear_all_tasks();
|
|
}
|
|
|
|
SUBCASE("Task timing works correctly") {
|
|
// Clear any leftover tasks from previous subcases
|
|
fl::Scheduler::instance().clear_all_tasks();
|
|
|
|
int run_count = 0;
|
|
auto task = fl::task::every_ms(50); // 50ms interval
|
|
task.then([&run_count]() {
|
|
run_count++;
|
|
});
|
|
|
|
fl::Scheduler::instance().add_task(task);
|
|
|
|
// Run immediately - should execute
|
|
fl::Scheduler::instance().update();
|
|
REQUIRE(run_count == 1);
|
|
|
|
// Run again immediately - should not execute (not enough time passed)
|
|
fl::Scheduler::instance().update();
|
|
REQUIRE(run_count == 1);
|
|
|
|
// Clear task after this subcase
|
|
fl::Scheduler::instance().clear_all_tasks();
|
|
}
|
|
}
|