Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_rcu_gpt_member.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_intrusive_skiplist_set_rcu.h"
4
5 #include <cds/urcu/general_threaded.h>
6 #include <cds/intrusive/skip_list_rcu.h>
7 #include "map/print_skiplist_stat.h"
8
9 namespace set {
10     namespace {
11         typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
12     }
13
14     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp()
15     {
16         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
17
18         typedef ci::SkipListSet< rcu_type, item,
19             ci::skip_list::make_traits<
20                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
21                 ,co::compare< cmp<item> >
22                 ,ci::opt::disposer< faked_disposer >
23                 ,co::item_counter< cds::atomicity::item_counter >
24             >::type
25         >   set_type;
26
27         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
28     }
29
30     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less()
31     {
32         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
33
34         typedef ci::SkipListSet< rcu_type, item,
35             ci::skip_list::make_traits<
36                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
37                 ,co::less< less<item> >
38                 ,ci::opt::disposer< faked_disposer >
39                 ,co::item_counter< cds::atomicity::item_counter >
40             >::type
41         >   set_type;
42
43         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
44     }
45
46     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix()
47     {
48         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
49
50         typedef ci::SkipListSet< rcu_type, item,
51             ci::skip_list::make_traits<
52                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
53                 ,co::less< less<item> >
54                 ,ci::opt::disposer< faked_disposer >
55                 ,co::compare< cmp<item> >
56                 ,co::item_counter< cds::atomicity::item_counter >
57             >::type
58         >   set_type;
59
60         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
61     }
62
63     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_stat()
64     {
65         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
66
67         typedef ci::SkipListSet< rcu_type, item,
68             ci::skip_list::make_traits<
69                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
70                 ,co::compare< cmp<item> >
71                 ,ci::opt::disposer< faked_disposer >
72                 ,co::stat< ci::skip_list::stat<> >
73                 ,co::item_counter< cds::atomicity::item_counter >
74             >::type
75         >   set_type;
76
77         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
78     }
79
80     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_stat()
81     {
82         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
83
84         typedef ci::SkipListSet< rcu_type, item,
85             ci::skip_list::make_traits<
86                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
87                 ,co::less< less<item> >
88                 ,ci::opt::disposer< faked_disposer >
89                 ,co::stat< ci::skip_list::stat<> >
90                 ,co::item_counter< cds::atomicity::item_counter >
91             >::type
92         >   set_type;
93
94         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
95     }
96
97     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_stat()
98     {
99         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
100
101         typedef ci::SkipListSet< rcu_type, item,
102             ci::skip_list::make_traits<
103                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
104                 ,co::less< less<item> >
105                 ,ci::opt::disposer< faked_disposer >
106                 ,co::compare< cmp<item> >
107                 ,co::stat< ci::skip_list::stat<> >
108                 ,co::item_counter< cds::atomicity::item_counter >
109             >::type
110         >   set_type;
111
112         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
113     }
114
115     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_xorshift()
116     {
117         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
118
119         typedef ci::SkipListSet< rcu_type, item,
120             ci::skip_list::make_traits<
121                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
122                 ,co::compare< cmp<item> >
123                 ,ci::opt::disposer< faked_disposer >
124                 ,co::item_counter< cds::atomicity::item_counter >
125                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
126             >::type
127         >   set_type;
128
129         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
130     }
131
132     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_xorshift()
133     {
134         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
135
136         typedef ci::SkipListSet< rcu_type, item,
137             ci::skip_list::make_traits<
138                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
139                 ,co::less< less<item> >
140                 ,ci::opt::disposer< faked_disposer >
141                 ,co::item_counter< cds::atomicity::item_counter >
142                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
143             >::type
144         >   set_type;
145
146         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
147     }
148
149     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_xorshift()
150     {
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::compare< cmp<item> >
159                 ,co::item_counter< cds::atomicity::item_counter >
160                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
161             >::type
162         >   set_type;
163
164         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
165     }
166
167         void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_xorshift_stat()
168     {
169         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
170
171         typedef ci::SkipListSet< rcu_type, item,
172             ci::skip_list::make_traits<
173                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
174                 ,co::compare< cmp<item> >
175                 ,ci::opt::disposer< faked_disposer >
176                 ,co::item_counter< cds::atomicity::item_counter >
177                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
178                 ,co::stat< ci::skip_list::stat<> >
179             >::type
180         >   set_type;
181
182         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
183     }
184
185     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_xorshift_stat()
186     {
187         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
188
189         typedef ci::SkipListSet< rcu_type, item,
190             ci::skip_list::make_traits<
191                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
192                 ,co::less< less<item> >
193                 ,ci::opt::disposer< faked_disposer >
194                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
195                 ,co::stat< ci::skip_list::stat<> >
196                 ,co::item_counter< cds::atomicity::item_counter >
197             >::type
198         >   set_type;
199
200         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
201     }
202
203     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_xorshift_stat()
204     {
205         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
206
207         typedef ci::SkipListSet< rcu_type, item,
208             ci::skip_list::make_traits<
209                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
210                 ,co::less< less<item> >
211                 ,ci::opt::disposer< faked_disposer >
212                 ,co::compare< cmp<item> >
213                 ,co::item_counter< cds::atomicity::item_counter >
214                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
215                 ,co::stat< ci::skip_list::stat<> >
216             >::type
217         >   set_type;
218
219         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
220     }
221
222
223     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_pascal()
224     {
225         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
226
227         typedef ci::SkipListSet< rcu_type, item,
228             ci::skip_list::make_traits<
229                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
230                 ,co::compare< cmp<item> >
231                 ,ci::opt::disposer< faked_disposer >
232                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
233                 ,co::item_counter< cds::atomicity::item_counter >
234             >::type
235         >   set_type;
236
237         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
238     }
239
240     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_pascal()
241     {
242         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
243
244         typedef ci::SkipListSet< rcu_type, item,
245             ci::skip_list::make_traits<
246                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
247                 ,co::less< less<item> >
248                 ,ci::opt::disposer< faked_disposer >
249                 ,co::item_counter< cds::atomicity::item_counter >
250                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
251             >::type
252         >   set_type;
253
254         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
255     }
256
257     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_pascal()
258     {
259         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
260
261         typedef ci::SkipListSet< rcu_type, item,
262             ci::skip_list::make_traits<
263                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
264                 ,co::less< less<item> >
265                 ,ci::opt::disposer< faked_disposer >
266                 ,co::compare< cmp<item> >
267                 ,co::item_counter< cds::atomicity::item_counter >
268                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
269             >::type
270         >   set_type;
271
272         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
273     }
274
275         void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_pascal_stat()
276     {
277         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
278
279         typedef ci::SkipListSet< rcu_type, item,
280             ci::skip_list::make_traits<
281                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
282                 ,co::compare< cmp<item> >
283                 ,ci::opt::disposer< faked_disposer >
284                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
285                 ,co::stat< ci::skip_list::stat<> >
286                 ,co::item_counter< cds::atomicity::item_counter >
287             >::type
288         >   set_type;
289
290         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
291     }
292
293     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_pascal_stat()
294     {
295         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
296
297         typedef ci::SkipListSet< rcu_type, item,
298             ci::skip_list::make_traits<
299                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
300                 ,co::less< less<item> >
301                 ,ci::opt::disposer< faked_disposer >
302                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
303                 ,co::stat< ci::skip_list::stat<> >
304                 ,co::item_counter< cds::atomicity::item_counter >
305             >::type
306         >   set_type;
307
308         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
309     }
310
311     void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_pascal_stat()
312     {
313         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
314
315         typedef ci::SkipListSet< rcu_type, item,
316             ci::skip_list::make_traits<
317                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
318                 ,co::less< less<item> >
319                 ,ci::opt::disposer< faked_disposer >
320                 ,co::compare< cmp<item> >
321                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
322                 ,co::stat< ci::skip_list::stat<> >
323                 ,co::item_counter< cds::atomicity::item_counter >
324             >::type
325         >   set_type;
326
327         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
328     }
329
330 } // namespace set