ring.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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/equal.hpp>
  6. #include <boost/hana/mult.hpp>
  7. #include <boost/hana/one.hpp>
  8. #include "matrix/comparable.hpp"
  9. #include "matrix/ring.hpp"
  10. namespace hana = boost::hana;
  11. using namespace cppcon;
  12. int main() {
  13. // mult
  14. {
  15. BOOST_HANA_CONSTEXPR_LAMBDA auto a = matrix(
  16. row(1, 2, 3),
  17. row(4, 5, 6)
  18. );
  19. BOOST_HANA_CONSTEXPR_LAMBDA auto b = matrix(
  20. row(1, 2),
  21. row(3, 4),
  22. row(5, 6)
  23. );
  24. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  25. hana::mult(a, b),
  26. matrix(
  27. row(1*1 + 2*3 + 5*3, 1*2 + 2*4 + 3*6),
  28. row(4*1 + 3*5 + 5*6, 4*2 + 5*4 + 6*6)
  29. )
  30. ));
  31. }
  32. // one
  33. {
  34. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  35. hana::one<Matrix<1, 1>>(),
  36. matrix(
  37. row(1)
  38. )
  39. ));
  40. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  41. hana::one<Matrix<2, 2>>(),
  42. matrix(
  43. row(1, 0),
  44. row(0, 1)
  45. )
  46. ));
  47. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  48. hana::one<Matrix<3, 3>>(),
  49. matrix(
  50. row(1, 0, 0),
  51. row(0, 1, 0),
  52. row(0, 0, 1)
  53. )
  54. ));
  55. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  56. hana::one<Matrix<4, 4>>(),
  57. matrix(
  58. row(1, 0, 0, 0),
  59. row(0, 1, 0, 0),
  60. row(0, 0, 1, 0),
  61. row(0, 0, 0, 1)
  62. )
  63. ));
  64. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  65. hana::one<Matrix<4, 5>>(),
  66. matrix(
  67. row(1, 0, 0, 0, 0),
  68. row(0, 1, 0, 0, 0),
  69. row(0, 0, 1, 0, 0),
  70. row(0, 0, 0, 1, 0)
  71. )
  72. ));
  73. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  74. hana::one<Matrix<5, 4>>(),
  75. matrix(
  76. row(1, 0, 0, 0),
  77. row(0, 1, 0, 0),
  78. row(0, 0, 1, 0),
  79. row(0, 0, 0, 1),
  80. row(0, 0, 0, 0)
  81. )
  82. ));
  83. }
  84. }