| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #define BOOST_TEST_DYN_LINK
- #include "core/sophiar_obj.hpp"
- #include "utility/global_obj_helper.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_global_obj_helper_1() {
- struct small_a : public small_obj<small_a> {
- int value;
- explicit small_a(int _value = 0) { value = _value; }
- };
- auto obj_a_index = global_sophiar_manager.register_global_obj<small_a>("obj_a");
- global_sophiar_manager.update_global_obj<small_a>(obj_a_index, small_a::new_instance(123));
- co_spawn(global_context, [=]() -> awaitable<void> {
- auto obj_a = global_obj_auto_sync_delegate<small_a>(
- global_sophiar_manager, obj_a_index);
- BOOST_TEST(obj_a->value == 123);
- co_await coro_sleep(10ms);
- BOOST_TEST(obj_a->value == 234);
- co_await coro_sleep(10ms);
- BOOST_TEST(obj_a->value == 456);
- co_return;
- }, detached);
- co_spawn(global_context, [=]() -> awaitable<void> {
- auto obj_a = global_obj_manual_sync_delegate<small_a>(
- global_sophiar_manager, obj_a_index);
- BOOST_TEST(obj_a->value == 123);
- co_await coro_sleep(10ms);
- BOOST_TEST(obj_a->value == 123);
- co_await obj_a.coro_wait_update(false);
- BOOST_TEST(obj_a->value == 234);
- co_return;
- }, detached);
- global_sophiar_manager.update_global_obj<small_a>(obj_a_index, small_a::new_instance(234));
- co_await coro_sleep(15ms);
- auto obj_a = global_obj_auto_sync_delegate<small_a>(
- global_sophiar_manager, obj_a_index);
- obj_a = small_a::new_instance(456);
- co_return;
- }
- BOOST_AUTO_TEST_CASE(test_global_obj_helper) {
- co_spawn(global_context, test_global_obj_helper_1(), detached);
- global_context.run();
- }
|