]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/intrusive/test/unordered_set_test.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / intrusive / test / unordered_set_test.cpp
CommitLineData
7c673cae
FG
1/////////////////////////////////////////////////////////////////////////////
2//
3// (C) Copyright Ion Gaztanaga 2006-2015.
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9// See http://www.boost.org/libs/intrusive for documentation.
10//
11/////////////////////////////////////////////////////////////////////////////
12#include <boost/intrusive/unordered_set.hpp>
13#include <boost/intrusive/pointer_traits.hpp>
14#include <boost/intrusive/detail/iterator.hpp>
15#include "itestvalue.hpp"
16#include "smart_ptr.hpp"
17#include "common_functors.hpp"
18#include <vector>
19#include <set>
20#include <boost/detail/lightweight_test.hpp>
21#include "test_macros.hpp"
22#include "test_container.hpp"
23#include "unordered_test_common.hpp"
24#include "unordered_test.hpp"
25
26using namespace boost::intrusive;
27
28template < class ValueTraits, bool ConstantTimeSize, bool CacheBegin, bool CompareHash, bool Incremental, bool Map, bool DefaultHolder >
29struct rebinder
30{
31 typedef unordered_rebinder_common<ValueTraits, DefaultHolder, Map> common_t;
32 typedef typename ValueContainer< typename ValueTraits::value_type >::type value_cont_type;
33
34 template < class Option1 =void
35 , class Option2 =void
36 >
37 struct container
38 {
39 typedef unordered_set
40 < typename common_t::value_type
41 , value_traits<ValueTraits>
42 , constant_time_size<ConstantTimeSize>
43 , cache_begin<CacheBegin>
44 , compare_hash<CompareHash>
45 , incremental<Incremental>
46 , typename common_t::holder_opt
47 , typename common_t::key_of_value_opt
b32b8144 48 , size_type<unsigned short>
7c673cae
FG
49 , Option1
50 , Option2
51 > type;
52 BOOST_STATIC_ASSERT((key_type_tester<typename common_t::key_of_value_opt, type>::value));
53 BOOST_STATIC_ASSERT((!boost::intrusive::test::is_multikey_true<type>::value));
54 };
55};
56
57enum HookType
58{
59 Base,
60 Member,
61 NonMember
62};
63
64template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map, HookType Type>
65class test_main_template;
66
67template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map>
68class test_main_template<VoidPointer, ConstantTimeSize, DefaultHolder, Map, Base>
69{
70 public:
71 static void execute()
72 {
73 typedef testvalue<unordered_hooks<VoidPointer> > value_type;
74 static const int random_init[6] = { 3, 2, 4, 1, 5, 2 };
75 typedef typename ValueContainer< value_type >::type value_cont_type;
76 value_cont_type data (6);
77 for (int i = 0; i < 6; ++i)
78 data[i].value_ = random_init[i];
79
80 typedef testvalue_traits< unordered_hooks<VoidPointer> > testval_traits_t;
81 //base
82 typedef typename detail::if_c
83 < ConstantTimeSize
84 , typename testval_traits_t::base_value_traits
85 , typename testval_traits_t::auto_base_value_traits //store_hash<true>
86 >::type base_hook_t;
87 test::test_unordered
88 < //cache_begin, compare_hash, incremental
89 rebinder<base_hook_t, ConstantTimeSize, ConstantTimeSize, !ConstantTimeSize, !!ConstantTimeSize, Map, DefaultHolder>
90 >::test_all(data);
91 }
92};
93
94template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map>
95class test_main_template<VoidPointer, ConstantTimeSize, DefaultHolder, Map, Member>
96{
97 public:
98 static void execute()
99 {
100 typedef testvalue<unordered_hooks<VoidPointer> > value_type;
101 static const int random_init[6] = { 3, 2, 4, 1, 5, 2 };
102 typedef typename ValueContainer< value_type >::type value_cont_type;
103 value_cont_type data (6);
104 for (int i = 0; i < 6; ++i)
105 data[i].value_ = random_init[i];
106
107 typedef testvalue_traits< unordered_hooks<VoidPointer> > testval_traits_t;
108 //member
109 typedef typename detail::if_c
110 < ConstantTimeSize
111 , typename testval_traits_t::member_value_traits //optimize_multikey<true>
112 , typename testval_traits_t::auto_member_value_traits //store_hash<true>, optimize_multikey<true>
113 >::type member_hook_t;
114 test::test_unordered
115 < //cache_begin, compare_hash, incremental
116 rebinder<member_hook_t, ConstantTimeSize, false, !ConstantTimeSize, false, !ConstantTimeSize, DefaultHolder>
117 >::test_all(data);
118 }
119};
120
121template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map>
122class test_main_template<VoidPointer, ConstantTimeSize, DefaultHolder, Map, NonMember>
123
124{
125 public:
126 static void execute()
127 {
128 typedef testvalue<unordered_hooks<VoidPointer> > value_type;
129 static const int random_init[6] = { 3, 2, 4, 1, 5, 2 };
130 typedef typename ValueContainer< value_type >::type value_cont_type;
131 value_cont_type data (6);
132 for (int i = 0; i < 6; ++i)
133 data[i].value_ = random_init[i];
134
135 typedef testvalue_traits< unordered_hooks<VoidPointer> > testval_traits_t;
136 //nonmember
137 test::test_unordered
138 < //cache_begin, compare_hash, incremental
139 rebinder<typename testval_traits_t::nonhook_value_traits, ConstantTimeSize, false, false, false, Map, DefaultHolder>
140 >::test_all(data);
141 }
142};
143
144int main()
145{
146 //VoidPointer x ConstantTimeSize x Map x DefaultHolder
147
148 //void pointer
149 test_main_template<void*, false, false, false, Base>::execute();
150 test_main_template<void*, false, true, false, Member>::execute();
151 test_main_template<void*, true, false, false, NonMember>::execute();
152 test_main_template<void*, true, true, false, Base>::execute();
153
154 //smart_ptr
155 test_main_template<smart_ptr<void>, false, false, false, Member>::execute();
156 test_main_template<smart_ptr<void>, false, true, false, NonMember>::execute();
157 test_main_template<smart_ptr<void>, true, false, false, Base>::execute();
158 test_main_template<smart_ptr<void>, true, true, false, Member>::execute();
159
160 ////bounded_ptr (bool ConstantTimeSize, bool Map)
161 //test_main_template_bptr< false, false >::execute();
162 //test_main_template_bptr< false, true >::execute();
163 //test_main_template_bptr< true, false >::execute();
164 //test_main_template_bptr< true, true >::execute();
165
166 return boost::report_errors();
167}