/Src/Dependencies/Boost/libs/unordered/test/unordered/insert_stable_tests.cpp

http://hadesmem.googlecode.com/ · C++ · 84 lines · 65 code · 16 blank · 3 comment · 34 complexity · fff666f016d4ac8d7e4c86aae7419106 MD5 · raw file

  1. // Copyright 2007-2009 Daniel James.
  2. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  3. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4. #include "../helpers/prefix.hpp"
  5. #include <boost/unordered_set.hpp>
  6. #include <boost/unordered_map.hpp>
  7. #include "../helpers/test.hpp"
  8. #include <iostream>
  9. namespace insert_stable
  10. {
  11. struct member {
  12. int tag1_;
  13. int tag2_;
  14. member() : tag1_(0), tag2_(0) {}
  15. member(int t1, int t2) : tag1_(t1), tag2_(t2) {}
  16. friend bool operator==(member const& x, member const& y) {
  17. return x.tag1_ == y.tag1_;
  18. }
  19. friend bool operator!=(member const& x, member const& y) {
  20. return x.tag1_ != y.tag1_;
  21. }
  22. };
  23. }
  24. #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
  25. namespace boost
  26. #else
  27. namespace insert_stable
  28. #endif
  29. {
  30. std::size_t hash_value(insert_stable::member const& x) {
  31. return static_cast<std::size_t>(x.tag1_);
  32. }
  33. }
  34. UNORDERED_AUTO_TEST(stable_insert_test1) {
  35. boost::unordered_multiset<insert_stable::member> x;
  36. x.insert(insert_stable::member(1,1));
  37. x.insert(insert_stable::member(1,2));
  38. x.insert(insert_stable::member(1,3));
  39. boost::unordered_multiset<insert_stable::member>::const_iterator
  40. it = x.begin(), end = x.end();
  41. BOOST_TEST(it != end);
  42. if(it != end) { BOOST_TEST(it->tag2_ == 1); ++it; }
  43. BOOST_TEST(it != end);
  44. if(it != end) { BOOST_TEST(it->tag2_ == 2); ++it; }
  45. BOOST_TEST(it != end);
  46. if(it != end) { BOOST_TEST(it->tag2_ == 3); ++it; }
  47. BOOST_TEST(it == end);
  48. }
  49. UNORDERED_AUTO_TEST(stable_insert_test2) {
  50. boost::unordered_multimap<insert_stable::member, int> x;
  51. typedef
  52. boost::unordered_multimap<insert_stable::member, int>::const_iterator
  53. iterator;
  54. iterator it
  55. = x.insert(x.end(), std::make_pair(insert_stable::member(1,1), 1));
  56. it = x.insert(it, std::make_pair(insert_stable::member(1,2), 2));
  57. it = x.insert(it, std::make_pair(insert_stable::member(1,3), 3));
  58. it = x.begin();
  59. iterator end = x.end();
  60. BOOST_TEST(it != end);
  61. if(it != end) { BOOST_TEST(it->first.tag2_ == 1 && it->second == 1); ++it; }
  62. BOOST_TEST(it != end);
  63. if(it != end) { BOOST_TEST(it->first.tag2_ == 2 && it->second == 2); ++it; }
  64. BOOST_TEST(it != end);
  65. if(it != end) { BOOST_TEST(it->first.tag2_ == 3 && it->second == 3); ++it; }
  66. BOOST_TEST(it == end);
  67. }
  68. RUN_TESTS()