3 #include "set/hdr_intrusive_set.h"
4 #include <cds/intrusive/lazy_list_hp.h>
5 #include <cds/intrusive/split_list.h>
9 void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmp_lazy()
11 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
12 typedef ci::LazyList< cds::gc::HP
14 ,ci::lazy_list::make_traits<
15 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
16 ,co::compare< cmp<item> >
17 ,ci::opt::disposer< faked_disposer >
18 ,ci::opt::back_off< cds::backoff::empty >
22 typedef ci::SplitListSet< cds::gc::HP, ord_list,
23 ci::split_list::make_traits<
25 ,ci::split_list::dynamic_bucket_table<true>
26 ,co::memory_model<co::v::relaxed_ordering>
29 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
34 void IntrusiveHashSetHdrTest::split_dyn_HP_base_less_lazy()
36 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
37 typedef ci::LazyList< cds::gc::HP
39 ,ci::lazy_list::make_traits<
40 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
41 ,co::less< less<item> >
42 ,ci::opt::disposer< faked_disposer >
46 typedef ci::SplitListSet< cds::gc::HP, ord_list,
47 ci::split_list::make_traits<
49 ,co::memory_model<co::v::sequential_consistent>
52 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
57 void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmpmix_lazy()
59 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
60 typedef ci::LazyList< cds::gc::HP
62 ,ci::lazy_list::make_traits<
63 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
64 ,co::less< less<item> >
65 ,co::compare< cmp<item> >
66 ,ci::opt::disposer< faked_disposer >
70 typedef ci::SplitListSet< cds::gc::HP, ord_list,
71 ci::split_list::make_traits<
73 ,co::item_counter< simple_item_counter >
74 ,ci::split_list::dynamic_bucket_table<true>
77 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
82 void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmpmix_stat_lazy()
84 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
85 typedef ci::LazyList< cds::gc::HP
87 ,ci::lazy_list::make_traits<
88 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
89 ,co::less< less<item> >
90 ,co::compare< cmp<item> >
91 ,ci::opt::disposer< faked_disposer >
95 typedef ci::SplitListSet< cds::gc::HP, ord_list,
96 ci::split_list::make_traits<
98 ,co::item_counter< simple_item_counter >
99 ,ci::split_list::dynamic_bucket_table<true>
100 ,co::stat< ci::split_list::stat<> >
103 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
108 void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmp_lazy()
110 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
111 typedef ci::LazyList< cds::gc::HP
113 ,ci::lazy_list::make_traits<
114 ci::opt::hook< ci::lazy_list::member_hook<
115 offsetof( item, hMember ),
118 ,co::compare< cmp<item> >
119 ,ci::opt::disposer< faked_disposer >
123 typedef ci::SplitListSet< cds::gc::HP, ord_list,
124 ci::split_list::make_traits<
126 ,co::memory_model<co::v::relaxed_ordering>
129 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
134 void IntrusiveHashSetHdrTest::split_dyn_HP_member_less_lazy()
136 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
137 typedef ci::LazyList< cds::gc::HP
139 ,ci::lazy_list::make_traits<
140 ci::opt::hook< ci::lazy_list::member_hook<
141 offsetof( item, hMember ),
144 ,co::less< less<item> >
145 ,ci::opt::disposer< faked_disposer >
149 typedef ci::SplitListSet< cds::gc::HP, ord_list,
150 ci::split_list::make_traits<
152 ,co::memory_model<co::v::sequential_consistent>
155 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
160 void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmpmix_lazy()
162 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
163 typedef ci::LazyList< cds::gc::HP
165 ,ci::lazy_list::make_traits<
166 ci::opt::hook< ci::lazy_list::member_hook<
167 offsetof( item, hMember ),
170 ,co::compare< cmp<item> >
171 ,co::less< less<item> >
172 ,ci::opt::disposer< faked_disposer >
176 typedef ci::SplitListSet< cds::gc::HP, ord_list,
177 ci::split_list::make_traits<
179 ,co::item_counter< simple_item_counter >
182 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
187 void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmpmix_stat_lazy()
189 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
190 struct list_traits : public ci::lazy_list::traits
192 typedef ci::lazy_list::member_hook< offsetof( item, hMember ), co::gc<cds::gc::HP>> hook;
193 typedef cmp<item> compare;
194 typedef IntrusiveHashSetHdrTest::less<item> less;
195 typedef faked_disposer disposer;
197 typedef ci::LazyList< cds::gc::HP, item, list_traits > ord_list;
199 struct set_traits : public ci::split_list::traits
201 typedef hash_int hash;
202 typedef simple_item_counter item_counter;
203 typedef ci::split_list::stat<> stat;
205 typedef ci::SplitListSet< cds::gc::HP, ord_list, set_traits > set;
207 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
213 // Static bucket table
214 void IntrusiveHashSetHdrTest::split_st_HP_base_cmp_lazy()
216 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
217 typedef ci::LazyList< cds::gc::HP
219 ,ci::lazy_list::make_traits<
220 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
221 ,co::compare< cmp<item> >
222 ,ci::opt::disposer< faked_disposer >
226 typedef ci::SplitListSet< cds::gc::HP, ord_list,
227 ci::split_list::make_traits<
229 ,ci::split_list::dynamic_bucket_table<false>
230 ,co::memory_model<co::v::relaxed_ordering>
233 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
238 void IntrusiveHashSetHdrTest::split_st_HP_base_less_lazy()
240 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
241 typedef ci::LazyList< cds::gc::HP
243 ,ci::lazy_list::make_traits<
244 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
245 ,co::less< less<item> >
246 ,ci::opt::disposer< faked_disposer >
250 typedef ci::SplitListSet< cds::gc::HP, ord_list,
251 ci::split_list::make_traits<
253 ,ci::split_list::dynamic_bucket_table<false>
254 ,co::memory_model<co::v::sequential_consistent>
257 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
262 void IntrusiveHashSetHdrTest::split_st_HP_base_cmpmix_lazy()
264 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
265 typedef ci::LazyList< cds::gc::HP
267 ,ci::lazy_list::make_traits<
268 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
269 ,co::less< less<item> >
270 ,co::compare< cmp<item> >
271 ,ci::opt::disposer< faked_disposer >
275 typedef ci::SplitListSet< cds::gc::HP, ord_list,
276 ci::split_list::make_traits<
278 ,co::item_counter< simple_item_counter >
279 ,ci::split_list::dynamic_bucket_table<false>
282 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
287 void IntrusiveHashSetHdrTest::split_st_HP_base_cmpmix_stat_lazy()
289 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
291 public ci::lazy_list::make_traits<
292 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
293 ,co::less< less<item> >
294 ,co::compare< cmp<item> >
295 ,ci::opt::disposer< faked_disposer >
298 typedef ci::LazyList< cds::gc::HP, item, list_traits > ord_list;
301 public ci::split_list::make_traits<
303 ,co::item_counter< simple_item_counter >
304 ,ci::split_list::dynamic_bucket_table<false>
307 typedef ci::split_list::stat<> stat;
309 typedef ci::SplitListSet< cds::gc::HP, ord_list, set_traits > set;
311 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
316 void IntrusiveHashSetHdrTest::split_st_HP_member_cmp_lazy()
318 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
319 typedef ci::LazyList< cds::gc::HP
321 ,ci::lazy_list::make_traits<
322 ci::opt::hook< ci::lazy_list::member_hook<
323 offsetof( item, hMember ),
326 ,co::compare< cmp<item> >
327 ,ci::opt::disposer< faked_disposer >
331 typedef ci::SplitListSet< cds::gc::HP, ord_list,
332 ci::split_list::make_traits<
334 ,ci::split_list::dynamic_bucket_table<false>
335 ,co::memory_model<co::v::relaxed_ordering>
338 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
343 void IntrusiveHashSetHdrTest::split_st_HP_member_less_lazy()
345 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
346 typedef ci::LazyList< cds::gc::HP
348 ,ci::lazy_list::make_traits<
349 ci::opt::hook< ci::lazy_list::member_hook<
350 offsetof( item, hMember ),
353 ,co::less< less<item> >
354 ,ci::opt::disposer< faked_disposer >
358 typedef ci::SplitListSet< cds::gc::HP, ord_list,
359 ci::split_list::make_traits<
360 ci::split_list::dynamic_bucket_table<false>
361 ,co::hash< hash_int >
362 ,co::memory_model<co::v::sequential_consistent>
365 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
370 void IntrusiveHashSetHdrTest::split_st_HP_member_cmpmix_lazy()
372 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
373 typedef ci::LazyList< cds::gc::HP
375 ,ci::lazy_list::make_traits<
376 ci::opt::hook< ci::lazy_list::member_hook<
377 offsetof( item, hMember ),
380 ,co::compare< cmp<item> >
381 ,co::less< less<item> >
382 ,ci::opt::disposer< faked_disposer >
386 typedef ci::SplitListSet< cds::gc::HP, ord_list,
387 ci::split_list::make_traits<
389 ,co::item_counter< simple_item_counter >
390 ,ci::split_list::dynamic_bucket_table<false>
393 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
398 void IntrusiveHashSetHdrTest::split_st_HP_member_cmpmix_stat_lazy()
400 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
401 typedef ci::LazyList< cds::gc::HP
403 ,ci::lazy_list::make_traits<
404 ci::opt::hook< ci::lazy_list::member_hook<
405 offsetof( item, hMember ),
408 ,co::compare< cmp<item> >
409 ,co::less< less<item> >
410 ,ci::opt::disposer< faked_disposer >
414 typedef ci::SplitListSet< cds::gc::HP, ord_list,
415 ci::split_list::make_traits<
417 ,co::item_counter< simple_item_counter >
418 ,ci::split_list::dynamic_bucket_table<false>
419 ,co::stat< ci::split_list::stat<> >
423 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );