Added copyright and license
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_dhp_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_dhp.h>
34 #include "map/print_skiplist_stat.h"
35
36 namespace set {
37         void IntrusiveSkipListSet::skiplist_dhp_member_cmp()
38     {
39         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
40
41         typedef ci::SkipListSet< cds::gc::DHP, item,
42             ci::skip_list::make_traits<
43                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
44                 ,co::compare< cmp<item> >
45                 ,ci::opt::disposer< faked_disposer >
46                 ,co::item_counter< cds::atomicity::item_counter >
47             >::type
48         >   set_type;
49
50         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
51     }
52
53     void IntrusiveSkipListSet::skiplist_dhp_member_less()
54     {
55         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
56
57         typedef ci::SkipListSet< cds::gc::DHP, item,
58             ci::skip_list::make_traits<
59                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
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_dhp_member_cmpmix()
70     {
71         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
72
73         typedef ci::SkipListSet< cds::gc::DHP, item,
74             ci::skip_list::make_traits<
75                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
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_dhp_member_cmp_stat()
87     {
88         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
89
90         typedef ci::SkipListSet< cds::gc::DHP, item,
91             ci::skip_list::make_traits<
92                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
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_dhp_member_less_stat()
104     {
105         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
106
107         typedef ci::SkipListSet< cds::gc::DHP, item,
108             ci::skip_list::make_traits<
109                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
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_dhp_member_cmpmix_stat()
121     {
122         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
123
124         typedef ci::SkipListSet< cds::gc::DHP, item,
125             ci::skip_list::make_traits<
126                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
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_dhp_member_cmp_xorshift()
139     {
140         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
141
142         typedef ci::SkipListSet< cds::gc::DHP, item,
143             ci::skip_list::make_traits<
144                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
145                 ,co::compare< cmp<item> >
146                 ,ci::opt::disposer< faked_disposer >
147                 ,co::item_counter< cds::atomicity::item_counter >
148                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
149             >::type
150         >   set_type;
151
152         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
153     }
154
155     void IntrusiveSkipListSet::skiplist_dhp_member_less_xorshift()
156     {
157         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
158
159         typedef ci::SkipListSet< cds::gc::DHP, item,
160             ci::skip_list::make_traits<
161                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
162                 ,co::less< less<item> >
163                 ,ci::opt::disposer< faked_disposer >
164                 ,co::item_counter< cds::atomicity::item_counter >
165                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
166             >::type
167         >   set_type;
168
169         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
170     }
171
172     void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_xorshift()
173     {
174         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
175
176         typedef ci::SkipListSet< cds::gc::DHP, item,
177             ci::skip_list::make_traits<
178                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
179                 ,co::less< less<item> >
180                 ,ci::opt::disposer< faked_disposer >
181                 ,co::compare< cmp<item> >
182                 ,co::item_counter< cds::atomicity::item_counter >
183                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
184             >::type
185         >   set_type;
186
187         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
188     }
189
190         void IntrusiveSkipListSet::skiplist_dhp_member_cmp_xorshift_stat()
191     {
192         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
193
194         typedef ci::SkipListSet< cds::gc::DHP, item,
195             ci::skip_list::make_traits<
196                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
197                 ,co::compare< cmp<item> >
198                 ,ci::opt::disposer< faked_disposer >
199                 ,co::item_counter< cds::atomicity::item_counter >
200                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
201                 ,co::stat< ci::skip_list::stat<> >
202             >::type
203         >   set_type;
204
205         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
206     }
207
208     void IntrusiveSkipListSet::skiplist_dhp_member_less_xorshift_stat()
209     {
210         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
211
212         typedef ci::SkipListSet< cds::gc::DHP, item,
213             ci::skip_list::make_traits<
214                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
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_dhp_member_cmpmix_xorshift_stat()
227     {
228         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
229
230         typedef ci::SkipListSet< cds::gc::DHP, item,
231             ci::skip_list::make_traits<
232                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
233                 ,co::less< less<item> >
234                 ,ci::opt::disposer< faked_disposer >
235                 ,co::compare< cmp<item> >
236                 ,co::item_counter< cds::atomicity::item_counter >
237                 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
238                 ,co::stat< ci::skip_list::stat<> >
239             >::type
240         >   set_type;
241
242         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
243     }
244
245
246     void IntrusiveSkipListSet::skiplist_dhp_member_cmp_pascal()
247     {
248         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
249
250         typedef ci::SkipListSet< cds::gc::DHP, item,
251             ci::skip_list::make_traits<
252                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
253                 ,co::compare< cmp<item> >
254                 ,ci::opt::disposer< faked_disposer >
255                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
256                 ,co::item_counter< cds::atomicity::item_counter >
257             >::type
258         >   set_type;
259
260         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
261     }
262
263     void IntrusiveSkipListSet::skiplist_dhp_member_less_pascal()
264     {
265         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
266
267         typedef ci::SkipListSet< cds::gc::DHP, item,
268             ci::skip_list::make_traits<
269                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
270                 ,co::less< less<item> >
271                 ,ci::opt::disposer< faked_disposer >
272                 ,co::item_counter< cds::atomicity::item_counter >
273                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
274             >::type
275         >   set_type;
276
277         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
278     }
279
280     void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_pascal()
281     {
282         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
283
284         typedef ci::SkipListSet< cds::gc::DHP, item,
285             ci::skip_list::make_traits<
286                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
287                 ,co::less< less<item> >
288                 ,ci::opt::disposer< faked_disposer >
289                 ,co::compare< cmp<item> >
290                 ,co::item_counter< cds::atomicity::item_counter >
291                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
292             >::type
293         >   set_type;
294
295         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
296     }
297
298         void IntrusiveSkipListSet::skiplist_dhp_member_cmp_pascal_stat()
299     {
300         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
301
302         typedef ci::SkipListSet< cds::gc::DHP, item,
303             ci::skip_list::make_traits<
304                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
305                 ,co::compare< cmp<item> >
306                 ,ci::opt::disposer< faked_disposer >
307                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
308                 ,co::stat< ci::skip_list::stat<> >
309                 ,co::item_counter< cds::atomicity::item_counter >
310             >::type
311         >   set_type;
312
313         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
314     }
315
316     void IntrusiveSkipListSet::skiplist_dhp_member_less_pascal_stat()
317     {
318         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
319
320         typedef ci::SkipListSet< cds::gc::DHP, item,
321             ci::skip_list::make_traits<
322                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
323                 ,co::less< less<item> >
324                 ,ci::opt::disposer< faked_disposer >
325                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
326                 ,co::stat< ci::skip_list::stat<> >
327                 ,co::item_counter< cds::atomicity::item_counter >
328             >::type
329         >   set_type;
330
331         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
332     }
333
334     void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_pascal_stat()
335     {
336         typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
337
338         typedef ci::SkipListSet< cds::gc::DHP, item,
339             ci::skip_list::make_traits<
340                 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
341                 ,co::less< less<item> >
342                 ,ci::opt::disposer< faked_disposer >
343                 ,co::compare< cmp<item> >
344                 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
345                 ,co::stat< ci::skip_list::stat<> >
346                 ,co::item_counter< cds::atomicity::item_counter >
347             >::type
348         >   set_type;
349
350         test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
351     }
352
353 } // namespace set