length.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 <support/seq.hpp>
  10. namespace hana = boost::hana;
  11. template <int> struct undefined { };
  12. int main() {
  13. auto container = ::seq;
  14. {
  15. auto storage1 = container();
  16. auto storage2 = container();
  17. auto joined = hana::experimental::joined(storage1, storage2);
  18. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  19. hana::length(joined),
  20. hana::size_c<0>
  21. ));
  22. }
  23. {
  24. auto storage1 = container(undefined<0>{});
  25. auto storage2 = container();
  26. auto joined = hana::experimental::joined(storage1, storage2);
  27. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  28. hana::length(joined),
  29. hana::size_c<1>
  30. ));
  31. }
  32. {
  33. auto storage1 = container();
  34. auto storage2 = container(undefined<0>{});
  35. auto joined = hana::experimental::joined(storage1, storage2);
  36. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  37. hana::length(joined),
  38. hana::size_c<1>
  39. ));
  40. }
  41. {
  42. auto storage1 = container(undefined<0>{});
  43. auto storage2 = container(undefined<1>{});
  44. auto joined = hana::experimental::joined(storage1, storage2);
  45. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  46. hana::length(joined),
  47. hana::size_c<2>
  48. ));
  49. }
  50. {
  51. auto storage1 = container(undefined<0>{});
  52. auto storage2 = container(undefined<1>{});
  53. auto joined = hana::experimental::joined(storage1, storage2);
  54. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  55. hana::length(joined),
  56. hana::size_c<2>
  57. ));
  58. }
  59. {
  60. auto storage1 = container(undefined<0>{}, undefined<1>{});
  61. auto storage2 = container(undefined<2>{});
  62. auto joined = hana::experimental::joined(storage1, storage2);
  63. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  64. hana::length(joined),
  65. hana::size_c<3>
  66. ));
  67. }
  68. {
  69. auto storage1 = container(undefined<0>{}, undefined<1>{}, undefined<2>{});
  70. auto storage2 = container(undefined<3>{}, undefined<4>{});
  71. auto joined = hana::experimental::joined(storage1, storage2);
  72. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  73. hana::length(joined),
  74. hana::size_c<5>
  75. ));
  76. }
  77. }