MultiLevelHashSet test, bugfixing
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_rcu_sht.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_intrusive_skiplist_set_rcu.h"
4
5 #include <cds/urcu/signal_threaded.h>
6 #include <cds/intrusive/skip_list_rcu.h>
7 #include "map/print_skiplist_stat.h"
8
9 namespace set {
10 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
11     namespace {
12         typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
13     }
14 #endif
15
16     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp()
17     {
18 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
19         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
20
21         typedef ci::SkipListSet< rcu_type, item,
22             ci::skip_list::make_traits<
23                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
24                 ,co::compare< cmp<item> >
25                 ,ci::opt::disposer< faked_disposer >
26                 ,co::item_counter< cds::atomicity::item_counter >
27             >::type
28         >   set_type;
29
30         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
31 #endif
32     }
33
34     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less()
35     {
36 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
37         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
38
39         typedef ci::SkipListSet< rcu_type, item,
40             ci::skip_list::make_traits<
41                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
42                 ,co::less< less<item> >
43                 ,ci::opt::disposer< faked_disposer >
44                 ,co::item_counter< cds::atomicity::item_counter >
45             >::type
46         >   set_type;
47
48         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
49 #endif
50     }
51
52     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix()
53     {
54 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
55         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
56
57         typedef ci::SkipListSet< rcu_type, item,
58             ci::skip_list::make_traits<
59                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
60                 ,co::less< less<item> >
61                 ,ci::opt::disposer< faked_disposer >
62                 ,co::item_counter< cds::atomicity::item_counter >
63                 ,co::compare< cmp<item> >
64             >::type
65         >   set_type;
66
67         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
68 #endif
69     }
70
71     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_stat()
72     {
73 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
74         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
75
76         typedef ci::SkipListSet< rcu_type, item,
77             ci::skip_list::make_traits<
78                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
79                 ,co::compare< cmp<item> >
80                 ,ci::opt::disposer< faked_disposer >
81                 ,co::stat< ci::skip_list::stat<> >
82                 ,co::item_counter< cds::atomicity::item_counter >
83             >::type
84         >   set_type;
85
86         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
87 #endif
88     }
89
90     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_stat()
91     {
92 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
93         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
94
95         typedef ci::SkipListSet< rcu_type, item,
96             ci::skip_list::make_traits<
97                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
98                 ,co::less< less<item> >
99                 ,co::item_counter< cds::atomicity::item_counter >
100                 ,ci::opt::disposer< faked_disposer >
101                 ,co::stat< ci::skip_list::stat<> >
102             >::type
103         >   set_type;
104
105         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
106 #endif
107     }
108
109     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_stat()
110     {
111 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
112         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
113
114         typedef ci::SkipListSet< rcu_type, item,
115             ci::skip_list::make_traits<
116                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
117                 ,co::less< less<item> >
118                 ,ci::opt::disposer< faked_disposer >
119                 ,co::compare< cmp<item> >
120                 ,co::stat< ci::skip_list::stat<> >
121                 ,co::item_counter< cds::atomicity::item_counter >
122             >::type
123         >   set_type;
124
125         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
126 #endif
127     }
128
129     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_xorshift()
130     {
131 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
132         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
133
134         typedef ci::SkipListSet< rcu_type, item,
135             ci::skip_list::make_traits<
136                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
137                 ,co::compare< cmp<item> >
138                 ,co::item_counter< cds::atomicity::item_counter >
139                 ,ci::opt::disposer< faked_disposer >
140                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
141             >::type
142         >   set_type;
143
144         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
145 #endif
146     }
147
148     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_xorshift()
149     {
150 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
151         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
152
153         typedef ci::SkipListSet< rcu_type, item,
154             ci::skip_list::make_traits<
155                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
156                 ,co::less< less<item> >
157                 ,ci::opt::disposer< faked_disposer >
158                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
159                 ,co::item_counter< cds::atomicity::item_counter >
160             >::type
161         >   set_type;
162
163         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
164 #endif
165     }
166
167     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_xorshift()
168     {
169 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
170         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
171
172         typedef ci::SkipListSet< rcu_type, item,
173             ci::skip_list::make_traits<
174                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
175                 ,co::less< less<item> >
176                 ,ci::opt::disposer< faked_disposer >
177                 ,co::compare< cmp<item> >
178                 ,co::item_counter< cds::atomicity::item_counter >
179                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
180             >::type
181         >   set_type;
182
183         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
184 #endif
185     }
186
187     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_xorshift_stat()
188     {
189 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
190         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
191
192         typedef ci::SkipListSet< rcu_type, item,
193             ci::skip_list::make_traits<
194                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
195                 ,co::compare< cmp<item> >
196                 ,co::item_counter< cds::atomicity::item_counter >
197                 ,ci::opt::disposer< faked_disposer >
198                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
199                 ,co::stat< ci::skip_list::stat<> >
200             >::type
201         >   set_type;
202
203         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
204 #endif
205     }
206
207     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_xorshift_stat()
208     {
209 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
210         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
211
212         typedef ci::SkipListSet< rcu_type, item,
213             ci::skip_list::make_traits<
214                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
215                 ,co::less< less<item> >
216                 ,ci::opt::disposer< faked_disposer >
217                 ,co::item_counter< cds::atomicity::item_counter >
218                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
219                 ,co::stat< ci::skip_list::stat<> >
220             >::type
221         >   set_type;
222
223         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
224 #endif
225     }
226
227     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_xorshift_stat()
228     {
229 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
230         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
231
232         typedef ci::SkipListSet< rcu_type, item,
233             ci::skip_list::make_traits<
234                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
235                 ,co::less< less<item> >
236                 ,co::item_counter< cds::atomicity::item_counter >
237                 ,ci::opt::disposer< faked_disposer >
238                 ,co::compare< cmp<item> >
239                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
240                 ,co::stat< ci::skip_list::stat<> >
241             >::type
242         >   set_type;
243
244         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
245 #endif
246     }
247
248
249     //*********
250     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_pascal()
251     {
252 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
253         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
254
255         typedef ci::SkipListSet< rcu_type, item,
256             ci::skip_list::make_traits<
257                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
258                 ,co::compare< cmp<item> >
259                 ,co::item_counter< cds::atomicity::item_counter >
260                 ,ci::opt::disposer< faked_disposer >
261                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
262             >::type
263         >   set_type;
264
265         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
266 #endif
267     }
268
269     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_pascal()
270     {
271 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
272         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
273
274         typedef ci::SkipListSet< rcu_type, item,
275             ci::skip_list::make_traits<
276                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
277                 ,co::less< less<item> >
278                 ,co::item_counter< cds::atomicity::item_counter >
279                 ,ci::opt::disposer< faked_disposer >
280                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
281             >::type
282         >   set_type;
283
284         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
285 #endif
286     }
287
288     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_pascal()
289     {
290 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
291         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
292
293         typedef ci::SkipListSet< rcu_type, item,
294             ci::skip_list::make_traits<
295                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
296                 ,co::less< less<item> >
297                 ,ci::opt::disposer< faked_disposer >
298                 ,co::compare< cmp<item> >
299                 ,co::item_counter< cds::atomicity::item_counter >
300                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
301             >::type
302         >   set_type;
303
304         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
305 #endif
306     }
307
308     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_pascal_stat()
309     {
310 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
311         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
312
313         typedef ci::SkipListSet< rcu_type, item,
314             ci::skip_list::make_traits<
315                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
316                 ,co::compare< cmp<item> >
317                 ,ci::opt::disposer< faked_disposer >
318                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
319                 ,co::stat< ci::skip_list::stat<> >
320                 ,co::item_counter< cds::atomicity::item_counter >
321             >::type
322         >   set_type;
323
324         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
325 #endif
326     }
327
328     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_pascal_stat()
329     {
330 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
331         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
332
333         typedef ci::SkipListSet< rcu_type, item,
334             ci::skip_list::make_traits<
335                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
336                 ,co::less< less<item> >
337                 ,ci::opt::disposer< faked_disposer >
338                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
339                 ,co::stat< ci::skip_list::stat<> >
340                 ,co::item_counter< cds::atomicity::item_counter >
341             >::type
342         >   set_type;
343
344         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
345 #endif
346     }
347
348     void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_pascal_stat()
349     {
350 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
351         typedef base_int_item< ci::skip_list::node< rcu_type> > item;
352
353         typedef ci::SkipListSet< rcu_type, item,
354             ci::skip_list::make_traits<
355                 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
356                 ,co::less< less<item> >
357                 ,ci::opt::disposer< faked_disposer >
358                 ,co::compare< cmp<item> >
359                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
360                 ,co::stat< ci::skip_list::stat<> >
361                 ,co::item_counter< cds::atomicity::item_counter >
362             >::type
363         >   set_type;
364
365         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
366 #endif
367     }
368
369 }   // namespace set