transform_tree.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #define BOOST_TEST_DYN_LINK
  2. #define BOOST_TEST_MAIN // in only one cpp file
  3. #include "algorithm/transform_tree.h"
  4. #include "core/basic_obj_types.hpp"
  5. #include "utility/debug_utility.hpp"
  6. #include "utility/coro_worker.hpp"
  7. #include <boost/test/unit_test.hpp>
  8. #include <boost/asio/awaitable.hpp>
  9. #include <boost/asio/co_spawn.hpp>
  10. #include <boost/asio/detached.hpp>
  11. #include <nlohmann/json.hpp>
  12. #include <fstream>
  13. using namespace nlohmann;
  14. using namespace sophiar;
  15. using boost::asio::awaitable;
  16. using boost::asio::co_spawn;
  17. using boost::asio::detached;
  18. BOOST_AUTO_TEST_CASE(test_transform_tree) {
  19. spdlog::set_level(spdlog::level::trace);
  20. std::ifstream config_file("data/transform_tree_config.json");
  21. BOOST_TEST(config_file.is_open());
  22. auto config = nlohmann::json::parse(config_file);
  23. BOOST_TEST(initialize(config));
  24. using namespace std::chrono_literals;
  25. auto c_in_b_index = REQUIRE_VARIABLE(transform_obj, "C_in_B");
  26. auto worker_a = make_interval_coro_worker(1s, [=, cur_y = int(0)]() mutable -> awaitable<bool> {
  27. auto new_trans = Eigen::Isometry3d(Eigen::Translation3d(0, ++cur_y, 0));
  28. UPDATE_VARIABLE_VAL(transform_obj, c_in_b_index, std::move(new_trans));
  29. co_return true;
  30. });
  31. worker_a->run();
  32. auto d_in_root_index = REQUIRE_VARIABLE(transform_obj, "D_in_Root");
  33. auto worker_b = make_interval_coro_worker(2s, [=, cur_z = int(0)]() mutable -> awaitable<bool> {
  34. auto new_trans = Eigen::Isometry3d(Eigen::Translation3d(0, 0, --cur_z));
  35. UPDATE_VARIABLE_VAL(transform_obj, d_in_root_index, std::move(new_trans));
  36. co_return true;
  37. });
  38. worker_b->run();
  39. global_context->run();
  40. }