transform.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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/experimental/view.hpp>
  7. #include <boost/hana/transform.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. auto g = hana::test::_injection<1>{};
  16. {
  17. auto storage = container();
  18. auto transformed = hana::experimental::transformed(storage, f);
  19. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  20. hana::transform(transformed, g),
  21. container()
  22. ));
  23. }{
  24. auto storage = container(ct_eq<0>{});
  25. auto transformed = hana::experimental::transformed(storage, f);
  26. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  27. hana::transform(transformed, g),
  28. container(g(f(ct_eq<0>{})))
  29. ));
  30. }{
  31. auto storage = container(ct_eq<0>{}, ct_eq<1>{});
  32. auto transformed = hana::experimental::transformed(storage, f);
  33. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  34. hana::transform(transformed, g),
  35. container(g(f(ct_eq<0>{})), g(f(ct_eq<1>{})))
  36. ));
  37. }{
  38. auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{});
  39. auto transformed = hana::experimental::transformed(storage, f);
  40. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  41. hana::transform(transformed, g),
  42. container(g(f(ct_eq<0>{})), g(f(ct_eq<1>{})), g(f(ct_eq<2>{})))
  43. ));
  44. }{
  45. auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{});
  46. auto transformed = hana::experimental::transformed(storage, f);
  47. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  48. hana::transform(transformed, g),
  49. container(g(f(ct_eq<0>{})), g(f(ct_eq<1>{})), g(f(ct_eq<2>{})), g(f(ct_eq<3>{})))
  50. ));
  51. }
  52. }