Added copyright and license
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_hp.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_hp.h>
34 #include "map/print_skiplist_stat.h"
35
36 namespace set {
37
38     void IntrusiveSkipListSet::skiplist_hp_base_cmp()
39     {
40         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
41         struct set_traits : public ci::skip_list::traits
42         {
43             typedef ci::skip_list::base_hook< co::gc<cds::gc::HP> > hook;
44             typedef cmp<item> compare;
45             typedef faked_disposer disposer;
46             typedef cds::atomicity::item_counter item_counter;
47         };
48         typedef ci::SkipListSet< cds::gc::HP, item, set_traits > set_type;
49
50         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
51     }
52
53     void IntrusiveSkipListSet::skiplist_hp_base_less()
54     {
55         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
56
57         typedef ci::SkipListSet< cds::gc::HP, item,
58             ci::skip_list::make_traits<
59                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
60                 ,co::less< less<item> >
61                 ,ci::opt::disposer< faked_disposer >
62                 ,co::item_counter< cds::atomicity::item_counter >
63             >::type
64         >   set_type;
65
66         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
67     }
68
69     void IntrusiveSkipListSet::skiplist_hp_base_cmpmix()
70     {
71         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
72
73         typedef ci::SkipListSet< cds::gc::HP, item,
74             ci::skip_list::make_traits<
75                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
76                 ,co::less< less<item> >
77                 ,ci::opt::disposer< faked_disposer >
78                 ,co::compare< cmp<item> >
79                 ,co::item_counter< cds::atomicity::item_counter >
80             >::type
81         >   set_type;
82
83         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
84     }
85
86     void IntrusiveSkipListSet::skiplist_hp_base_cmp_stat()
87     {
88         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
89
90         typedef ci::SkipListSet< cds::gc::HP, item,
91             ci::skip_list::make_traits<
92                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
93                 ,co::compare< cmp<item> >
94                 ,ci::opt::disposer< faked_disposer >
95                 ,co::stat< ci::skip_list::stat<> >
96                 ,co::item_counter< cds::atomicity::item_counter >
97             >::type
98         >   set_type;
99
100         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
101     }
102
103     void IntrusiveSkipListSet::skiplist_hp_base_less_stat()
104     {
105         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
106
107         typedef ci::SkipListSet< cds::gc::HP, item,
108             ci::skip_list::make_traits<
109                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
110                 ,co::less< less<item> >
111                 ,ci::opt::disposer< faked_disposer >
112                 ,co::stat< ci::skip_list::stat<> >
113                 ,co::item_counter< cds::atomicity::item_counter >
114             >::type
115         >   set_type;
116
117         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
118     }
119
120     void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_stat()
121     {
122         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
123
124         typedef ci::SkipListSet< cds::gc::HP, item,
125             ci::skip_list::make_traits<
126                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
127                 ,co::less< less<item> >
128                 ,ci::opt::disposer< faked_disposer >
129                 ,co::compare< cmp<item> >
130                 ,co::stat< ci::skip_list::stat<> >
131                 ,co::item_counter< cds::atomicity::item_counter >
132             >::type
133         >   set_type;
134
135         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
136     }
137
138     void IntrusiveSkipListSet::skiplist_hp_base_cmp_xorshift()
139     {
140         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
141
142         typedef ci::SkipListSet< cds::gc::HP, item,
143             ci::skip_list::make_traits<
144                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
145                 ,co::compare< cmp<item> >
146                 ,ci::opt::disposer< faked_disposer >
147                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
148                 ,co::item_counter< cds::atomicity::item_counter >
149             >::type
150         >   set_type;
151
152         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
153     }
154
155     void IntrusiveSkipListSet::skiplist_hp_base_less_xorshift()
156     {
157         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
158
159         typedef ci::SkipListSet< cds::gc::HP, item,
160             ci::skip_list::make_traits<
161                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
162                 ,co::less< less<item> >
163                 ,ci::opt::disposer< faked_disposer >
164                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
165                 ,co::item_counter< cds::atomicity::item_counter >
166             >::type
167         >   set_type;
168
169         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
170     }
171
172     void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_xorshift()
173     {
174         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
175
176         typedef ci::SkipListSet< cds::gc::HP, item,
177             ci::skip_list::make_traits<
178                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
179                 ,co::less< less<item> >
180                 ,ci::opt::disposer< faked_disposer >
181                 ,co::compare< cmp<item> >
182                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
183                 ,co::item_counter< cds::atomicity::item_counter >
184             >::type
185         >   set_type;
186
187         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
188     }
189
190         void IntrusiveSkipListSet::skiplist_hp_base_cmp_xorshift_stat()
191     {
192         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
193
194         typedef ci::SkipListSet< cds::gc::HP, item,
195             ci::skip_list::make_traits<
196                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
197                 ,co::compare< cmp<item> >
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                 ,co::item_counter< cds::atomicity::item_counter >
202             >::type
203         >   set_type;
204
205         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
206     }
207
208     void IntrusiveSkipListSet::skiplist_hp_base_less_xorshift_stat()
209     {
210         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
211
212         typedef ci::SkipListSet< cds::gc::HP, item,
213             ci::skip_list::make_traits<
214                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
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     }
225
226     void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_xorshift_stat()
227     {
228         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
229
230         typedef ci::SkipListSet< cds::gc::HP, item,
231             ci::skip_list::make_traits<
232                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
233                 ,co::less< less<item> >
234                 ,ci::opt::disposer< faked_disposer >
235                 ,co::compare< cmp<item> >
236                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
237                 ,co::stat< ci::skip_list::stat<> >
238                 ,co::item_counter< cds::atomicity::item_counter >
239             >::type
240         >   set_type;
241
242         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
243     }
244
245
246     //*********
247     void IntrusiveSkipListSet::skiplist_hp_base_cmp_pascal()
248     {
249         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
250
251         typedef ci::SkipListSet< cds::gc::HP, item,
252             ci::skip_list::make_traits<
253                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
254                 ,co::compare< cmp<item> >
255                 ,ci::opt::disposer< faked_disposer >
256                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
257                 ,co::item_counter< cds::atomicity::item_counter >
258             >::type
259         >   set_type;
260
261         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
262     }
263
264     void IntrusiveSkipListSet::skiplist_hp_base_less_pascal()
265     {
266         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
267
268         typedef ci::SkipListSet< cds::gc::HP, item,
269             ci::skip_list::make_traits<
270                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
271                 ,co::less< less<item> >
272                 ,ci::opt::disposer< faked_disposer >
273                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
274                 ,co::item_counter< cds::atomicity::item_counter >
275             >::type
276         >   set_type;
277
278         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
279     }
280
281     void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_pascal()
282     {
283         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
284
285         typedef ci::SkipListSet< cds::gc::HP, item,
286             ci::skip_list::make_traits<
287                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
288                 ,co::less< less<item> >
289                 ,ci::opt::disposer< faked_disposer >
290                 ,co::compare< cmp<item> >
291                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
292                 ,co::item_counter< cds::atomicity::item_counter >
293             >::type
294         >   set_type;
295
296         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
297     }
298
299         void IntrusiveSkipListSet::skiplist_hp_base_cmp_pascal_stat()
300     {
301         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
302
303         typedef ci::SkipListSet< cds::gc::HP, item,
304             ci::skip_list::make_traits<
305                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
306                 ,co::compare< cmp<item> >
307                 ,ci::opt::disposer< faked_disposer >
308                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
309                 ,co::stat< ci::skip_list::stat<> >
310                 ,co::item_counter< cds::atomicity::item_counter >
311             >::type
312         >   set_type;
313
314         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
315     }
316
317     void IntrusiveSkipListSet::skiplist_hp_base_less_pascal_stat()
318     {
319         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
320
321         typedef ci::SkipListSet< cds::gc::HP, item,
322             ci::skip_list::make_traits<
323                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
324                 ,co::less< less<item> >
325                 ,ci::opt::disposer< faked_disposer >
326                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
327                 ,co::stat< ci::skip_list::stat<> >
328                 ,co::item_counter< cds::atomicity::item_counter >
329             >::type
330         >   set_type;
331
332         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
333     }
334
335     void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_pascal_stat()
336     {
337         typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
338
339         typedef ci::SkipListSet< cds::gc::HP, item,
340             ci::skip_list::make_traits<
341                 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
342                 ,co::less< less<item> >
343                 ,ci::opt::disposer< faked_disposer >
344                 ,co::compare< cmp<item> >
345                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
346                 ,co::stat< ci::skip_list::stat<> >
347                 ,co::item_counter< cds::atomicity::item_counter >
348             >::type
349         >   set_type;
350
351         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
352     }
353
354 }   // namespace set
355
356 CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveSkipListSet);