global_obj_record_playback.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #define BOOST_TEST_DYN_LINK
  2. #include "core/transform_tree.h"
  3. #include "core/basic_obj_types.hpp"
  4. #include "utility/debug_utility.hpp"
  5. #include <boost/test/unit_test.hpp>
  6. #include <boost/asio/awaitable.hpp>
  7. #include <boost/asio/co_spawn.hpp>
  8. #include <boost/asio/detached.hpp>
  9. #include <nlohmann/json.hpp>
  10. #include <fstream>
  11. using namespace nlohmann;
  12. using namespace sophiar;
  13. using boost::asio::awaitable;
  14. using boost::asio::co_spawn;
  15. using boost::asio::detached;
  16. BOOST_AUTO_TEST_CASE(test_global_obj_recoreder) {
  17. spdlog::set_level(spdlog::level::trace);
  18. REGISTER_TYPE(double_obj_recorder);
  19. REGISTER_TYPE(scalarxyz_obj_recorder);
  20. REGISTER_TYPE(transform_obj_recorder);
  21. std::ifstream config_file("data/global_obj_record_config.json");
  22. BOOST_TEST(config_file.is_open());
  23. using namespace std::chrono_literals;
  24. auto double_sample_index = REGISTER_GLOBAL_OBJ(double_obj, "double_sample");
  25. auto xyz_sample_index = REGISTER_GLOBAL_OBJ(scalarxyz_obj, "xyz_sample");
  26. auto transform_sample_index = REGISTER_GLOBAL_OBJ(transform_obj, "transform_sample");
  27. auto worker_a = make_interval_coro_worker(global_context, 1s, [=]() mutable -> awaitable<bool> {
  28. static auto sample_val = 1.1;
  29. auto new_double = double_obj::value_type(sample_val);
  30. auto new_xyz = scalarxyz_obj::value_type(0.1, 0.2, sample_val);
  31. auto new_trans = transform_obj::value_type(Eigen::Translation3d(0.3, 0.4, sample_val));
  32. UPDATE_GLOBAL_OBJ_VALUE(double_obj, double_sample_index, new_double);
  33. UPDATE_GLOBAL_OBJ_VALUE(scalarxyz_obj, xyz_sample_index, std::move(new_xyz));
  34. UPDATE_GLOBAL_OBJ_VALUE(transform_obj, transform_sample_index, std::move(new_trans));
  35. sample_val += 0.6;
  36. co_return true;
  37. });
  38. worker_a->run();
  39. global_sophiar_manager.load_config_and_start(nlohmann::json::parse(config_file));
  40. global_context.run();
  41. }
  42. BOOST_AUTO_TEST_CASE(test_global_obj_replayer) {
  43. spdlog::set_level(spdlog::level::trace);
  44. REGISTER_TYPE(double_obj_watcher);
  45. REGISTER_TYPE(scalarxyz_obj_watcher);
  46. REGISTER_TYPE(transform_obj_watcher);
  47. REGISTER_TYPE(double_obj_replayer);
  48. REGISTER_TYPE(scalarxyz_obj_replayer);
  49. REGISTER_TYPE(transform_obj_replayer);
  50. std::ifstream config_file("data/global_obj_replay_config.json");
  51. BOOST_TEST(config_file.is_open());
  52. global_sophiar_manager.load_config_and_start(nlohmann::json::parse(config_file));
  53. global_context.run();
  54. }