span.hpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. #ifndef BOOST_HANA_TEST_AUTO_SPAN_HPP
  5. #define BOOST_HANA_TEST_AUTO_SPAN_HPP
  6. #include <boost/hana/assert.hpp>
  7. #include <boost/hana/equal.hpp>
  8. #include <boost/hana/span.hpp>
  9. #include "test_case.hpp"
  10. #include <laws/base.hpp>
  11. #include <support/minimal_product.hpp>
  12. TestCase test_span{[]{
  13. namespace hana = boost::hana;
  14. using hana::test::ct_eq;
  15. auto z = ct_eq<999>{};
  16. auto pair = ::minimal_product;
  17. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  18. hana::span(MAKE_TUPLE(), hana::equal.to(z)),
  19. pair(MAKE_TUPLE(), MAKE_TUPLE())
  20. ));
  21. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  22. hana::span(MAKE_TUPLE(ct_eq<0>{}), hana::equal.to(z)),
  23. pair(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{}))
  24. ));
  25. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  26. hana::span(MAKE_TUPLE(z), hana::equal.to(z)),
  27. pair(MAKE_TUPLE(z), MAKE_TUPLE())
  28. ));
  29. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  30. hana::span(MAKE_TUPLE(ct_eq<0>{}, z), hana::equal.to(z)),
  31. pair(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{}, z))
  32. ));
  33. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  34. hana::span(MAKE_TUPLE(z, ct_eq<0>{}), hana::equal.to(z)),
  35. pair(MAKE_TUPLE(z), MAKE_TUPLE(ct_eq<0>{}))
  36. ));
  37. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  38. hana::span(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::equal.to(z)),
  39. pair(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}))
  40. ));
  41. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  42. hana::span(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::equal.to(z)),
  43. pair(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}))
  44. ));
  45. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  46. hana::span(MAKE_TUPLE(z, ct_eq<1>{}, ct_eq<2>{}), hana::equal.to(z)),
  47. pair(MAKE_TUPLE(z), MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}))
  48. ));
  49. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  50. hana::span(MAKE_TUPLE(ct_eq<0>{}, z, ct_eq<2>{}), hana::equal.to(z)),
  51. pair(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{}, z, ct_eq<2>{}))
  52. ));
  53. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  54. hana::span(MAKE_TUPLE(z, z, ct_eq<2>{}), hana::equal.to(z)),
  55. pair(MAKE_TUPLE(z, z), MAKE_TUPLE(ct_eq<2>{}))
  56. ));
  57. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  58. hana::span(MAKE_TUPLE(z, z, z), hana::equal.to(z)),
  59. pair(MAKE_TUPLE(z, z, z), MAKE_TUPLE())
  60. ));
  61. // span.by
  62. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  63. hana::span.by(hana::equal.to(z), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
  64. hana::span(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::equal.to(z))
  65. ));
  66. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  67. hana::span.by(hana::equal.to(z))(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
  68. hana::span(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::equal.to(z))
  69. ));
  70. }};
  71. #endif // !BOOST_HANA_TEST_AUTO_SPAN_HPP