matrix.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright Louis Dionne 2013-2017
  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. #include <boost/hana/assert.hpp>
  5. #include <boost/hana/integral_constant.hpp>
  6. #include "matrix/comparable.hpp"
  7. namespace hana = boost::hana;
  8. using namespace cppcon;
  9. int main() {
  10. // transpose
  11. {
  12. BOOST_HANA_CONSTEXPR_LAMBDA auto m = matrix(
  13. row(1, 2.2, '3'),
  14. row(4, '5', 6)
  15. );
  16. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  17. transpose(m),
  18. matrix(
  19. row(1, 4),
  20. row(2.2, '5'),
  21. row('3', 6)
  22. )
  23. ));
  24. }
  25. // vector
  26. {
  27. BOOST_HANA_CONSTEXPR_LAMBDA auto v = vector(1, '2', hana::int_c<3>, 4.2f);
  28. BOOST_HANA_CONSTEXPR_CHECK(v.size() == 4ul);
  29. BOOST_HANA_CONSTEXPR_CHECK(v.nrows() == 4ul);
  30. BOOST_HANA_CONSTEXPR_CHECK(v.ncolumns() == 1ul);
  31. }
  32. // matrix.at
  33. {
  34. BOOST_HANA_CONSTEXPR_LAMBDA auto m = matrix(
  35. row(1, '2', 3),
  36. row('4', hana::char_c<'5'>, 6),
  37. row(hana::int_c<7>, '8', 9.3)
  38. );
  39. BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<0>, hana::int_c<0>) == 1);
  40. BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<0>, hana::int_c<1>) == '2');
  41. BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<0>, hana::int_c<2>) == 3);
  42. BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<1>, hana::int_c<0>) == '4');
  43. BOOST_HANA_CONSTANT_CHECK(m.at(hana::int_c<1>, hana::int_c<1>) == hana::char_c<'5'>);
  44. BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<1>, hana::int_c<2>) == 6);
  45. BOOST_HANA_CONSTANT_CHECK(m.at(hana::int_c<2>, hana::int_c<0>) == hana::int_c<7>);
  46. BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<2>, hana::int_c<1>) == '8');
  47. BOOST_HANA_CONSTEXPR_CHECK(m.at(hana::int_c<2>, hana::int_c<2>) == 9.3);
  48. }
  49. // size, ncolumns, nrows
  50. {
  51. BOOST_HANA_CONSTEXPR_LAMBDA auto m = matrix(
  52. row(1, '2', 3),
  53. row('4', hana::char_c<'5'>, 6)
  54. );
  55. BOOST_HANA_CONSTEXPR_CHECK(m.size() == 6ul);
  56. BOOST_HANA_CONSTEXPR_CHECK(m.ncolumns() == 3ul);
  57. BOOST_HANA_CONSTEXPR_CHECK(m.nrows() == 2ul);
  58. }
  59. }