#define BOOST_TEST_DYN_LINK #include #include "core/global_io_context.hpp" #include "core/types/vectorx.hpp" using namespace sophiar; void test_vectorx_view_func_1(vectorx_view data) {} void test_vectorx_view_func_2(vectorx_view data) {} BOOST_AUTO_TEST_CASE(test_vectorx) { auto test_a = vector3d({3, 2, 1}); BOOST_TEST(test_a[0] == 3); BOOST_TEST(test_a[1] == 2); BOOST_TEST(test_a[2] == 1); BOOST_TEST(test_a.at<0>() == 3); BOOST_TEST(test_a.at<1>() == 2); BOOST_TEST(test_a.at<2>() == 1); test_a = {4, 5, 6}; BOOST_TEST(test_a[0] == 4); BOOST_TEST(test_a[1] == 5); BOOST_TEST(test_a[2] == 6); BOOST_TEST(test_a.length() == sizeof(double) * 3); auto view_a = test_a.get_view<0, 2>(); BOOST_TEST(view_a[0] == 4); BOOST_TEST(view_a[1] == 5); BOOST_TEST(view_a.at<0>() == 4); BOOST_TEST(view_a.at<1>() == 5); auto view_b = test_a.get_view<1, 3>(); BOOST_TEST(view_b[0] == 5); BOOST_TEST(view_b[1] == 6); BOOST_TEST(view_b.at<0>() == 5); BOOST_TEST(view_b.at<1>() == 6); view_b.at<1>() = 7; BOOST_TEST(test_a.at<2>() == 7); auto test_b = view_b.to_vectorx(); static_assert(std::is_same_v>); test_b.at<1>() = 8; BOOST_TEST(view_b.at<1>() == 7); const vector3d &const_test_a = test_a; auto view_c = const_test_a.get_view<0, 2>(); BOOST_TEST(view_c[0] == 4); BOOST_TEST(view_c[1] == 5); BOOST_TEST(view_c.at<0>() == 4); BOOST_TEST(view_c.at<1>() == 5); auto test_c = view_c.to_vectorx(); static_assert(std::is_same_v>); test_c.at<1>() = 6; BOOST_TEST(view_c.at<1>() == 5); auto test_c_obj = view_c.to_vectorx_obj(); BOOST_TEST(test_c_obj->at<0>() == 4); BOOST_TEST(test_c_obj->at<1>() == 5); test_c.at<1>() = 7; BOOST_TEST(test_c_obj->at<0>() == 4); BOOST_TEST(test_c_obj->at<1>() == 5); const auto &test_d = test_c; test_vectorx_view_func_1(view_b); // test_vectorx_view_func_1(view_c); test_vectorx_view_func_2(view_b); test_vectorx_view_func_2(view_c); test_vectorx_view_func_1(test_c); // test_vectorx_view_func_1(test_d); test_vectorx_view_func_2(test_c); test_vectorx_view_func_2(test_d); test_vectorx_view_func_1(test_c.get_view()); // test_vectorx_view_func_1(test_d.get_view()); test_vectorx_view_func_2(test_c.get_view()); test_vectorx_view_func_2(test_d.get_view()); test_a = {1, 2, 3}; auto eigen_column = test_a.get_view().as_eigen_column_view(); BOOST_TEST(eigen_column(0) == 1); BOOST_TEST(eigen_column(1) == 2); BOOST_TEST(eigen_column(2) == 3); auto transposed = eigen_column.transpose(); transposed(1) = 3; // will affect origin BOOST_TEST(eigen_column(1) == 3); BOOST_TEST(test_a.at<1>() == 3); Eigen::Vector3d real_vector = eigen_column; real_vector(0) = 2; // will not affect origin BOOST_TEST(eigen_column(0) == 1); BOOST_TEST(test_a.at<0>() == 1); auto eigen_const_column = test_a.get_view().as_eigen_const_column_view(); test_a = {1, 2, 3}; BOOST_TEST(eigen_const_column(0) == 1); BOOST_TEST(eigen_const_column(1) == 2); BOOST_TEST(eigen_const_column(2) == 3); Eigen::Vector3d real_vector_2 = eigen_const_column; real_vector(0) = 2; // will not affect origin BOOST_TEST(eigen_const_column(0) == 1); BOOST_TEST(test_a.at<0>() == 1); test_a.get_view().fill({10}).fill({11}).fill({12}); BOOST_TEST(test_a[0] == 10); BOOST_TEST(test_a[1] == 11); BOOST_TEST(test_a[2] == 12); test_a.get_view().fill({13, 14}).fill({15}); BOOST_TEST(test_a[0] == 13); BOOST_TEST(test_a[1] == 14); BOOST_TEST(test_a[2] == 15); auto test_e = vectorx({16}); auto test_f = vectorx({17, 18}); test_a.get_view().fill(test_e).fill(test_f); BOOST_TEST(test_a[0] == 16); BOOST_TEST(test_a[1] == 17); BOOST_TEST(test_a[2] == 18); test_a = {1, 2, 3}; test_a.get_view().fill(test_e.get_view()).fill(test_f.get_view()); BOOST_TEST(test_a[0] == 16); BOOST_TEST(test_a[1] == 17); BOOST_TEST(test_a[2] == 18); auto eigen_vec3 = Eigen::Vector3d(20, 21, 22); test_a = eigen_vec3; BOOST_TEST(test_a[0] == 20); BOOST_TEST(test_a[1] == 21); BOOST_TEST(test_a[2] == 22); test_a = {1, 2, 3}; test_a.get_view().fill(eigen_vec3); BOOST_TEST(test_a[0] == 20); BOOST_TEST(test_a[1] == 21); BOOST_TEST(test_a[2] == 22); }