9
3

iterable.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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/ext/std/array.hpp>
  5. #include <boost/hana/assert.hpp>
  6. #include <boost/hana/drop_front_exactly.hpp>
  7. #include <boost/hana/equal.hpp>
  8. #include <boost/hana/front.hpp>
  9. #include <boost/hana/integral_constant.hpp>
  10. #include <boost/hana/is_empty.hpp>
  11. #include <boost/hana/not.hpp>
  12. #include <boost/hana/tuple.hpp>
  13. #include <laws/base.hpp>
  14. #include <laws/iterable.hpp>
  15. #include <array>
  16. namespace hana = boost::hana;
  17. template <int ...i>
  18. constexpr auto array() { return std::array<int, sizeof...(i)>{{i...}}; }
  19. int main() {
  20. // is_empty
  21. {
  22. BOOST_HANA_CONSTANT_CHECK(hana::is_empty(array<>()));
  23. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(array<0>())));
  24. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(array<0, 1>())));
  25. }
  26. // front
  27. {
  28. BOOST_HANA_CONSTEXPR_CHECK(hana::front(array<0>()) == 0);
  29. BOOST_HANA_CONSTEXPR_CHECK(hana::front(array<0, 1>()) == 0);
  30. BOOST_HANA_CONSTEXPR_CHECK(hana::front(array<0, 1, 2>()) == 0);
  31. }
  32. // drop_front_exactly
  33. {
  34. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  35. hana::drop_front_exactly(array<0>()),
  36. array<>()
  37. ));
  38. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  39. hana::drop_front_exactly(array<0, 1>()),
  40. array<1>()
  41. ));
  42. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  43. hana::drop_front_exactly(array<0, 1, 2>()),
  44. array<1, 2>()
  45. ));
  46. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  47. hana::drop_front_exactly(array<0, 1, 2, 3>()),
  48. array<1, 2, 3>()
  49. ));
  50. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  51. hana::drop_front_exactly(array<0, 1, 2, 3>(), hana::size_c<2>),
  52. array<2, 3>()
  53. ));
  54. BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
  55. hana::drop_front_exactly(array<0, 1, 2, 3>(), hana::size_c<3>),
  56. array<3>()
  57. ));
  58. }
  59. // laws
  60. auto int_arrays = hana::make_tuple(
  61. array<>()
  62. , array<0>()
  63. , array<0, 1>()
  64. , array<0, 1, 2>()
  65. , array<0, 1, 2, 3>()
  66. , array<0, 1, 2, 3, 4>()
  67. );
  68. hana::test::TestIterable<hana::ext::std::array_tag>{int_arrays};
  69. }