Added copyright and license
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_nogc_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.h"
32
33 #include <cds/intrusive/skip_list_nogc.h>
34 #include "map/print_skiplist_stat.h"
35
36 namespace set {
37
38     void IntrusiveSkipListSet::skiplist_nogc_member_cmp()
39     {
40         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
41
42         typedef ci::SkipListSet< cds::gc::nogc, item,
43             ci::skip_list::make_traits<
44                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
45                 ,co::compare< cmp<item> >
46                 ,co::item_counter< cds::atomicity::item_counter >
47             >::type
48         >   set_type;
49
50         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
51     }
52
53     void IntrusiveSkipListSet::skiplist_nogc_member_less()
54     {
55         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
56
57         typedef ci::SkipListSet< cds::gc::nogc, item,
58             ci::skip_list::make_traits<
59                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
60                 ,co::less< less<item> >
61                 ,co::item_counter< cds::atomicity::item_counter >
62             >::type
63         >   set_type;
64
65         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
66     }
67
68     void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix()
69     {
70         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
71
72         typedef ci::SkipListSet< cds::gc::nogc, item,
73             ci::skip_list::make_traits<
74                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
75                 ,co::less< less<item> >
76                 ,co::item_counter< cds::atomicity::item_counter >
77                 ,co::compare< cmp<item> >
78             >::type
79         >   set_type;
80
81         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
82     }
83
84     void IntrusiveSkipListSet::skiplist_nogc_member_cmp_stat()
85     {
86         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
87
88         typedef ci::SkipListSet< cds::gc::nogc, item,
89             ci::skip_list::make_traits<
90                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
91                 ,co::compare< cmp<item> >
92                 ,co::stat< ci::skip_list::stat<> >
93                 ,co::item_counter< cds::atomicity::item_counter >
94             >::type
95         >   set_type;
96
97         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
98     }
99
100     void IntrusiveSkipListSet::skiplist_nogc_member_less_stat()
101     {
102         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
103
104         typedef ci::SkipListSet< cds::gc::nogc, item,
105             ci::skip_list::make_traits<
106                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
107                 ,co::less< less<item> >
108                 ,co::item_counter< cds::atomicity::item_counter >
109                 ,co::stat< ci::skip_list::stat<> >
110             >::type
111         >   set_type;
112
113         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
114     }
115
116     void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_stat()
117     {
118         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
119
120         typedef ci::SkipListSet< cds::gc::nogc, item,
121             ci::skip_list::make_traits<
122                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
123                 ,co::less< less<item> >
124                 ,co::compare< cmp<item> >
125                 ,co::stat< ci::skip_list::stat<> >
126                 ,co::item_counter< cds::atomicity::item_counter >
127             >::type
128         >   set_type;
129
130         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
131     }
132
133     void IntrusiveSkipListSet::skiplist_nogc_member_cmp_xorshift()
134     {
135         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
136
137         typedef ci::SkipListSet< cds::gc::nogc, item,
138             ci::skip_list::make_traits<
139                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
140                 ,co::compare< cmp<item> >
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_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
147     }
148
149     void IntrusiveSkipListSet::skiplist_nogc_member_less_xorshift()
150     {
151         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
152
153         typedef ci::SkipListSet< cds::gc::nogc, item,
154             ci::skip_list::make_traits<
155                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
156                 ,co::less< less<item> >
157                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
158                 ,co::item_counter< cds::atomicity::item_counter >
159             >::type
160         >   set_type;
161
162         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
163     }
164
165     void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_xorshift()
166     {
167         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
168
169         typedef ci::SkipListSet< cds::gc::nogc, item,
170             ci::skip_list::make_traits<
171                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
172                 ,co::less< less<item> >
173                 ,co::compare< cmp<item> >
174                 ,co::item_counter< cds::atomicity::item_counter >
175                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
176             >::type
177         >   set_type;
178
179         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
180     }
181
182         void IntrusiveSkipListSet::skiplist_nogc_member_cmp_xorshift_stat()
183     {
184         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
185
186         typedef ci::SkipListSet< cds::gc::nogc, item,
187             ci::skip_list::make_traits<
188                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
189                 ,co::compare< cmp<item> >
190                 ,co::item_counter< cds::atomicity::item_counter >
191                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
192                 ,co::stat< ci::skip_list::stat<> >
193             >::type
194         >   set_type;
195
196         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
197     }
198
199     void IntrusiveSkipListSet::skiplist_nogc_member_less_xorshift_stat()
200     {
201         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
202
203         typedef ci::SkipListSet< cds::gc::nogc, item,
204             ci::skip_list::make_traits<
205                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
206                 ,co::less< less<item> >
207                 ,co::item_counter< cds::atomicity::item_counter >
208                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
209                 ,co::stat< ci::skip_list::stat<> >
210             >::type
211         >   set_type;
212
213         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
214     }
215
216     void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_xorshift_stat()
217     {
218         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
219
220         typedef ci::SkipListSet< cds::gc::nogc, item,
221             ci::skip_list::make_traits<
222                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
223                 ,co::less< less<item> >
224                 ,co::item_counter< cds::atomicity::item_counter >
225                 ,co::compare< cmp<item> >
226                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
227                 ,co::stat< ci::skip_list::stat<> >
228             >::type
229         >   set_type;
230
231         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
232     }
233
234
235     //*********
236     void IntrusiveSkipListSet::skiplist_nogc_member_cmp_pascal()
237     {
238         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
239
240         typedef ci::SkipListSet< cds::gc::nogc, item,
241             ci::skip_list::make_traits<
242                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
243                 ,co::compare< cmp<item> >
244                 ,co::item_counter< cds::atomicity::item_counter >
245                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
246             >::type
247         >   set_type;
248
249         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
250     }
251
252     void IntrusiveSkipListSet::skiplist_nogc_member_less_pascal()
253     {
254         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
255
256         typedef ci::SkipListSet< cds::gc::nogc, item,
257             ci::skip_list::make_traits<
258                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
259                 ,co::less< less<item> >
260                 ,co::item_counter< cds::atomicity::item_counter >
261                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
262             >::type
263         >   set_type;
264
265         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
266     }
267
268     void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_pascal()
269     {
270         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
271
272         typedef ci::SkipListSet< cds::gc::nogc, item,
273             ci::skip_list::make_traits<
274                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
275                 ,co::less< less<item> >
276                 ,co::compare< cmp<item> >
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_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
283     }
284
285         void IntrusiveSkipListSet::skiplist_nogc_member_cmp_pascal_stat()
286     {
287         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
288
289         typedef ci::SkipListSet< cds::gc::nogc, item,
290             ci::skip_list::make_traits<
291                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
292                 ,co::compare< cmp<item> >
293                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
294                 ,co::stat< ci::skip_list::stat<> >
295                 ,co::item_counter< cds::atomicity::item_counter >
296             >::type
297         >   set_type;
298
299         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
300     }
301
302     void IntrusiveSkipListSet::skiplist_nogc_member_less_pascal_stat()
303     {
304         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
305
306         typedef ci::SkipListSet< cds::gc::nogc, item,
307             ci::skip_list::make_traits<
308                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
309                 ,co::less< less<item> >
310                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
311                 ,co::stat< ci::skip_list::stat<> >
312                 ,co::item_counter< cds::atomicity::item_counter >
313             >::type
314         >   set_type;
315
316         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
317     }
318
319     void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_pascal_stat()
320     {
321         typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
322
323         typedef ci::SkipListSet< cds::gc::nogc, item,
324             ci::skip_list::make_traits<
325                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
326                 ,co::less< less<item> >
327                 ,co::compare< cmp<item> >
328                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
329                 ,co::stat< ci::skip_list::stat<> >
330                 ,co::item_counter< cds::atomicity::item_counter >
331             >::type
332         >   set_type;
333
334         test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
335     }
336
337 }   // namespace set