global_obj_helper.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #define BOOST_TEST_DYN_LINK
  2. #include "core/basic_obj_types.hpp"
  3. #include "core/sophiar_obj.hpp"
  4. #include "utility/debug_utility.hpp"
  5. #include "utility/variable_helper.hpp"
  6. #include <boost/asio/co_spawn.hpp>
  7. #include <boost/asio/detached.hpp>
  8. #include <boost/asio/this_coro.hpp>
  9. #include <boost/asio/use_awaitable.hpp>
  10. #include <boost/test/unit_test.hpp>
  11. #include <chrono>
  12. #include <iostream>
  13. #include <vector>
  14. using boost::asio::awaitable;
  15. using boost::asio::co_spawn;
  16. using boost::asio::detached;
  17. using boost::asio::use_awaitable;
  18. using namespace sophiar;
  19. using namespace std::chrono_literals;
  20. awaitable<void> test_global_obj_helper_1() {
  21. REGISTER_VARIABLE("var_a", "u64int_obj");
  22. auto var_a_index = REQUIRE_VARIABLE(u64int_obj, "var_a");
  23. UPDATE_VARIABLE_VAL(u64int_obj, var_a_index, 123);
  24. co_spawn(*global_context, [=]() -> awaitable<void> {
  25. auto obj_a = VARIABLE_AUTO_DELEGATE(u64int_obj, var_a_index);
  26. BOOST_TEST(obj_a->value == 123);
  27. co_await coro_sleep(10ms);
  28. BOOST_TEST(obj_a->value == 234);
  29. co_await coro_sleep(10ms);
  30. BOOST_TEST(obj_a->value == 456);
  31. co_return;
  32. }, detached);
  33. co_spawn(*global_context, [=]() -> awaitable<void> {
  34. auto obj_a = VARIABLE_MANUAL_DELEGATE(u64int_obj, var_a_index);
  35. obj_a.manual_sync();
  36. BOOST_TEST(obj_a->value == 123);
  37. co_await coro_sleep(10ms);
  38. BOOST_TEST(obj_a->value == 123);
  39. co_await obj_a.coro_wait_update(false);
  40. BOOST_TEST(obj_a->value == 234);
  41. co_return;
  42. }, detached);
  43. UPDATE_VARIABLE_VAL(u64int_obj, var_a_index, 234);
  44. co_await coro_sleep(15ms);
  45. auto var_a = VARIABLE_AUTO_DELEGATE(u64int_obj, var_a_index);
  46. var_a = 456;
  47. co_return;
  48. }
  49. BOOST_AUTO_TEST_CASE(test_global_obj_helper) {
  50. initialize({});
  51. co_spawn(*global_context, test_global_obj_helper_1(), detached);
  52. global_context->run();
  53. }