/* * \file AsyncRunnerTest.cpp * \project EFC_PlatformC28x_Test * * \date 21 мая 2024 г. * \author leonid */ #include "AsyncRunnerTest.hh" void umlib::tests::AsyncRunnerTest::OnceCallTask::reset() { counter = 0; } void umlib::tests::AsyncRunnerTest::OnceCallTask::do_task() { ++counter; } umlib::tests::AsyncRunnerTest::AsyncRunnerTest( umlib::tests::AsyncRunnerInterface & async_runner ) : runner(async_runner) {} void umlib::tests::AsyncRunnerTest::run( TestResult & result ) { test_once_call_on_zero(result); test_once_call_on_one(result); test_ran_after_run(result); test_cancel(result); } void umlib::tests::AsyncRunnerTest::test_once_call_on_zero( TestResult & result ) { OnceCallTask once_call_task; once_call_task.reset(); runner.run_after( &once_call_task, 0 ); for( volatile int i = 0; i < 1; i++ ); result.assert_true( once_call_task.counter == 1, "AsyncRunner call task once with 0"); } void umlib::tests::AsyncRunnerTest::test_once_call_on_one( TestResult & result ) { OnceCallTask once_call_task; once_call_task.reset(); runner.run_after( &once_call_task, 1 ); for( volatile int i = 0; i < 2; i++ ); result.assert_true( once_call_task.counter == 1, "AsyncRunner call task once with 1"); } void umlib::tests::AsyncRunnerTest::test_ran_after_run( TestResult & result ) { OnceCallTask once_call_task; once_call_task.reset(); runner.run_after( &once_call_task, 1 ); for( volatile int i = 0; i < 64; i++ ); result.assert_true( runner.is_ran(), "AsyncRunner ran after run"); } void umlib::tests::AsyncRunnerTest::test_cancel( TestResult & result ) { OnceCallTask once_call_task; once_call_task.reset(); runner.run_after( &once_call_task, 200 ); runner.cancel(); for( volatile int i = 0; i < 200; i++ ); result.assert_false( runner.is_ran(), "AsyncRunner not ran after cancel"); result.assert_true( once_call_task.counter == 0, "AsyncRunner not call task after cancel"); }