contains.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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/contains.hpp>
  6. #include <boost/hana/map.hpp>
  7. #include <boost/hana/not.hpp>
  8. #include <laws/base.hpp>
  9. #include <support/minimal_product.hpp>
  10. namespace hana = boost::hana;
  11. template <int i>
  12. auto key() { return hana::test::ct_eq<i>{}; }
  13. template <int i>
  14. auto val() { return hana::test::ct_eq<-i>{}; }
  15. template <int i, int j>
  16. auto p() { return ::minimal_product(key<i>(), val<j>()); }
  17. int main() {
  18. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  19. hana::make_map(),
  20. key<0>()
  21. )));
  22. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  23. hana::make_map(),
  24. key<1>()
  25. )));
  26. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  27. hana::make_map(p<0,0>()),
  28. key<0>()
  29. ));
  30. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  31. hana::make_map(p<0,0>()),
  32. key<1>()
  33. )));
  34. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  35. hana::make_map(p<0,0>()),
  36. key<2>()
  37. )));
  38. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  39. hana::make_map(p<0,0>(), p<1,1>()),
  40. key<0>()
  41. ));
  42. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  43. hana::make_map(p<0,0>(), p<1,1>()),
  44. key<1>()
  45. ));
  46. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  47. hana::make_map(p<0,0>(), p<1,1>()),
  48. key<2>()
  49. )));
  50. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  51. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>()),
  52. key<0>()
  53. ));
  54. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  55. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>()),
  56. key<1>()
  57. ));
  58. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  59. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>()),
  60. key<2>()
  61. ));
  62. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  63. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>()),
  64. key<3>()
  65. )));
  66. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  67. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  68. key<0>()
  69. ));
  70. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  71. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  72. key<1>()
  73. ));
  74. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  75. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  76. key<2>()
  77. ));
  78. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  79. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  80. key<3>()
  81. ));
  82. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  83. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  84. key<4>()
  85. )));
  86. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  87. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  88. key<5>()
  89. )));
  90. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  91. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  92. key<6>()
  93. ));
  94. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  95. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  96. key<7>()
  97. )));
  98. BOOST_HANA_CONSTANT_CHECK(hana::contains(
  99. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  100. key<8>()
  101. ));
  102. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::contains(
  103. hana::make_map(p<0,0>(), p<1,1>(), p<2,2>(), p<3,3>(), p<6,6>(), p<8,8>()),
  104. key<9>()
  105. )));
  106. }