#define BOOST_TEST_DYN_LINK #include "core/sophiar_obj.hpp" #include "utility/coro_worker.hpp" #include "utility/debug_utility.hpp" #include #include #include #include #include #include #include #include using boost::asio::awaitable; using boost::asio::co_spawn; using boost::asio::detached; using boost::asio::use_awaitable; using namespace sophiar; using namespace std::chrono_literals; awaitable test_coro_worker_1() { int cnt = 0; auto worker = make_infinite_coro_worker(global_context, [&]() -> awaitable { co_await coro_sleep(50ms); ++cnt; co_return true; }); worker->run(); co_await coro_sleep(210ms); worker->cancel(); co_await worker->coro_wait_stop(); BOOST_TEST(cnt == 4); co_return; } awaitable test_coro_worker_2() { int cnt = 0; auto worker = make_infinite_coro_worker(global_context, [&]() -> awaitable { co_await coro_sleep(50ms); ++cnt; co_return false; }); worker->run(); co_await coro_sleep(210ms); worker->cancel(); co_await worker->coro_wait_stop(); BOOST_TEST(cnt == 1); co_return; } awaitable test_coro_worker_3() { int cnt = 0; auto worker = make_interval_coro_worker(global_context, 50ms, [&]() -> awaitable { ++cnt; co_return true; }); worker->run(); co_await coro_sleep(190ms); worker->cancel(); co_await worker->coro_wait_stop(); BOOST_TEST(cnt == 4); co_return; } awaitable test_coro_worker_4() { int cnt = 0; auto worker = make_interval_coro_worker(global_context, 50ms, [&]() -> awaitable { ++cnt; co_return false; }); worker->run(); co_await coro_sleep(210ms); worker->cancel(); co_await worker->coro_wait_stop(); BOOST_TEST(cnt == 1); co_return; } awaitable test_coro_worker_5() { int cnt = 0; auto worker = make_interval_coro_worker(global_context, 10ms, [&]() -> awaitable { co_await coro_sleep(50ms); ++cnt; co_return true; }); worker->run(); co_await coro_sleep(210ms); worker->cancel(); co_await worker->coro_wait_stop(); BOOST_TEST(cnt == 4); co_return; } BOOST_AUTO_TEST_CASE(test_coro_worker) { co_spawn(global_context, test_coro_worker_1(), detached); co_spawn(global_context, test_coro_worker_2(), detached); co_spawn(global_context, test_coro_worker_3(), detached); co_spawn(global_context, test_coro_worker_4(), detached); co_spawn(global_context, test_coro_worker_5(), detached); global_context.run(); }