unpack.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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/unpack.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. {
  16. auto storage1 = container();
  17. auto storage2 = container();
  18. auto joined = hana::experimental::joined(storage1, storage2);
  19. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  20. hana::unpack(joined, f),
  21. f()
  22. ));
  23. }
  24. {
  25. auto storage1 = container(ct_eq<0>{});
  26. auto storage2 = container();
  27. auto joined = hana::experimental::joined(storage1, storage2);
  28. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  29. hana::unpack(joined, f),
  30. f(ct_eq<0>{})
  31. ));
  32. }{
  33. auto storage1 = container();
  34. auto storage2 = container(ct_eq<0>{});
  35. auto joined = hana::experimental::joined(storage1, storage2);
  36. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  37. hana::unpack(joined, f),
  38. f(ct_eq<0>{})
  39. ));
  40. }{
  41. auto storage1 = container(ct_eq<0>{});
  42. auto storage2 = container(ct_eq<1>{});
  43. auto joined = hana::experimental::joined(storage1, storage2);
  44. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  45. hana::unpack(joined, f),
  46. f(ct_eq<0>{}, ct_eq<1>{})
  47. ));
  48. }
  49. {
  50. auto storage1 = container(ct_eq<0>{}, ct_eq<1>{});
  51. auto storage2 = container();
  52. auto joined = hana::experimental::joined(storage1, storage2);
  53. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  54. hana::unpack(joined, f),
  55. f(ct_eq<0>{}, ct_eq<1>{})
  56. ));
  57. }{
  58. auto storage1 = container();
  59. auto storage2 = container(ct_eq<0>{}, ct_eq<1>{});
  60. auto joined = hana::experimental::joined(storage1, storage2);
  61. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  62. hana::unpack(joined, f),
  63. f(ct_eq<0>{}, ct_eq<1>{})
  64. ));
  65. }{
  66. auto storage1 = container(ct_eq<0>{}, ct_eq<1>{});
  67. auto storage2 = container(ct_eq<2>{}, ct_eq<3>{});
  68. auto joined = hana::experimental::joined(storage1, storage2);
  69. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  70. hana::unpack(joined, f),
  71. f(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{})
  72. ));
  73. }
  74. }