| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #define BOOST_TEST_DYN_LINK
- #include <boost/test/unit_test.hpp>
- #include "core/global_io_context.hpp"
- #include "core/types/vectorx.hpp"
- using namespace sophiar;
- void test_vectorx_view_func_1(vectorx_view<double *, 2> data) {}
- void test_vectorx_view_func_2(vectorx_view<const double *, 2> 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<decltype(test_b), vectorx<double, 2>>);
- 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<decltype(test_c), vectorx<double, 2>>);
- test_c.at<1>() = 6;
- BOOST_TEST(view_c.at<1>() == 5);
- auto test_c_obj = view_c.to_vectorx_obj<high_freq_tag>();
- 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<double, 1>({16});
- auto test_f = vectorx<double, 2>({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);
- }
|