insert_range.hpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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_INSERT_RANGE_HPP
  5. #define BOOST_HANA_TEST_AUTO_INSERT_RANGE_HPP
  6. #include <boost/hana/assert.hpp>
  7. #include <boost/hana/equal.hpp>
  8. #include <boost/hana/insert_range.hpp>
  9. #include <boost/hana/integral_constant.hpp>
  10. #include "test_case.hpp"
  11. #include <laws/base.hpp>
  12. #include <support/seq.hpp>
  13. TestCase test_insert_range{[]{
  14. namespace hana = boost::hana;
  15. using hana::test::ct_eq;
  16. auto foldable = ::seq;
  17. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  18. hana::insert_range(
  19. MAKE_TUPLE(ct_eq<1>{}),
  20. hana::size_c<0>,
  21. foldable()),
  22. MAKE_TUPLE(ct_eq<1>{})
  23. ));
  24. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  25. hana::insert_range(
  26. MAKE_TUPLE(ct_eq<1>{}),
  27. hana::size_c<0>,
  28. foldable(ct_eq<-1>{})),
  29. MAKE_TUPLE(ct_eq<-1>{}, ct_eq<1>{})
  30. ));
  31. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  32. hana::insert_range(
  33. MAKE_TUPLE(ct_eq<1>{}),
  34. hana::size_c<0>,
  35. foldable(ct_eq<-1>{}, ct_eq<-2>{})),
  36. MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<1>{})
  37. ));
  38. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  39. hana::insert_range(
  40. MAKE_TUPLE(ct_eq<1>{}),
  41. hana::size_c<0>,
  42. foldable(ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<-3>{})),
  43. MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<-3>{}, ct_eq<1>{})
  44. ));
  45. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  46. hana::insert_range(
  47. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}),
  48. hana::size_c<0>,
  49. foldable()),
  50. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{})
  51. ));
  52. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  53. hana::insert_range(
  54. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}),
  55. hana::size_c<0>,
  56. foldable(ct_eq<-1>{})),
  57. MAKE_TUPLE(ct_eq<-1>{}, ct_eq<1>{}, ct_eq<2>{})
  58. ));
  59. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  60. hana::insert_range(
  61. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}),
  62. hana::size_c<0>,
  63. foldable(ct_eq<-1>{}, ct_eq<-2>{})),
  64. MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<1>{}, ct_eq<2>{})
  65. ));
  66. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  67. hana::insert_range(
  68. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}),
  69. hana::size_c<1>,
  70. foldable()),
  71. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{})
  72. ));
  73. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  74. hana::insert_range(
  75. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}),
  76. hana::size_c<1>,
  77. foldable(ct_eq<-1>{})),
  78. MAKE_TUPLE(ct_eq<1>{}, ct_eq<-1>{}, ct_eq<2>{})
  79. ));
  80. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  81. hana::insert_range(
  82. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}),
  83. hana::size_c<1>,
  84. foldable(ct_eq<-1>{}, ct_eq<-2>{})),
  85. MAKE_TUPLE(ct_eq<1>{}, ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<2>{})
  86. ));
  87. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  88. hana::insert_range(
  89. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
  90. hana::size_c<2>,
  91. foldable(ct_eq<-1>{}, ct_eq<-2>{})),
  92. MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<3>{}, ct_eq<4>{})
  93. ));
  94. }};
  95. #endif // !BOOST_HANA_TEST_AUTO_INSERT_RANGE_HPP