]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/unordered/test/unordered/insert_stable_tests.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / unordered / test / unordered / insert_stable_tests.cpp
1
2 // Copyright 2007-2009 Daniel James.
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #include "../helpers/prefix.hpp"
7 #include <boost/unordered_set.hpp>
8 #include <boost/unordered_map.hpp>
9 #include "../helpers/postfix.hpp"
10
11 #include "../helpers/test.hpp"
12
13 #include <iostream>
14
15 namespace insert_stable
16 {
17 struct member {
18 int tag1_;
19 int tag2_;
20
21 member() : tag1_(0), tag2_(0) {}
22 member(int t1, int t2) : tag1_(t1), tag2_(t2) {}
23
24 friend bool operator==(member const& x, member const& y) {
25 return x.tag1_ == y.tag1_;
26 }
27
28 friend bool operator!=(member const& x, member const& y) {
29 return x.tag1_ != y.tag1_;
30 }
31 };
32 }
33
34 #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
35 namespace boost
36 #else
37 namespace insert_stable
38 #endif
39 {
40 std::size_t hash_value(insert_stable::member const& x) {
41 return static_cast<std::size_t>(x.tag1_);
42 }
43 }
44
45 UNORDERED_AUTO_TEST(stable_insert_test1) {
46 boost::unordered_multiset<insert_stable::member> x;
47
48 x.insert(insert_stable::member(1,1));
49 x.insert(insert_stable::member(1,2));
50 x.insert(insert_stable::member(1,3));
51
52 BOOST_TEST(x.count(insert_stable::member(1,4)) == 3);
53
54 boost::unordered_multiset<insert_stable::member>::const_iterator
55 it = x.begin(), end = x.end();
56 BOOST_TEST(it != end);
57 if(it != end) { BOOST_TEST(it->tag2_ == 1); ++it; }
58 BOOST_TEST(it != end);
59 if(it != end) { BOOST_TEST(it->tag2_ == 2); ++it; }
60 BOOST_TEST(it != end);
61 if(it != end) { BOOST_TEST(it->tag2_ == 3); ++it; }
62 BOOST_TEST(it == end);
63 }
64
65 UNORDERED_AUTO_TEST(stable_insert_test2) {
66 boost::unordered_multimap<insert_stable::member, int> x;
67 typedef
68 boost::unordered_multimap<insert_stable::member, int>::const_iterator
69 iterator;
70
71 iterator it = x.emplace(insert_stable::member(1,1), 1);
72 it = x.emplace(insert_stable::member(1,2), 2);
73 it = x.emplace(insert_stable::member(1,3), 3);
74
75 BOOST_TEST(x.count(insert_stable::member(1,4)) == 3);
76
77 it = x.begin();
78 iterator end = x.end();
79 BOOST_TEST(it != end);
80 if(it != end) { BOOST_TEST(it->first.tag2_ == 1 && it->second == 1); ++it; }
81 BOOST_TEST(it != end);
82 if(it != end) { BOOST_TEST(it->first.tag2_ == 2 && it->second == 2); ++it; }
83 BOOST_TEST(it != end);
84 if(it != end) { BOOST_TEST(it->first.tag2_ == 3 && it->second == 3); ++it; }
85 BOOST_TEST(it == end);
86 }
87
88 RUN_TESTS()