| 1 | // Copyright Louis Dionne 2013-2022 |
| 2 | // Distributed under the Boost Software License, Version 1.0. |
| 3 | // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) |
| 4 | |
| 5 | #include <boost/hana/assert.hpp> |
| 6 | #include <boost/hana/integral_constant.hpp> |
| 7 | |
| 8 | #include "matrix/comparable.hpp" |
| 9 | namespace hana = boost::hana; |
| 10 | using namespace cppcon; |
| 11 | |
| 12 | |
| 13 | int main() { |
| 14 | // transpose |
| 15 | { |
| 16 | BOOST_HANA_CONSTEXPR_LAMBDA auto m = matrix( |
| 17 | row(1, 2.2, '3'), |
| 18 | row(4, '5', 6) |
| 19 | ); |
| 20 | |
| 21 | BOOST_HANA_CONSTEXPR_CHECK(hana::equal( |
| 22 | transpose(m), |
| 23 | matrix( |
| 24 | row(1, 4), |
| 25 | row(2.2, '5'), |
| 26 | row('3', 6) |
| 27 | ) |
| 28 | )); |
| 29 | } |
| 30 | |
| 31 | // vector |
| 32 | { |
| 33 | BOOST_HANA_CONSTEXPR_LAMBDA auto v = vector(1, '2', hana::int_c<3>, 4.2f); |
| 34 | BOOST_HANA_CONSTEXPR_CHECK(v.size() == 4ul); |
| 35 | BOOST_HANA_CONSTEXPR_CHECK(v.nrows() == 4ul); |
| 36 | BOOST_HANA_CONSTEXPR_CHECK(v.ncolumns() == 1ul); |
| 37 | } |
| 38 | |
| 39 | // matrix.at |
| 40 | { |
| 41 | BOOST_HANA_CONSTEXPR_LAMBDA auto m = matrix( |
| 42 | row(1, '2', 3), |
| 43 | row('4', hana::char_c<'5'>, 6), |
| 44 | row(hana::int_c<7>, '8', 9.3) |
| 45 | ); |
| 46 | BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<0>, hana::int_c<0>) == 1); |
| 47 | BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<0>, hana::int_c<1>) == '2'); |
| 48 | BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<0>, hana::int_c<2>) == 3); |
| 49 | |
| 50 | BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<1>, hana::int_c<0>) == '4'); |
| 51 | BOOST_HANA_CONSTANT_CHECK(m.at(hana::int_c<1>, hana::int_c<1>) == hana::char_c<'5'>); |
| 52 | BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<1>, hana::int_c<2>) == 6); |
| 53 | |
| 54 | BOOST_HANA_CONSTANT_CHECK(m.at(hana::int_c<2>, hana::int_c<0>) == hana::int_c<7>); |
| 55 | BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<2>, hana::int_c<1>) == '8'); |
| 56 | BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<2>, hana::int_c<2>) == 9.3); |
| 57 | } |
| 58 | |
| 59 | // size, ncolumns, nrows |
| 60 | { |
| 61 | BOOST_HANA_CONSTEXPR_LAMBDA auto m = matrix( |
| 62 | row(1, '2', 3), |
| 63 | row('4', hana::char_c<'5'>, 6) |
| 64 | ); |
| 65 | BOOST_HANA_CONSTEXPR_CHECK(m.size() == 6ul); |
| 66 | BOOST_HANA_CONSTEXPR_CHECK(m.ncolumns() == 3ul); |
| 67 | BOOST_HANA_CONSTEXPR_CHECK(m.nrows() == 2ul); |
| 68 | } |
| 69 | } |
| 70 | |