93 lines
2.0 KiB
C++
93 lines
2.0 KiB
C++
|
|
/*
|
|||
|
|
* \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");
|
|||
|
|
|
|||
|
|
}
|