#define BOOST_TEST_DYN_LINK #include "core/basic_obj_types.hpp" #include "core/sophiar_obj.hpp" #include "utility/debug_utility.hpp" #include "utility/variable_helper.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() { REGISTER_VARIABLE("var_a", "u64int_obj"); auto var_a_index = REQUIRE_VARIABLE(u64int_obj, "var_a"); UPDATE_VARIABLE_VAL(u64int_obj, var_a_index, 123); co_spawn(*global_context, [=]() -> awaitable { auto obj_a = VARIABLE_AUTO_DELEGATE(u64int_obj, var_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 = VARIABLE_MANUAL_DELEGATE(u64int_obj, var_a_index); obj_a.manual_sync(); 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); UPDATE_VARIABLE_VAL(u64int_obj, var_a_index, 234); co_await coro_sleep(15ms); auto var_a = VARIABLE_AUTO_DELEGATE(u64int_obj, var_a_index); var_a = 456; co_return; } BOOST_AUTO_TEST_CASE(test_global_obj_helper) { initialize({}); co_spawn(*global_context, test_global_obj_helper_1(), detached); global_context->run(); }