Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_rcu_shb_member.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 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
11     namespace {
12         typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
13     }
14 #endif
15
16     void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp()
17     {
18 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
19         typedef member_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::member_hook< offsetof(item, hMember), 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_shb_member_less()
35     {
36 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
37         typedef member_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::member_hook< offsetof(item, hMember), 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_shb_member_cmpmix()
53     {
54 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
55         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
60                 ,co::less< less<item> >
61                 ,ci::opt::disposer< faked_disposer >
62                 ,co::compare< cmp<item> >
63                 ,co::item_counter< cds::atomicity::item_counter >
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_shb_member_cmp_stat()
72     {
73 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
74         typedef member_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::member_hook< offsetof(item, hMember), 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_shb_member_less_stat()
91     {
92 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
93         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
98                 ,co::less< less<item> >
99                 ,ci::opt::disposer< faked_disposer >
100                 ,co::stat< ci::skip_list::stat<> >
101                 ,co::item_counter< cds::atomicity::item_counter >
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_shb_member_cmpmix_stat()
110     {
111 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
112         typedef member_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::member_hook< offsetof(item, hMember), 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_shb_member_cmp_xorshift()
130     {
131 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
132         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
137                 ,co::compare< cmp<item> >
138                 ,ci::opt::disposer< faked_disposer >
139                 ,co::item_counter< cds::atomicity::item_counter >
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_shb_member_less_xorshift()
149     {
150 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
151         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
156                 ,co::less< less<item> >
157                 ,ci::opt::disposer< faked_disposer >
158                 ,co::item_counter< cds::atomicity::item_counter >
159                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
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_shb_member_cmpmix_xorshift()
168     {
169 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
170         typedef member_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::member_hook< offsetof(item, hMember), 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_shb_member_cmp_xorshift_stat()
188     {
189 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
190         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
195                 ,co::compare< cmp<item> >
196                 ,ci::opt::disposer< faked_disposer >
197                 ,co::item_counter< cds::atomicity::item_counter >
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_shb_member_less_xorshift_stat()
208     {
209 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
210         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
215                 ,co::less< less<item> >
216                 ,ci::opt::disposer< faked_disposer >
217                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
218                 ,co::stat< ci::skip_list::stat<> >
219                 ,co::item_counter< cds::atomicity::item_counter >
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_shb_member_cmpmix_xorshift_stat()
228     {
229 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
230         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
235                 ,co::less< less<item> >
236                 ,ci::opt::disposer< faked_disposer >
237                 ,co::compare< cmp<item> >
238                 ,co::item_counter< cds::atomicity::item_counter >
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     void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp_pascal()
250     {
251 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
252         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
253
254         typedef ci::SkipListSet< rcu_type, item,
255             ci::skip_list::make_traits<
256                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
257                 ,co::compare< cmp<item> >
258                 ,ci::opt::disposer< faked_disposer >
259                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
260                 ,co::item_counter< cds::atomicity::item_counter >
261             >::type
262         >   set_type;
263
264         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
265 #endif
266     }
267
268     void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less_pascal()
269     {
270 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
271         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
272
273         typedef ci::SkipListSet< rcu_type, item,
274             ci::skip_list::make_traits<
275                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
276                 ,co::less< less<item> >
277                 ,ci::opt::disposer< faked_disposer >
278                 ,co::item_counter< cds::atomicity::item_counter >
279                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
280             >::type
281         >   set_type;
282
283         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
284 #endif
285     }
286
287     void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix_pascal()
288     {
289 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
290         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
291
292         typedef ci::SkipListSet< rcu_type, item,
293             ci::skip_list::make_traits<
294                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
295                 ,co::less< less<item> >
296                 ,ci::opt::disposer< faked_disposer >
297                 ,co::compare< cmp<item> >
298                 ,co::item_counter< cds::atomicity::item_counter >
299                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
300             >::type
301         >   set_type;
302
303         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
304 #endif
305     }
306
307     void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp_pascal_stat()
308     {
309 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
310         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
311
312         typedef ci::SkipListSet< rcu_type, item,
313             ci::skip_list::make_traits<
314                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
315                 ,co::compare< cmp<item> >
316                 ,ci::opt::disposer< faked_disposer >
317                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
318                 ,co::stat< ci::skip_list::stat<> >
319                 ,co::item_counter< cds::atomicity::item_counter >
320             >::type
321         >   set_type;
322
323         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
324 #endif
325     }
326
327     void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less_pascal_stat()
328     {
329 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
330         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
331
332         typedef ci::SkipListSet< rcu_type, item,
333             ci::skip_list::make_traits<
334                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
335                 ,co::less< less<item> >
336                 ,ci::opt::disposer< faked_disposer >
337                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
338                 ,co::stat< ci::skip_list::stat<> >
339                 ,co::item_counter< cds::atomicity::item_counter >
340             >::type
341         >   set_type;
342
343         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
344 #endif
345     }
346
347     void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix_pascal_stat()
348     {
349 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
350         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
351
352         typedef ci::SkipListSet< rcu_type, item,
353             ci::skip_list::make_traits<
354                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
355                 ,co::less< less<item> >
356                 ,ci::opt::disposer< faked_disposer >
357                 ,co::compare< cmp<item> >
358                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
359                 ,co::stat< ci::skip_list::stat<> >
360                 ,co::item_counter< cds::atomicity::item_counter >
361             >::type
362         >   set_type;
363
364         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
365 #endif
366     }
367
368 } // namespace set