3 #include "set/hdr_intrusive_set.h"
4 #include <cds/intrusive/lazy_list_nogc.h>
5 #include <cds/intrusive/split_list_nogc.h>
9 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmp_lazy()
11 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
12 typedef ci::LazyList< cds::gc::nogc
14 ,ci::lazy_list::make_traits<
15 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
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::nogc, bucket_type,
23 ci::split_list::make_traits<
25 ,ci::split_list::dynamic_bucket_table<true>
26 ,co::memory_model<co::v::relaxed_ordering>
33 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_less_lazy()
35 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
36 typedef ci::LazyList< cds::gc::nogc
38 ,ci::lazy_list::make_traits<
39 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
40 ,co::less< less<item> >
41 ,ci::opt::disposer< faked_disposer >
45 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
46 ci::split_list::make_traits<
48 ,ci::split_list::dynamic_bucket_table<true>
49 ,co::memory_model<co::v::sequential_consistent>
56 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix_lazy()
58 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
59 typedef ci::LazyList< cds::gc::nogc
61 ,ci::lazy_list::make_traits<
62 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
63 ,co::less< less<item> >
64 ,co::compare< cmp<item> >
65 ,ci::opt::disposer< faked_disposer >
69 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
70 ci::split_list::make_traits<
72 ,co::item_counter< simple_item_counter >
73 ,ci::split_list::dynamic_bucket_table<true>
80 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix_stat_lazy()
82 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
83 struct list_traits : public ci::lazy_list::traits
85 typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
86 typedef IntrusiveHashSetHdrTest::less<item> less;
87 typedef cmp<item> compare;
88 typedef faked_disposer disposer;
90 typedef ci::LazyList< cds::gc::nogc, item, list_traits > bucket_type;
92 struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
94 typedef hash_int hash;
95 typedef simple_item_counter item_counter;
96 typedef ci::split_list::stat<> stat;
98 typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
100 test_int_nogc<set>();
103 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmp_lazy()
105 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
106 typedef ci::LazyList< cds::gc::nogc
108 ,ci::lazy_list::make_traits<
109 ci::opt::hook< ci::lazy_list::member_hook<
110 offsetof( item, hMember ),
111 co::gc<cds::gc::nogc>
113 ,co::compare< cmp<item> >
114 ,ci::opt::disposer< faked_disposer >
118 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
119 ci::split_list::make_traits<
121 ,ci::split_list::dynamic_bucket_table<true>
122 ,co::memory_model<co::v::relaxed_ordering>
126 test_int_nogc<set>();
129 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_less_lazy()
131 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
132 typedef ci::LazyList< cds::gc::nogc
134 ,ci::lazy_list::make_traits<
135 ci::opt::hook< ci::lazy_list::member_hook<
136 offsetof( item, hMember ),
137 co::gc<cds::gc::nogc>
139 ,co::less< less<item> >
140 ,ci::opt::disposer< faked_disposer >
144 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
145 ci::split_list::make_traits<
147 ,ci::split_list::dynamic_bucket_table<true>
148 ,co::memory_model<co::v::sequential_consistent>
152 test_int_nogc<set>();
155 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix_lazy()
157 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
158 typedef ci::LazyList< cds::gc::nogc
160 ,ci::lazy_list::make_traits<
161 ci::opt::hook< ci::lazy_list::member_hook<
162 offsetof( item, hMember ),
163 co::gc<cds::gc::nogc>
165 ,co::compare< cmp<item> >
166 ,co::less< less<item> >
167 ,ci::opt::disposer< faked_disposer >
171 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
172 ci::split_list::make_traits<
174 ,co::item_counter< simple_item_counter >
175 ,ci::split_list::dynamic_bucket_table<true>
179 test_int_nogc<set>();
182 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix_stat_lazy()
184 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
186 public ci::lazy_list::make_traits<
187 ci::opt::hook< ci::lazy_list::member_hook<
188 offsetof( item, hMember ),
189 co::gc<cds::gc::nogc>
191 ,co::compare< cmp<item> >
192 ,co::less< less<item> >
193 ,ci::opt::disposer< faked_disposer >
196 typedef ci::LazyList< cds::gc::nogc, item, list_traits > bucket_type;
199 public ci::split_list::make_traits<
201 ,co::item_counter< simple_item_counter >
202 ,ci::split_list::dynamic_bucket_table<true>
203 ,co::stat< ci::split_list::stat<> >
206 typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
208 test_int_nogc<set>();
211 // Static bucket table
212 void IntrusiveHashSetHdrTest::split_st_nogc_base_cmp_lazy()
214 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
215 typedef ci::LazyList< cds::gc::nogc
217 ,ci::lazy_list::make_traits<
218 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
219 ,co::compare< cmp<item> >
220 ,ci::opt::disposer< faked_disposer >
224 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
225 ci::split_list::make_traits<
227 ,ci::split_list::dynamic_bucket_table<false>
228 ,co::memory_model<co::v::relaxed_ordering>
232 test_int_nogc<set>();
235 void IntrusiveHashSetHdrTest::split_st_nogc_base_less_lazy()
237 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
238 typedef ci::LazyList< cds::gc::nogc
240 ,ci::lazy_list::make_traits<
241 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
242 ,co::less< less<item> >
243 ,ci::opt::disposer< faked_disposer >
247 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
248 ci::split_list::make_traits<
250 ,ci::split_list::dynamic_bucket_table<false>
251 ,co::memory_model<co::v::sequential_consistent>
255 test_int_nogc<set>();
258 void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix_lazy()
260 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
261 typedef ci::LazyList< cds::gc::nogc
263 ,ci::lazy_list::make_traits<
264 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
265 ,co::less< less<item> >
266 ,co::compare< cmp<item> >
267 ,ci::opt::disposer< faked_disposer >
271 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
272 ci::split_list::make_traits<
274 ,co::item_counter< simple_item_counter >
275 ,ci::split_list::dynamic_bucket_table<false>
279 test_int_nogc<set>();
282 void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix_stat_lazy()
284 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
285 typedef ci::LazyList< cds::gc::nogc
287 ,ci::lazy_list::make_traits<
288 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
289 ,co::less< less<item> >
290 ,co::compare< cmp<item> >
291 ,ci::opt::disposer< faked_disposer >
295 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
296 ci::split_list::make_traits<
298 ,co::item_counter< simple_item_counter >
299 ,ci::split_list::dynamic_bucket_table<false>
300 ,co::stat< ci::split_list::stat<> >
304 test_int_nogc<set>();
307 void IntrusiveHashSetHdrTest::split_st_nogc_member_cmp_lazy()
309 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
310 typedef ci::LazyList< cds::gc::nogc
312 ,ci::lazy_list::make_traits<
313 ci::opt::hook< ci::lazy_list::member_hook<
314 offsetof( item, hMember ),
315 co::gc<cds::gc::nogc>
317 ,co::compare< cmp<item> >
318 ,ci::opt::disposer< faked_disposer >
322 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
323 ci::split_list::make_traits<
325 ,ci::split_list::dynamic_bucket_table<false>
326 ,co::memory_model<co::v::relaxed_ordering>
330 test_int_nogc<set>();
333 void IntrusiveHashSetHdrTest::split_st_nogc_member_less_lazy()
335 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
336 typedef ci::LazyList< cds::gc::nogc
338 ,ci::lazy_list::make_traits<
339 ci::opt::hook< ci::lazy_list::member_hook<
340 offsetof( item, hMember ),
341 co::gc<cds::gc::nogc>
343 ,co::less< less<item> >
344 ,ci::opt::disposer< faked_disposer >
348 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
349 ci::split_list::make_traits<
351 ,ci::split_list::dynamic_bucket_table<false>
352 ,co::memory_model<co::v::sequential_consistent>
356 test_int_nogc<set>();
359 void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix_lazy()
361 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
362 typedef ci::LazyList< cds::gc::nogc
364 ,ci::lazy_list::make_traits<
365 ci::opt::hook< ci::lazy_list::member_hook<
366 offsetof( item, hMember ),
367 co::gc<cds::gc::nogc>
369 ,co::compare< cmp<item> >
370 ,co::less< less<item> >
371 ,ci::opt::disposer< faked_disposer >
375 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
376 ci::split_list::make_traits<
378 ,co::item_counter< simple_item_counter >
379 ,ci::split_list::dynamic_bucket_table<false>
383 test_int_nogc<set>();
386 void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix_stat_lazy()
388 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
389 typedef ci::LazyList< cds::gc::nogc
391 ,ci::lazy_list::make_traits<
392 ci::opt::hook< ci::lazy_list::member_hook<
393 offsetof( item, hMember ),
394 co::gc<cds::gc::nogc>
396 ,co::compare< cmp<item> >
397 ,co::less< less<item> >
398 ,ci::opt::disposer< faked_disposer >
402 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
403 ci::split_list::make_traits<
405 ,co::item_counter< simple_item_counter >
406 ,ci::split_list::dynamic_bucket_table<false>
407 ,co::stat< ci::split_list::stat<> >
411 test_int_nogc<set>();