]>
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)
6 #include "../helpers/prefix.hpp"
7 #include <boost/unordered_set.hpp>
8 #include <boost/unordered_map.hpp>
9 #include "../helpers/postfix.hpp"
11 #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
) {
25 return x
.tag1_
== y
.tag1_
;
28 friend bool operator!=(member
const& x
, member
const& y
) {
29 return x
.tag1_
!= y
.tag1_
;
34 #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
37 namespace insert_stable
40 std::size_t hash_value(insert_stable::member
const& x
) {
41 return static_cast<std::size_t>(x
.tag1_
);
45 UNORDERED_AUTO_TEST(stable_insert_test1
) {
46 boost::unordered_multiset
<insert_stable::member
> x
;
48 x
.insert(insert_stable::member(1,1));
49 x
.insert(insert_stable::member(1,2));
50 x
.insert(insert_stable::member(1,3));
52 BOOST_TEST(x
.count(insert_stable::member(1,4)) == 3);
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
);
65 UNORDERED_AUTO_TEST(stable_insert_test2
) {
66 boost::unordered_multimap
<insert_stable::member
, int> x
;
68 boost::unordered_multimap
<insert_stable::member
, int>::const_iterator
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);
75 BOOST_TEST(x
.count(insert_stable::member(1,4)) == 3);
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
);