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