]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/unordered/test/unordered/insert_stable_tests.cpp
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)
7 #include "../helpers/prefix.hpp"
8 #include <boost/unordered_set.hpp>
9 #include <boost/unordered_map.hpp>
10 #include "../helpers/postfix.hpp"
13 #include "../helpers/test.hpp"
15 namespace insert_stable
{
21 member() : tag1_(0), tag2_(0) {}
22 member(int t1
, int t2
) : tag1_(t1
), tag2_(t2
) {}
24 friend bool operator==(member
const& x
, member
const& y
)
26 return x
.tag1_
== y
.tag1_
;
29 friend bool operator!=(member
const& x
, member
const& y
)
31 return x
.tag1_
!= y
.tag1_
;
36 #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
39 namespace insert_stable
42 std::size_t hash_value(insert_stable::member
const& x
)
44 return static_cast<std::size_t>(x
.tag1_
);
48 // This is no longer supported, as there's no longer an efficient way to get to
49 // the end of a group of equivalent nodes.
52 UNORDERED_AUTO_TEST(stable_insert_test1
)
54 boost::unordered_multiset
<insert_stable::member
> x
;
56 x
.insert(insert_stable::member(1, 1));
57 x
.insert(insert_stable::member(1, 2));
58 x
.insert(insert_stable::member(1, 3));
60 BOOST_TEST(x
.count(insert_stable::member(1, 4)) == 3);
62 boost::unordered_multiset
<insert_stable::member
>::const_iterator
65 BOOST_TEST(it
!= end
);
67 BOOST_TEST(it
->tag2_
== 1);
70 BOOST_TEST(it
!= end
);
72 BOOST_TEST(it
->tag2_
== 2);
75 BOOST_TEST(it
!= end
);
77 BOOST_TEST(it
->tag2_
== 3);
80 BOOST_TEST(it
== end
);
83 UNORDERED_AUTO_TEST(stable_insert_test2
)
85 boost::unordered_multimap
<insert_stable::member
, int> x
;
86 typedef boost::unordered_multimap
<insert_stable::member
,
87 int>::const_iterator iterator
;
89 iterator it
= x
.emplace(insert_stable::member(1, 1), 1);
90 it
= x
.emplace(insert_stable::member(1, 2), 2);
91 it
= x
.emplace(insert_stable::member(1, 3), 3);
93 BOOST_TEST(x
.count(insert_stable::member(1, 4)) == 3);
96 iterator end
= x
.end();
97 BOOST_TEST(it
!= end
);
99 BOOST_TEST(it
->first
.tag2_
== 1 && it
->second
== 1);
102 BOOST_TEST(it
!= end
);
104 BOOST_TEST(it
->first
.tag2_
== 2 && it
->second
== 2);
107 BOOST_TEST(it
!= end
);
109 BOOST_TEST(it
->first
.tag2_
== 3 && it
->second
== 3);
112 BOOST_TEST(it
== end
);