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