length.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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/integral_constant.hpp>
  8. #include <boost/hana/length.hpp>
  9. #include <boost/hana/tuple.hpp>
  10. #include <support/seq.hpp>
  11. namespace hana = boost::hana;
  12. template <int> struct undefined { };
  13. int main() {
  14. auto container = ::seq;
  15. {
  16. auto storage = container();
  17. auto sliced = hana::experimental::sliced(storage, hana::tuple_c<int>);
  18. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  19. hana::length(sliced),
  20. hana::size_c<0>
  21. ));
  22. }
  23. {
  24. auto storage = container(undefined<0>{});
  25. auto sliced = hana::experimental::sliced(storage, hana::tuple_c<int, 0>);
  26. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  27. hana::length(sliced),
  28. hana::size_c<1>
  29. ));
  30. }{
  31. auto storage = container(undefined<0>{});
  32. auto sliced = hana::experimental::sliced(storage, hana::tuple_c<int>);
  33. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  34. hana::length(sliced),
  35. hana::size_c<0>
  36. ));
  37. }
  38. {
  39. auto storage = container(undefined<0>{}, undefined<1>{});
  40. auto sliced = hana::experimental::sliced(storage, hana::tuple_c<int, 0>);
  41. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  42. hana::length(sliced),
  43. hana::size_c<1>
  44. ));
  45. }{
  46. auto storage = container(undefined<0>{}, undefined<1>{});
  47. auto sliced = hana::experimental::sliced(storage, hana::tuple_c<int, 0, 1>);
  48. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  49. hana::length(sliced),
  50. hana::size_c<2>
  51. ));
  52. }{
  53. auto storage = container(undefined<0>{}, undefined<1>{});
  54. auto sliced = hana::experimental::sliced(storage, hana::tuple_c<int, 0, 0>);
  55. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  56. hana::length(sliced),
  57. hana::size_c<2>
  58. ));
  59. }
  60. }