| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #define BOOST_TEST_DYN_LINK
- #include "core/sophiar_obj.hpp"
- #include "utility/coro_worker.hpp"
- #include "utility/debug_utility.hpp"
- #include <boost/asio/co_spawn.hpp>
- #include <boost/asio/detached.hpp>
- #include <boost/asio/this_coro.hpp>
- #include <boost/asio/use_awaitable.hpp>
- #include <boost/test/unit_test.hpp>
- #include <chrono>
- #include <iostream>
- #include <vector>
- 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<void> test_coro_worker_1() {
- int cnt = 0;
- auto worker = make_infinite_coro_worker(global_context, [&]() -> awaitable<bool> {
- 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<void> test_coro_worker_2() {
- int cnt = 0;
- auto worker = make_infinite_coro_worker(global_context, [&]() -> awaitable<bool> {
- 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<void> test_coro_worker_3() {
- int cnt = 0;
- auto worker = make_interval_coro_worker(global_context, 50ms, [&]() -> awaitable<bool> {
- ++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<void> test_coro_worker_4() {
- int cnt = 0;
- auto worker = make_interval_coro_worker(global_context, 50ms, [&]() -> awaitable<bool> {
- ++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<void> test_coro_worker_5() {
- int cnt = 0;
- auto worker = make_interval_coro_worker(global_context, 10ms, [&]() -> awaitable<bool> {
- 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();
- }
|