SDFM_CONTROL/EFC_PlatformC28x_Test/AsyncRunnerTest.cpp

93 lines
2.0 KiB
C++
Raw Permalink Normal View History

/*
* \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");
}