]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multi_index/test/test_hash_ops.cpp
1 /* Boost.MultiIndex test for standard hash operations.
3 * Copyright 2003-2013 Joaquin M Lopez Munoz.
4 * Distributed under the Boost Software License, Version 1.0.
5 * (See accompanying file LICENSE_1_0.txt or copy at
6 * http://www.boost.org/LICENSE_1_0.txt)
8 * See http://www.boost.org/libs/multi_index for library home page.
11 #include "test_hash_ops.hpp"
13 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
15 #include <boost/detail/lightweight_test.hpp>
16 #include "pre_multi_index.hpp"
17 #include <boost/multi_index_container.hpp>
18 #include <boost/multi_index/hashed_index.hpp>
19 #include <boost/multi_index/identity.hpp>
24 using namespace boost::multi_index
;
26 template<typename HashedContainer
>
27 void check_load_factor(const HashedContainer
& hc
)
29 float lf
=(float)hc
.size()/hc
.bucket_count();
30 BOOST_TEST(lf
<=hc
.load_factor()+1.E
-6);
31 BOOST_TEST(lf
>=hc
.load_factor()-1.E
-6);
32 BOOST_TEST(lf
<=hc
.max_load_factor()+1.E
-6);
35 typedef multi_index_container
<
38 hashed_unique
<identity
<int> >
46 BOOST_TEST(hc
.max_load_factor()==1.0f
);
47 BOOST_TEST(hc
.bucket_count()<=hc
.max_bucket_count());
50 hash_container::size_type buc
=hc
.bucket(1000);
51 hash_container::local_iterator it0
=hc
.begin(buc
);
52 hash_container::local_iterator it1
=hc
.end(buc
);
54 (hash_container::size_type
)std::distance(it0
,it1
)==hc
.bucket_size(buc
)&&
55 hc
.bucket_size(buc
)==1&&*it0
==1000);
59 for(hash_container::size_type s
=2*hc
.bucket_count();s
--;){
62 check_load_factor(hc
);
64 hc
.max_load_factor(0.5f
);
65 BOOST_TEST(hc
.max_load_factor()==0.5f
);
67 check_load_factor(hc
);
70 BOOST_TEST(hc
.bucket_count()>=1);
71 check_load_factor(hc
);
73 hc
.max_load_factor(0.25f
);
75 BOOST_TEST(hc
.bucket_count()>=1);
76 check_load_factor(hc
);
78 hash_container::size_type bc
=4*hc
.bucket_count();
79 hc
.max_load_factor(0.125f
);
81 BOOST_TEST(hc
.bucket_count()>=bc
);
82 check_load_factor(hc
);
84 bc
=2*hc
.bucket_count();
86 BOOST_TEST(hc
.bucket_count()>=bc
);
87 check_load_factor(hc
);
92 BOOST_TEST(hc
.bucket_count()>=1);
93 check_load_factor(hc
);
97 hc2
.max_load_factor(0.5f
/hc2
.bucket_count());
98 BOOST_TEST(hc2
.load_factor()>hc2
.max_load_factor());
100 BOOST_TEST(hc2
.load_factor()<hc2
.max_load_factor());
104 hc3
.max_load_factor(1.0f
);
106 hash_container::size_type bc3
=hc3
.bucket_count();
107 BOOST_TEST(bc3
>=1000);
109 for(unsigned int n
=0;n
<bc3
;++n
)v
.push_back(n
);
110 hc3
.insert(v
.begin(),v
.end());
111 BOOST_TEST(hc3
.bucket_count()==bc3
); /* LWG issue 2156 */
112 hc3
.max_load_factor(0.25f
);
114 BOOST_TEST(hc3
.bucket_count()>bc3
);
115 bc3
=hc3
.bucket_count();
116 hc3
.reserve((hash_container::size_type
)(3.0f
*hc3
.max_load_factor()*bc3
));
117 BOOST_TEST(hc3
.bucket_count()>bc3
);