find_if.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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/ext/std/integer_sequence.hpp>
  7. #include <boost/hana/ext/std/integral_constant.hpp>
  8. #include <boost/hana/find_if.hpp>
  9. #include <boost/hana/optional.hpp>
  10. #include <cstddef>
  11. #include <type_traits>
  12. #include <utility>
  13. namespace hana = boost::hana;
  14. struct undefined { };
  15. int main() {
  16. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  17. hana::find_if(std::index_sequence<>{},
  18. hana::equal.to(undefined{})),
  19. hana::nothing
  20. ));
  21. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  22. hana::find_if(std::index_sequence<0>{},
  23. hana::equal.to(std::integral_constant<std::size_t, 0>{})),
  24. hana::just(std::integral_constant<std::size_t, 0>{})
  25. ));
  26. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  27. hana::find_if(std::index_sequence<0>{},
  28. hana::equal.to(std::integral_constant<std::size_t, 1>{})),
  29. hana::nothing
  30. ));
  31. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  32. hana::find_if(std::index_sequence<0, 1>{},
  33. hana::equal.to(std::integral_constant<std::size_t, 0>{})),
  34. hana::just(std::integral_constant<std::size_t, 0>{})
  35. ));
  36. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  37. hana::find_if(std::index_sequence<0, 1>{},
  38. hana::equal.to(std::integral_constant<std::size_t, 1>{})),
  39. hana::just(std::integral_constant<std::size_t, 1>{})
  40. ));
  41. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  42. hana::find_if(std::index_sequence<0, 1>{},
  43. hana::equal.to(std::integral_constant<std::size_t, 2>{})),
  44. hana::nothing
  45. ));
  46. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  47. hana::find_if(std::index_sequence<0, 1, 2>{},
  48. hana::equal.to(std::integral_constant<std::size_t, 0>{})),
  49. hana::just(std::integral_constant<std::size_t, 0>{})
  50. ));
  51. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  52. hana::find_if(std::index_sequence<0, 1, 2>{},
  53. hana::equal.to(std::integral_constant<std::size_t, 1>{})),
  54. hana::just(std::integral_constant<std::size_t, 1>{})
  55. ));
  56. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  57. hana::find_if(std::index_sequence<0, 1, 2>{},
  58. hana::equal.to(std::integral_constant<std::size_t, 2>{})),
  59. hana::just(std::integral_constant<std::size_t, 2>{})
  60. ));
  61. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  62. hana::find_if(std::index_sequence<0, 1, 2>{},
  63. hana::equal.to(std::integral_constant<std::size_t, 3>{})),
  64. hana::nothing
  65. ));
  66. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  67. hana::find_if(std::index_sequence<0, 1, 2, 3>{},
  68. hana::equal.to(std::integral_constant<std::size_t, 0>{})),
  69. hana::just(std::integral_constant<std::size_t, 0>{})
  70. ));
  71. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  72. hana::find_if(std::index_sequence<0, 1, 2, 3>{},
  73. hana::equal.to(std::integral_constant<std::size_t, 1>{})),
  74. hana::just(std::integral_constant<std::size_t, 1>{})
  75. ));
  76. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  77. hana::find_if(std::index_sequence<0, 1, 2, 3>{},
  78. hana::equal.to(std::integral_constant<std::size_t, 2>{})),
  79. hana::just(std::integral_constant<std::size_t, 2>{})
  80. ));
  81. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  82. hana::find_if(std::index_sequence<0, 1, 2, 3>{},
  83. hana::equal.to(std::integral_constant<std::size_t, 3>{})),
  84. hana::just(std::integral_constant<std::size_t, 3>{})
  85. ));
  86. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  87. hana::find_if(std::index_sequence<0, 1, 2, 3>{},
  88. hana::equal.to(std::integral_constant<std::size_t, 4>{})),
  89. hana::nothing
  90. ));
  91. }