123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- // Copyright (c) 2018-2019 Cem Bassoy
- //
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- // The authors gratefully acknowledge the support of
- // Fraunhofer and Google in producing this work
- // which started as a Google Summer of Code project.
- //
- #include <boost/test/unit_test.hpp>
- #include <boost/numeric/ublas/tensor/strides.hpp>
- #include <boost/numeric/ublas/tensor/extents.hpp>
- //BOOST_AUTO_TEST_SUITE(test_strides, * boost::unit_test::depends_on("test_extents"));
- BOOST_AUTO_TEST_SUITE(test_strides)
- using test_types = std::tuple<boost::numeric::ublas::first_order, boost::numeric::ublas::last_order>;
- BOOST_AUTO_TEST_CASE_TEMPLATE( test_strides_ctor, value, test_types)
- {
- using namespace boost::numeric;
- using extents_type = ublas::basic_extents<unsigned>;
- using strides_type = ublas::strides<value>;
- strides_type s0{};
- BOOST_CHECK ( s0.empty());
- BOOST_CHECK_EQUAL ( s0.size(), 0);
- strides_type s1{extents_type{1,1}};
- BOOST_CHECK (!s1.empty());
- BOOST_CHECK_EQUAL ( s1.size(), 2);
- strides_type s2{extents_type{1,2}};
- BOOST_CHECK (!s2.empty());
- BOOST_CHECK_EQUAL ( s2.size(), 2);
- strides_type s3{extents_type{2,1}};
- BOOST_CHECK (!s3.empty());
- BOOST_CHECK_EQUAL ( s3.size(), 2);
- strides_type s4{extents_type{2,3}};
- BOOST_CHECK (!s4.empty());
- BOOST_CHECK_EQUAL ( s4.size(), 2);
- strides_type s5{extents_type{2,3,1}};
- BOOST_CHECK (!s5.empty());
- BOOST_CHECK_EQUAL ( s5.size(), 3);
- strides_type s6{extents_type{1,2,3}};
- BOOST_CHECK (!s6.empty());
- BOOST_CHECK_EQUAL ( s6.size(), 3);
- strides_type s7{extents_type{4,2,3}};
- BOOST_CHECK (!s7.empty());
- BOOST_CHECK_EQUAL ( s7.size(), 3);
- }
- BOOST_AUTO_TEST_CASE( test_strides_ctor_access_first_order)
- {
- using namespace boost::numeric;
- using extents_type = ublas::basic_extents<unsigned>;
- using strides_type = ublas::strides<ublas::first_order>;
- strides_type s1{extents_type{1,1}};
- BOOST_REQUIRE_EQUAL( s1.size(),2);
- BOOST_CHECK_EQUAL ( s1[0], 1);
- BOOST_CHECK_EQUAL ( s1[1], 1);
- strides_type s2{extents_type{1,2}};
- BOOST_REQUIRE_EQUAL ( s2.size(),2);
- BOOST_CHECK_EQUAL ( s2[0], 1);
- BOOST_CHECK_EQUAL ( s2[1], 1);
- strides_type s3{extents_type{2,1}};
- BOOST_REQUIRE_EQUAL ( s3.size(),2);
- BOOST_CHECK_EQUAL ( s3[0], 1);
- BOOST_CHECK_EQUAL ( s3[1], 1);
- strides_type s4{extents_type{2,3}};
- BOOST_REQUIRE_EQUAL ( s4.size(),2);
- BOOST_CHECK_EQUAL ( s4[0], 1);
- BOOST_CHECK_EQUAL ( s4[1], 2);
- strides_type s5{extents_type{2,3,1}};
- BOOST_REQUIRE_EQUAL ( s5.size(),3);
- BOOST_CHECK_EQUAL ( s5[0], 1);
- BOOST_CHECK_EQUAL ( s5[1], 2);
- BOOST_CHECK_EQUAL ( s5[2], 6);
- strides_type s6{extents_type{1,2,3}};
- BOOST_REQUIRE_EQUAL ( s6.size(),3);
- BOOST_CHECK_EQUAL ( s6[0], 1);
- BOOST_CHECK_EQUAL ( s6[1], 1);
- BOOST_CHECK_EQUAL ( s6[2], 2);
- strides_type s7{extents_type{2,1,3}};
- BOOST_REQUIRE_EQUAL ( s7.size(),3);
- BOOST_CHECK_EQUAL ( s7[0], 1);
- BOOST_CHECK_EQUAL ( s7[1], 2);
- BOOST_CHECK_EQUAL ( s7[2], 2);
- strides_type s8{extents_type{4,2,3}};
- BOOST_REQUIRE_EQUAL ( s8.size(),3);
- BOOST_CHECK_EQUAL ( s8[0], 1);
- BOOST_CHECK_EQUAL ( s8[1], 4);
- BOOST_CHECK_EQUAL ( s8[2], 8);
- }
- BOOST_AUTO_TEST_CASE( test_strides_ctor_access_last_order)
- {
- using namespace boost::numeric;
- using extents_type = ublas::basic_extents<unsigned>;
- using strides_type = ublas::strides<ublas::last_order>;
- strides_type s1{extents_type{1,1}};
- BOOST_REQUIRE_EQUAL( s1.size(),2);
- BOOST_CHECK_EQUAL ( s1[0], 1);
- BOOST_CHECK_EQUAL ( s1[1], 1);
- strides_type s2{extents_type{1,2}};
- BOOST_REQUIRE_EQUAL ( s2.size(),2);
- BOOST_CHECK_EQUAL ( s2[0], 1);
- BOOST_CHECK_EQUAL ( s2[1], 1);
- strides_type s3{extents_type{2,1}};
- BOOST_REQUIRE_EQUAL ( s3.size(),2);
- BOOST_CHECK_EQUAL ( s3[0], 1);
- BOOST_CHECK_EQUAL ( s3[1], 1);
- strides_type s4{extents_type{2,3}};
- BOOST_REQUIRE_EQUAL ( s4.size(),2);
- BOOST_CHECK_EQUAL ( s4[0], 3);
- BOOST_CHECK_EQUAL ( s4[1], 1);
- strides_type s5{extents_type{2,3,1}};
- BOOST_REQUIRE_EQUAL ( s5.size(),3);
- BOOST_CHECK_EQUAL ( s5[0], 3);
- BOOST_CHECK_EQUAL ( s5[1], 1);
- BOOST_CHECK_EQUAL ( s5[2], 1);
- strides_type s6{extents_type{1,2,3}};
- BOOST_REQUIRE_EQUAL ( s6.size(),3);
- BOOST_CHECK_EQUAL ( s6[0], 6);
- BOOST_CHECK_EQUAL ( s6[1], 3);
- BOOST_CHECK_EQUAL ( s6[2], 1);
- strides_type s7{extents_type{2,1,3}};
- BOOST_REQUIRE_EQUAL ( s7.size(),3);
- BOOST_CHECK_EQUAL ( s7[0], 3);
- BOOST_CHECK_EQUAL ( s7[1], 3);
- BOOST_CHECK_EQUAL ( s7[2], 1);
- strides_type s8{extents_type{4,2,3}};
- BOOST_REQUIRE_EQUAL ( s8.size(),3);
- BOOST_CHECK_EQUAL ( s8[0], 6);
- BOOST_CHECK_EQUAL ( s8[1], 3);
- BOOST_CHECK_EQUAL ( s8[2], 1);
- }
- BOOST_AUTO_TEST_SUITE_END()
|