3 #include "set/hdr_intrusive_set.h"
4 #include <cds/intrusive/michael_list_nogc.h>
5 #include <cds/intrusive/split_list_nogc.h>
9 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmp()
11 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
12 typedef ci::MichaelList< cds::gc::nogc
14 ,ci::michael_list::make_traits<
15 ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
16 ,co::compare< cmp<item> >
17 ,ci::opt::disposer< faked_disposer >
21 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
22 ci::split_list::make_traits<
24 ,ci::split_list::dynamic_bucket_table<true>
25 ,co::memory_model<co::v::relaxed_ordering>
32 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_less()
34 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
35 typedef ci::MichaelList< cds::gc::nogc
37 ,ci::michael_list::make_traits<
38 ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
39 ,co::less< less<item> >
40 ,ci::opt::disposer< faked_disposer >
44 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
45 ci::split_list::make_traits<
47 ,ci::split_list::dynamic_bucket_table<true>
48 ,co::memory_model<co::v::sequential_consistent>
55 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix()
57 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
58 typedef ci::MichaelList< cds::gc::nogc
60 ,ci::michael_list::make_traits<
61 ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
62 ,co::less< less<item> >
63 ,co::compare< cmp<item> >
64 ,ci::opt::disposer< faked_disposer >
68 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
69 ci::split_list::make_traits<
71 ,co::item_counter< simple_item_counter >
72 ,ci::split_list::dynamic_bucket_table<true>
79 void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix_stat()
81 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
82 struct list_traits : public ci::michael_list::traits
84 typedef ci::michael_list::base_hook< co::gc<cds::gc::nogc> > hook;
85 typedef cmp<item> compare;
86 typedef IntrusiveHashSetHdrTest::less<item> less;
87 typedef faked_disposer disposer;
89 typedef ci::MichaelList< cds::gc::nogc, item, list_traits > bucket_type;
91 struct set_traits : public ci::split_list::make_traits< ci::split_list::dynamic_bucket_table<true> >::type
93 typedef hash_int hash;
94 typedef simple_item_counter item_counter;
95 typedef ci::split_list::stat<> stat;
97 typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
102 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmp()
104 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
105 typedef ci::MichaelList< cds::gc::nogc
107 ,ci::michael_list::make_traits<
108 ci::opt::hook< ci::michael_list::member_hook<
109 offsetof( item, hMember ),
110 co::gc<cds::gc::nogc>
112 ,co::compare< cmp<item> >
113 ,ci::opt::disposer< faked_disposer >
117 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
118 ci::split_list::make_traits<
120 ,ci::split_list::dynamic_bucket_table<true>
121 ,co::memory_model<co::v::relaxed_ordering>
125 test_int_nogc<set>();
128 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_less()
130 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
131 typedef ci::MichaelList< cds::gc::nogc
133 ,ci::michael_list::make_traits<
134 ci::opt::hook< ci::michael_list::member_hook<
135 offsetof( item, hMember ),
136 co::gc<cds::gc::nogc>
138 ,co::less< less<item> >
139 ,ci::opt::disposer< faked_disposer >
143 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
144 ci::split_list::make_traits<
146 ,ci::split_list::dynamic_bucket_table<true>
147 ,co::memory_model<co::v::sequential_consistent>
151 test_int_nogc<set>();
154 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix()
156 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
157 typedef ci::MichaelList< cds::gc::nogc
159 ,ci::michael_list::make_traits<
160 ci::opt::hook< ci::michael_list::member_hook<
161 offsetof( item, hMember ),
162 co::gc<cds::gc::nogc>
164 ,co::compare< cmp<item> >
165 ,co::less< less<item> >
166 ,ci::opt::disposer< faked_disposer >
170 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
171 ci::split_list::make_traits<
173 ,co::item_counter< simple_item_counter >
174 ,ci::split_list::dynamic_bucket_table<true>
178 test_int_nogc<set>();
181 void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix_stat()
183 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
185 public ci::michael_list::make_traits<
186 ci::opt::hook< ci::michael_list::member_hook<
187 offsetof( item, hMember ),
188 co::gc<cds::gc::nogc>
190 ,co::compare< cmp<item> >
191 ,co::less< less<item> >
192 ,ci::opt::disposer< faked_disposer >
195 typedef ci::MichaelList< cds::gc::nogc, item, list_traits > bucket_type;
198 public ci::split_list::make_traits<
200 ,co::item_counter< simple_item_counter >
201 ,ci::split_list::dynamic_bucket_table<true>
202 ,co::stat< ci::split_list::stat<> >
205 typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
207 test_int_nogc<set>();
210 // Static bucket table
211 void IntrusiveHashSetHdrTest::split_st_nogc_base_cmp()
213 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
214 typedef ci::MichaelList< cds::gc::nogc
216 ,ci::michael_list::make_traits<
217 ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
218 ,co::compare< cmp<item> >
219 ,ci::opt::disposer< faked_disposer >
223 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
224 ci::split_list::make_traits<
226 ,ci::split_list::dynamic_bucket_table<false>
227 ,co::memory_model<co::v::relaxed_ordering>
231 test_int_nogc<set>();
234 void IntrusiveHashSetHdrTest::split_st_nogc_base_less()
236 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
237 typedef ci::MichaelList< cds::gc::nogc
239 ,ci::michael_list::make_traits<
240 ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
241 ,co::less< less<item> >
242 ,ci::opt::disposer< faked_disposer >
246 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
247 ci::split_list::make_traits<
249 ,ci::split_list::dynamic_bucket_table<false>
250 ,co::memory_model<co::v::sequential_consistent>
254 test_int_nogc<set>();
257 void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix()
259 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
260 typedef ci::MichaelList< cds::gc::nogc
262 ,ci::michael_list::make_traits<
263 ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
264 ,co::less< less<item> >
265 ,co::compare< cmp<item> >
266 ,ci::opt::disposer< faked_disposer >
270 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
271 ci::split_list::make_traits<
273 ,co::item_counter< simple_item_counter >
274 ,ci::split_list::dynamic_bucket_table<false>
278 test_int_nogc<set>();
281 void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix_stat()
283 typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
284 typedef ci::MichaelList< cds::gc::nogc
286 ,ci::michael_list::make_traits<
287 ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
288 ,co::less< less<item> >
289 ,co::compare< cmp<item> >
290 ,ci::opt::disposer< faked_disposer >
294 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
295 ci::split_list::make_traits<
297 ,co::item_counter< simple_item_counter >
298 ,ci::split_list::dynamic_bucket_table<false>
299 ,co::stat< ci::split_list::stat<> >
303 test_int_nogc<set>();
306 void IntrusiveHashSetHdrTest::split_st_nogc_member_cmp()
308 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
309 typedef ci::MichaelList< cds::gc::nogc
311 ,ci::michael_list::make_traits<
312 ci::opt::hook< ci::michael_list::member_hook<
313 offsetof( item, hMember ),
314 co::gc<cds::gc::nogc>
316 ,co::compare< cmp<item> >
317 ,ci::opt::disposer< faked_disposer >
321 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
322 ci::split_list::make_traits<
324 ,ci::split_list::dynamic_bucket_table<false>
325 ,co::memory_model<co::v::sequential_consistent>
329 test_int_nogc<set>();
332 void IntrusiveHashSetHdrTest::split_st_nogc_member_less()
334 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
335 typedef ci::MichaelList< cds::gc::nogc
337 ,ci::michael_list::make_traits<
338 ci::opt::hook< ci::michael_list::member_hook<
339 offsetof( item, hMember ),
340 co::gc<cds::gc::nogc>
342 ,co::less< less<item> >
343 ,ci::opt::disposer< faked_disposer >
347 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
348 ci::split_list::make_traits<
350 ,ci::split_list::dynamic_bucket_table<false>
351 ,co::memory_model<co::v::relaxed_ordering>
355 test_int_nogc<set>();
358 void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix()
360 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
361 typedef ci::MichaelList< cds::gc::nogc
363 ,ci::michael_list::make_traits<
364 ci::opt::hook< ci::michael_list::member_hook<
365 offsetof( item, hMember ),
366 co::gc<cds::gc::nogc>
368 ,co::compare< cmp<item> >
369 ,co::less< less<item> >
370 ,ci::opt::disposer< faked_disposer >
374 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
375 ci::split_list::make_traits<
377 ,co::item_counter< simple_item_counter >
378 ,ci::split_list::dynamic_bucket_table<false>
382 test_int_nogc<set>();
385 void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix_stat()
387 typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
388 typedef ci::MichaelList< cds::gc::nogc
390 ,ci::michael_list::make_traits<
391 ci::opt::hook< ci::michael_list::member_hook<
392 offsetof( item, hMember ),
393 co::gc<cds::gc::nogc>
395 ,co::compare< cmp<item> >
396 ,co::less< less<item> >
397 ,ci::opt::disposer< faked_disposer >
401 typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
402 ci::split_list::make_traits<
404 ,co::item_counter< simple_item_counter >
405 ,ci::split_list::dynamic_bucket_table<false>
406 ,co::stat< ci::split_list::stat<> >
410 test_int_nogc<set>();