| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #define BOOST_TEST_DYN_LINK
- #include "core/sophiar_obj.hpp"
- #include "utility/coro_unique_lock.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;
- coro_unique_lock *lock;
- awaitable<void> unlocked_worker(int id) {
- DEBUG_PRINT(fmt::format("Worker {} starts to work.", id));
- co_await coro_sleep(1s);
- DEBUG_PRINT(fmt::format("Worker {} finished work.", id));
- }
- awaitable<void> locked_worker(int id) {
- auto lock_guard = coro_lock_guard{*lock};
- co_await lock_guard.coro_require_lock();
- DEBUG_PRINT(fmt::format("Worker {} starts to work.", id));
- co_await coro_sleep(1s);
- DEBUG_PRINT(fmt::format("Worker {} finished work.", id));
- }
- BOOST_AUTO_TEST_CASE(test_coro_unique_lock) {
- initialize({});
- lock = new coro_unique_lock{};
- for (int i = 0; i < 5; ++i) {
- co_spawn(*global_context, locked_worker(i), detached);
- }
- global_context->run();
- }
|