querying_find2.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*=============================================================================
  2. Copyright (c) 2005 Dan Marsden
  3. Copyright (c) 2005-2007 Joel de Guzman
  4. Copyright (c) 2007 Hartmut Kaiser
  5. Copyright (c) 2015 John Fletcher
  6. Distributed under the Boost Software License, Version 1.0. (See accompanying
  7. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  8. ==============================================================================*/
  9. #include <boost/phoenix/config.hpp>
  10. #include <boost/phoenix/core.hpp>
  11. #include <boost/phoenix/stl/algorithm/querying.hpp>
  12. #include <boost/detail/lightweight_test.hpp>
  13. #include <boost/assign/list_of.hpp>
  14. #include <set>
  15. #include <map>
  16. #include <functional>
  17. #ifdef BOOST_PHOENIX_HAS_HASH
  18. #include BOOST_PHOENIX_HASH_SET_HEADER
  19. #include BOOST_PHOENIX_HASH_MAP_HEADER
  20. #endif
  21. #ifdef BOOST_PHOENIX_HAS_UNORDERED_SET_AND_MAP
  22. #include BOOST_PHOENIX_UNORDERED_SET_HEADER
  23. #include BOOST_PHOENIX_UNORDERED_MAP_HEADER
  24. #endif
  25. namespace
  26. {
  27. struct even
  28. {
  29. bool operator()(const int i) const
  30. {
  31. return i % 2 == 0;
  32. }
  33. };
  34. struct mod_2_comparison
  35. {
  36. bool operator()(
  37. const int lhs,
  38. const int rhs)
  39. {
  40. return lhs % 2 == rhs % 2;
  41. }
  42. };
  43. void find_test()
  44. {
  45. using boost::phoenix::arg_names::arg1;
  46. int array[] = {1,2,3};
  47. BOOST_TEST(boost::phoenix::find(arg1,2)(array) == array + 1);
  48. std::set<int> s(array, array + 3);
  49. BOOST_TEST(boost::phoenix::find(arg1, 2)(s) == s.find(2));
  50. std::map<int, int> m = boost::assign::map_list_of(0, 1)(2, 3)(4, 5).
  51. convert_to_container<std::map<int, int> >();
  52. BOOST_TEST(boost::phoenix::find(arg1, 2)(m) == m.find(2));
  53. #ifdef BOOST_PHOENIX_HAS_HASH
  54. BOOST_PHOENIX_HASH_NAMESPACE::hash_set<int> hs(array, array + 3);
  55. BOOST_TEST(boost::phoenix::find(arg1, 2)(hs) == hs.find(2));
  56. BOOST_PHOENIX_HASH_NAMESPACE::hash_map<int, int> hm = boost::assign::map_list_of(0, 1)(2, 3)(4, 5).
  57. convert_to_container<BOOST_PHOENIX_HASH_NAMESPACE::hash_map<int, int> >();
  58. BOOST_TEST(boost::phoenix::find(arg1, 2)(hm) == hm.find(2));
  59. #endif
  60. #ifdef BOOST_PHOENIX_HAS_UNORDERED_SET_AND_MAP
  61. std::unordered_set<int> us(array, array + 3);
  62. BOOST_TEST(boost::phoenix::find(arg1, 2)(us) == us.find(2));
  63. int marray[] = {1,1,2,3,3};
  64. std::unordered_multiset<int> ums(marray, marray + 5);
  65. BOOST_TEST(boost::phoenix::find(arg1, 2)(ums) == ums.find(2));
  66. std::unordered_map<int, int> um =
  67. boost::assign::map_list_of(0, 1)(2, 3)(4, 5).
  68. convert_to_container<std::unordered_map<int, int> >();
  69. BOOST_TEST(boost::phoenix::find(arg1, 2)(um) == um.find(2));
  70. std::unordered_multimap<int, int> umm =
  71. boost::assign::map_list_of(0, 1)(2, 3)(4, 5)(4, 6).
  72. convert_to_container<std::unordered_multimap<int, int> >();
  73. BOOST_TEST(boost::phoenix::find(arg1, 2)(umm) == umm.find(2));
  74. #endif
  75. return;
  76. }
  77. }
  78. int main()
  79. {
  80. find_test();
  81. return boost::report_errors();
  82. }