Added copyright and license
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_rcu_gpb_member.cpp
1 /*
2     This file is a part of libcds - Concurrent Data Structures library
3
4     (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
5
6     Source code repo: http://github.com/khizmax/libcds/
7     Download: http://sourceforge.net/projects/libcds/files/
8     
9     Redistribution and use in source and binary forms, with or without
10     modification, are permitted provided that the following conditions are met:
11
12     * Redistributions of source code must retain the above copyright notice, this
13       list of conditions and the following disclaimer.
14
15     * Redistributions in binary form must reproduce the above copyright notice,
16       this list of conditions and the following disclaimer in the documentation
17       and/or other materials provided with the distribution.
18
19     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
29 */
30
31 #include "set/hdr_intrusive_skiplist_set_rcu.h"
32
33 #include <cds/urcu/general_buffered.h>
34 #include <cds/intrusive/skip_list_rcu.h>
35 #include "map/print_skiplist_stat.h"
36
37 namespace set {
38     namespace {
39         typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
40     }
41
42     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp()
43     {
44         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
45
46         typedef ci::SkipListSet< rcu_type, item,
47             ci::skip_list::make_traits<
48                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
49                 ,co::compare< cmp<item> >
50                 ,ci::opt::disposer< faked_disposer >
51                 ,co::item_counter< cds::atomicity::item_counter >
52             >::type
53         >   set_type;
54
55         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
56     }
57
58     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less()
59     {
60         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
61
62         typedef ci::SkipListSet< rcu_type, item,
63             ci::skip_list::make_traits<
64                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
65                 ,co::less< less<item> >
66                 ,ci::opt::disposer< faked_disposer >
67                 ,co::item_counter< cds::atomicity::item_counter >
68             >::type
69         >   set_type;
70
71         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
72     }
73
74     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix()
75     {
76         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
77
78         typedef ci::SkipListSet< rcu_type, item,
79             ci::skip_list::make_traits<
80                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
81                 ,co::less< less<item> >
82                 ,ci::opt::disposer< faked_disposer >
83                 ,co::compare< cmp<item> >
84                 ,co::item_counter< cds::atomicity::item_counter >
85             >::type
86         >   set_type;
87
88         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
89     }
90
91     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_stat()
92     {
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::compare< cmp<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     }
107
108     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_stat()
109     {
110         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
111
112         typedef ci::SkipListSet< rcu_type, item,
113             ci::skip_list::make_traits<
114                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
115                 ,co::less< less<item> >
116                 ,ci::opt::disposer< faked_disposer >
117                 ,co::stat< ci::skip_list::stat<> >
118                 ,co::item_counter< cds::atomicity::item_counter >
119             >::type
120         >   set_type;
121
122         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
123     }
124
125     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_stat()
126     {
127         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
128
129         typedef ci::SkipListSet< rcu_type, item,
130             ci::skip_list::make_traits<
131                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
132                 ,co::less< less<item> >
133                 ,ci::opt::disposer< faked_disposer >
134                 ,co::compare< cmp<item> >
135                 ,co::stat< ci::skip_list::stat<> >
136                 ,co::item_counter< cds::atomicity::item_counter >
137             >::type
138         >   set_type;
139
140         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
141     }
142
143     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_xorshift()
144     {
145         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
146
147         typedef ci::SkipListSet< rcu_type, item,
148             ci::skip_list::make_traits<
149                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
150                 ,co::compare< cmp<item> >
151                 ,ci::opt::disposer< faked_disposer >
152                 ,co::item_counter< cds::atomicity::item_counter >
153                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
154             >::type
155         >   set_type;
156
157         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
158     }
159
160     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_xorshift()
161     {
162         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
163
164         typedef ci::SkipListSet< rcu_type, item,
165             ci::skip_list::make_traits<
166                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
167                 ,co::less< less<item> >
168                 ,ci::opt::disposer< faked_disposer >
169                 ,co::item_counter< cds::atomicity::item_counter >
170                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
171             >::type
172         >   set_type;
173
174         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
175     }
176
177     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_xorshift()
178     {
179         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
180
181         typedef ci::SkipListSet< rcu_type, item,
182             ci::skip_list::make_traits<
183                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
184                 ,co::less< less<item> >
185                 ,ci::opt::disposer< faked_disposer >
186                 ,co::compare< cmp<item> >
187                 ,co::item_counter< cds::atomicity::item_counter >
188                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
189             >::type
190         >   set_type;
191
192         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
193     }
194
195         void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_xorshift_stat()
196     {
197         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
198
199         typedef ci::SkipListSet< rcu_type, item,
200             ci::skip_list::make_traits<
201                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
202                 ,co::compare< cmp<item> >
203                 ,ci::opt::disposer< faked_disposer >
204                 ,co::item_counter< cds::atomicity::item_counter >
205                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
206                 ,co::stat< ci::skip_list::stat<> >
207             >::type
208         >   set_type;
209
210         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
211     }
212
213     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_xorshift_stat()
214     {
215         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
216
217         typedef ci::SkipListSet< rcu_type, item,
218             ci::skip_list::make_traits<
219                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
220                 ,co::less< less<item> >
221                 ,ci::opt::disposer< faked_disposer >
222                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
223                 ,co::stat< ci::skip_list::stat<> >
224                 ,co::item_counter< cds::atomicity::item_counter >
225             >::type
226         >   set_type;
227
228         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
229     }
230
231     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_xorshift_stat()
232     {
233         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
234
235         typedef ci::SkipListSet< rcu_type, item,
236             ci::skip_list::make_traits<
237                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
238                 ,co::less< less<item> >
239                 ,ci::opt::disposer< faked_disposer >
240                 ,co::compare< cmp<item> >
241                 ,co::item_counter< cds::atomicity::item_counter >
242                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
243                 ,co::stat< ci::skip_list::stat<> >
244             >::type
245         >   set_type;
246
247         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
248     }
249
250
251     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_pascal()
252     {
253         typedef member_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::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
258                 ,co::compare< cmp<item> >
259                 ,ci::opt::disposer< faked_disposer >
260                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
261                 ,co::item_counter< cds::atomicity::item_counter >
262             >::type
263         >   set_type;
264
265         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
266     }
267
268     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_pascal()
269     {
270         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
271
272         typedef ci::SkipListSet< rcu_type, item,
273             ci::skip_list::make_traits<
274                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
275                 ,co::less< less<item> >
276                 ,ci::opt::disposer< faked_disposer >
277                 ,co::item_counter< cds::atomicity::item_counter >
278                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
279             >::type
280         >   set_type;
281
282         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
283     }
284
285     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_pascal()
286     {
287         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
288
289         typedef ci::SkipListSet< rcu_type, item,
290             ci::skip_list::make_traits<
291                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
292                 ,co::less< less<item> >
293                 ,ci::opt::disposer< faked_disposer >
294                 ,co::compare< cmp<item> >
295                 ,co::item_counter< cds::atomicity::item_counter >
296                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
297             >::type
298         >   set_type;
299
300         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
301     }
302
303         void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_pascal_stat()
304     {
305         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
306
307         typedef ci::SkipListSet< rcu_type, item,
308             ci::skip_list::make_traits<
309                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
310                 ,co::compare< cmp<item> >
311                 ,ci::opt::disposer< faked_disposer >
312                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
313                 ,co::stat< ci::skip_list::stat<> >
314                 ,co::item_counter< cds::atomicity::item_counter >
315             >::type
316         >   set_type;
317
318         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
319     }
320
321     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_pascal_stat()
322     {
323         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
324
325         typedef ci::SkipListSet< rcu_type, item,
326             ci::skip_list::make_traits<
327                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
328                 ,co::less< less<item> >
329                 ,ci::opt::disposer< faked_disposer >
330                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
331                 ,co::stat< ci::skip_list::stat<> >
332                 ,co::item_counter< cds::atomicity::item_counter >
333             >::type
334         >   set_type;
335
336         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
337     }
338
339     void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_pascal_stat()
340     {
341         typedef member_int_item< ci::skip_list::node< rcu_type> > item;
342
343         typedef ci::SkipListSet< rcu_type, item,
344             ci::skip_list::make_traits<
345                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
346                 ,co::less< less<item> >
347                 ,ci::opt::disposer< faked_disposer >
348                 ,co::compare< cmp<item> >
349                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
350                 ,co::stat< ci::skip_list::stat<> >
351                 ,co::item_counter< cds::atomicity::item_counter >
352             >::type
353         >   set_type;
354
355         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
356     }
357
358 } // namespace set