3 #include "set/hdr_intrusive_multilevel_hashset.h"
4 #include <cds/urcu/signal_buffered.h>
5 #include <cds/intrusive/multilevel_hashset_rcu.h>
6 #include "unit/print_multilevel_hashset_stat.h"
9 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
11 typedef cds::urcu::gc<cds::urcu::signal_buffered<>> rcu_type;
15 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_nohash()
17 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
18 typedef size_t key_type;
20 struct traits : public ci::multilevel_hashset::traits
22 typedef get_key<key_type> hash_accessor;
23 typedef item_disposer disposer;
25 typedef ci::MultiLevelHashSet< rcu_type, Item<key_type>, traits > set_type;
26 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
27 test_rcu<set_type, nohash<key_type>>(4, 2);
29 typedef ci::MultiLevelHashSet<
32 typename ci::multilevel_hashset::make_traits<
33 ci::multilevel_hashset::hash_accessor< get_key<key_type>>
34 , ci::opt::disposer< item_disposer >
37 test_rcu<set_type2, nohash<key_type>>(4, 2);
41 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_stdhash()
43 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
44 typedef size_t hash_type;
46 struct traits: public ci::multilevel_hashset::traits
48 typedef get_hash<hash_type> hash_accessor;
49 typedef item_disposer disposer;
51 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
52 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
53 test_rcu<set_type, std::hash<hash_type>>(4, 2);
55 typedef ci::MultiLevelHashSet<
58 typename ci::multilevel_hashset::make_traits<
59 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
60 , ci::opt::disposer< item_disposer >
63 test_rcu<set_type2, std::hash<hash_type>>(4, 2);
67 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_hash128()
69 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
70 typedef hash128 hash_type;
72 struct traits: public ci::multilevel_hashset::traits
74 typedef get_hash<hash_type> hash_accessor;
75 typedef item_disposer disposer;
76 typedef hash128::less less;
78 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
79 static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
80 test_rcu<set_type, hash128::make>(4, 2);
82 typedef ci::MultiLevelHashSet<
85 typename ci::multilevel_hashset::make_traits<
86 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
87 , ci::opt::disposer< item_disposer >
88 , ci::opt::less< hash_type::less >
91 test_rcu<set_type2, hash128::make>(4, 2);
95 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_nohash_stat()
97 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
98 typedef size_t key_type;
100 struct traits : public ci::multilevel_hashset::traits
102 typedef get_key<key_type> hash_accessor;
103 typedef item_disposer disposer;
104 typedef ci::multilevel_hashset::stat<> stat;
106 typedef ci::MultiLevelHashSet< rcu_type, Item<key_type>, traits > set_type;
107 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
108 test_rcu<set_type, nohash<key_type>>(4, 2);
110 typedef ci::MultiLevelHashSet<
113 typename ci::multilevel_hashset::make_traits<
114 ci::multilevel_hashset::hash_accessor< get_key<key_type>>
115 , ci::opt::disposer< item_disposer >
116 , co::stat< ci::multilevel_hashset::stat<>>
119 test_rcu<set_type2, nohash<key_type>>(4, 2);
123 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_stdhash_stat()
125 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
126 typedef size_t hash_type;
128 struct traits: public ci::multilevel_hashset::traits
130 typedef get_hash<hash_type> hash_accessor;
131 typedef item_disposer disposer;
132 typedef ci::multilevel_hashset::stat<> stat;
134 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
135 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
136 test_rcu<set_type, std::hash<hash_type>>(4, 2);
138 typedef ci::MultiLevelHashSet<
141 typename ci::multilevel_hashset::make_traits<
142 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
143 , ci::opt::disposer< item_disposer >
144 ,co::stat< ci::multilevel_hashset::stat<>>
147 test_rcu<set_type2, std::hash<hash_type>>(4, 2);
151 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_hash128_stat()
153 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
154 typedef hash128 hash_type;
156 struct traits: public ci::multilevel_hashset::traits
158 typedef get_hash<hash_type> hash_accessor;
159 typedef item_disposer disposer;
160 typedef hash128::cmp compare;
161 typedef ci::multilevel_hashset::stat<> stat;
163 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
164 static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
165 test_rcu<set_type, hash_type::make>(4, 2);
167 typedef ci::MultiLevelHashSet<
170 typename ci::multilevel_hashset::make_traits<
171 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
172 , ci::opt::disposer< item_disposer >
173 ,co::stat< ci::multilevel_hashset::stat<>>
174 ,co::compare< hash128::cmp >
177 test_rcu<set_type2, hash_type::make>(4, 2);
181 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_nohash_5_3()
183 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
184 typedef size_t key_type;
186 struct traits : public ci::multilevel_hashset::traits
188 typedef get_key<key_type> hash_accessor;
189 typedef item_disposer disposer;
191 typedef ci::MultiLevelHashSet< rcu_type, Item<key_type>, traits > set_type;
192 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
193 test_rcu<set_type, nohash<key_type>>(5, 3);
195 typedef ci::MultiLevelHashSet<
198 typename ci::multilevel_hashset::make_traits<
199 ci::multilevel_hashset::hash_accessor< get_key<key_type>>
200 , ci::opt::disposer< item_disposer >
203 test_rcu<set_type2, nohash<key_type>>(5, 3);
207 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_stdhash_5_3()
209 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
210 typedef size_t hash_type;
212 struct traits: public ci::multilevel_hashset::traits
214 typedef get_hash<hash_type> hash_accessor;
215 typedef item_disposer disposer;
217 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
218 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
219 test_rcu<set_type, std::hash<hash_type>>(5, 3);
221 typedef ci::MultiLevelHashSet<
224 typename ci::multilevel_hashset::make_traits<
225 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
226 , ci::opt::disposer< item_disposer >
229 test_rcu<set_type2, std::hash<hash_type>>(5, 3);
233 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_hash128_4_3()
235 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
236 typedef hash128 hash_type;
238 struct traits: public ci::multilevel_hashset::traits
240 typedef get_hash<hash_type> hash_accessor;
241 typedef item_disposer disposer;
242 typedef co::v::sequential_consistent memory_model;
244 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
245 static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
246 test_rcu<set_type, hash128::make >(4, 3);
248 typedef ci::MultiLevelHashSet<
251 typename ci::multilevel_hashset::make_traits<
252 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
253 , ci::opt::disposer< item_disposer >
254 ,co::memory_model< co::v::sequential_consistent >
257 test_rcu<set_type2, hash128::make >(4, 3);
261 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_nohash_5_3_stat()
263 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
264 typedef size_t key_type;
266 struct traits: public ci::multilevel_hashset::traits
268 typedef get_key<key_type> hash_accessor;
269 typedef item_disposer disposer;
270 typedef ci::multilevel_hashset::stat<> stat;
272 typedef ci::MultiLevelHashSet< rcu_type, Item<key_type>, traits > set_type;
273 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
274 test_rcu<set_type, nohash<key_type>>(5, 3);
276 typedef ci::MultiLevelHashSet<
279 typename ci::multilevel_hashset::make_traits<
280 ci::multilevel_hashset::hash_accessor< get_key<key_type>>
281 , ci::opt::disposer< item_disposer >
282 ,co::stat< ci::multilevel_hashset::stat<>>
285 test_rcu<set_type2, nohash<key_type>>(5, 3);
289 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_stdhash_5_3_stat()
291 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
292 typedef size_t hash_type;
294 struct traits: public ci::multilevel_hashset::traits
296 typedef get_hash<hash_type> hash_accessor;
297 typedef item_disposer disposer;
298 typedef ci::multilevel_hashset::stat<> stat;
300 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
301 static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
302 test_rcu<set_type, std::hash<hash_type>>(5, 3);
304 typedef ci::MultiLevelHashSet<
307 typename ci::multilevel_hashset::make_traits<
308 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
309 , ci::opt::disposer< item_disposer >
310 ,co::stat< ci::multilevel_hashset::stat<>>
313 test_rcu<set_type2, std::hash<hash_type>>(5, 3);
317 void IntrusiveMultiLevelHashSetHdrTest::rcu_shb_hash128_4_3_stat()
319 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
320 typedef hash128 hash_type;
322 struct traits: public ci::multilevel_hashset::traits
324 typedef get_hash<hash_type> hash_accessor;
325 typedef item_disposer disposer;
326 typedef ci::multilevel_hashset::stat<> stat;
327 typedef hash128::less less;
328 typedef hash128::cmp compare;
330 typedef ci::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
331 static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
332 test_rcu<set_type, hash_type::make>(4, 3);
334 typedef ci::MultiLevelHashSet<
337 typename ci::multilevel_hashset::make_traits<
338 ci::multilevel_hashset::hash_accessor< get_hash<hash_type>>
339 , ci::opt::disposer< item_disposer >
340 , co::stat< ci::multilevel_hashset::stat<>>
341 , co::less< hash_type::less >
342 , co::compare< hash128::cmp >
345 test_rcu<set_type2, hash_type::make>(4, 3);