[SkipList] Added random-lvel generators for max height 32/24/16
[libcds.git] / test / unit / map / skiplist_hp_inl.h
1 /*
2     This file is a part of libcds - Concurrent Data Structures library
3
4     (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
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
32 TEST_F( CDSTEST_FIXTURE_NAME, compare )
33 {
34     typedef cc::SkipListMap< gc_type, key_type, value_type,
35         typename cc::skip_list::make_traits<
36             cds::opt::compare< cmp >
37         >::type
38     > map_type;
39
40     map_type m;
41     test( m );
42 }
43
44 TEST_F( CDSTEST_FIXTURE_NAME, less )
45 {
46     typedef cc::SkipListMap< gc_type, key_type, value_type,
47         typename cc::skip_list::make_traits<
48             cds::opt::less< base_class::less >
49         >::type
50     > map_type;
51
52     map_type m;
53     test( m );
54 }
55
56 TEST_F( CDSTEST_FIXTURE_NAME, cmpmix )
57 {
58     typedef cc::SkipListMap< gc_type, key_type, value_type,
59         typename cc::skip_list::make_traits<
60             cds::opt::less< base_class::less >
61             ,cds::opt::compare< cmp >
62         >::type
63     > map_type;
64
65     map_type m;
66     test( m );
67 }
68
69 TEST_F( CDSTEST_FIXTURE_NAME, item_counting )
70 {
71     struct map_traits: public cc::skip_list::traits
72     {
73         typedef cmp compare;
74         typedef base_class::less less;
75         typedef cds::atomicity::item_counter item_counter;
76     };
77     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
78
79     map_type m;
80     test( m );
81 }
82
83 TEST_F( CDSTEST_FIXTURE_NAME, backoff )
84 {
85     struct map_traits: public cc::skip_list::traits
86     {
87         typedef cmp compare;
88         typedef base_class::less less;
89         typedef cds::atomicity::item_counter item_counter;
90         typedef cds::backoff::yield back_off;
91     };
92     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
93
94     map_type m;
95     test( m );
96 }
97
98 TEST_F( CDSTEST_FIXTURE_NAME, stat )
99 {
100     struct map_traits: public cc::skip_list::traits
101     {
102         typedef cmp compare;
103         typedef base_class::less less;
104         typedef cds::atomicity::item_counter item_counter;
105         typedef cds::backoff::yield back_off;
106         typedef cc::skip_list::stat<> stat;
107     };
108     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
109
110     map_type m;
111     test( m );
112 }
113
114 TEST_F( CDSTEST_FIXTURE_NAME, xorshift32 )
115 {
116     struct map_traits: public cc::skip_list::traits
117     {
118         typedef base_class::less less;
119         typedef cc::skip_list::xorshift32 random_level_generator;
120     };
121     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
122
123     map_type m;
124     test( m );
125 }
126
127 TEST_F( CDSTEST_FIXTURE_NAME, xorshift24 )
128 {
129     struct map_traits: public cc::skip_list::traits
130     {
131         typedef base_class::less less;
132         typedef cc::skip_list::stat<> stat;
133         typedef cc::skip_list::xorshift24 random_level_generator;
134     };
135     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
136
137     map_type m;
138     test( m );
139 }
140
141 TEST_F( CDSTEST_FIXTURE_NAME, xorshift16 )
142 {
143     struct map_traits: public cc::skip_list::traits
144     {
145         typedef cmp compare;
146         typedef cc::skip_list::xorshift16 random_level_generator;
147     };
148     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
149
150     map_type m;
151     test( m );
152 }
153
154 TEST_F( CDSTEST_FIXTURE_NAME, turbo32 )
155 {
156     struct map_traits: public cc::skip_list::traits
157     {
158         typedef cmp compare;
159         typedef cc::skip_list::turbo32 random_level_generator;
160     };
161     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
162
163     map_type m;
164     test( m );
165 }
166
167 TEST_F( CDSTEST_FIXTURE_NAME, turbo24 )
168 {
169     struct map_traits: public cc::skip_list::traits
170     {
171         typedef cmp compare;
172         typedef cc::skip_list::turbo24 random_level_generator;
173     };
174     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
175
176     map_type m;
177     test( m );
178 }
179
180 TEST_F( CDSTEST_FIXTURE_NAME, turbo16 )
181 {
182     struct map_traits: public cc::skip_list::traits
183     {
184         typedef cmp compare;
185         typedef cc::skip_list::turbo16 random_level_generator;
186     };
187     typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
188
189     map_type m;
190     test( m );
191 }