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