at.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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/at.hpp>
  6. #include <boost/hana/equal.hpp>
  7. #include <boost/hana/experimental/view.hpp>
  8. #include <laws/base.hpp>
  9. #include <support/seq.hpp>
  10. namespace hana = boost::hana;
  11. using hana::test::ct_eq;
  12. int main() {
  13. auto container = ::seq;
  14. auto f = hana::test::_injection<0>{};
  15. {
  16. auto storage = container(ct_eq<0>{});
  17. auto transformed = hana::experimental::transformed(storage, f);
  18. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  19. hana::at_c<0>(transformed),
  20. f(ct_eq<0>{})
  21. ));
  22. }{
  23. auto storage = container(ct_eq<0>{}, ct_eq<1>{});
  24. auto transformed = hana::experimental::transformed(storage, f);
  25. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  26. hana::at_c<0>(transformed),
  27. f(ct_eq<0>{})
  28. ));
  29. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  30. hana::at_c<1>(transformed),
  31. f(ct_eq<1>{})
  32. ));
  33. }{
  34. auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{});
  35. auto transformed = hana::experimental::transformed(storage, f);
  36. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  37. hana::at_c<0>(transformed),
  38. f(ct_eq<0>{})
  39. ));
  40. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  41. hana::at_c<1>(transformed),
  42. f(ct_eq<1>{})
  43. ));
  44. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  45. hana::at_c<2>(transformed),
  46. f(ct_eq<2>{})
  47. ));
  48. }{
  49. auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{});
  50. auto transformed = hana::experimental::transformed(storage, f);
  51. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  52. hana::at_c<0>(transformed),
  53. f(ct_eq<0>{})
  54. ));
  55. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  56. hana::at_c<1>(transformed),
  57. f(ct_eq<1>{})
  58. ));
  59. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  60. hana::at_c<2>(transformed),
  61. f(ct_eq<2>{})
  62. ));
  63. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  64. hana::at_c<3>(transformed),
  65. f(ct_eq<3>{})
  66. ));
  67. }
  68. }