Migrated intrusive StripedSet unit test to gtest framework
[libcds.git] / test / unit / striped-set / test_intrusive_striped_set.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-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 #ifndef CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
32 #define CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
33
34 #include "test_intrusive_set.h"
35
36 #include <cds/intrusive/striped_set.h>
37
38 namespace {
39     namespace ci = cds::intrusive;
40
41     template <typename ContainerPair>
42     class IntrusiveStripedSet : public cds_test::intrusive_set
43     {
44     protected:
45         typedef cds_test::intrusive_set base_class;
46
47         typedef typename ContainerPair::base_item   base_item;
48         typedef typename ContainerPair::member_item member_item;
49
50         typedef typename ContainerPair::base_hook_container   base_hook_container;
51         typedef typename ContainerPair::member_hook_container member_hook_container;
52
53         //void SetUp()
54         //{}
55
56         //void TearDown()
57         //{}
58     };
59
60     TYPED_TEST_CASE_P( IntrusiveStripedSet );
61
62 // ****************************************************************
63 // striped base hook
64
65     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_compare )
66     {
67         typedef ci::StripedSet< 
68             typename TestFixture::base_hook_container,
69             ci::opt::hash< typename TestFixture::hash1 >,
70             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
71         > set_type;
72
73         set_type s;
74         this->test( s );
75     }
76
77     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_less )
78     {
79         typedef ci::StripedSet<
80             typename TestFixture::base_hook_container,
81             ci::opt::hash< typename TestFixture::hash1 >,
82             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
83         > set_type;
84
85         set_type s( 32 );
86         this->test( s );
87     }
88
89     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_cmpmix )
90     {
91         typedef ci::StripedSet<
92             typename TestFixture::base_hook_container,
93             ci::opt::hash< typename TestFixture::hash1 >,
94             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
95             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
96             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
97         > set_type;
98
99         set_type s( 64 );
100         this->test( s );
101     }
102
103     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold )
104     {
105         typedef ci::StripedSet<
106             typename TestFixture::base_hook_container,
107             ci::opt::hash< typename TestFixture::hash1 >,
108             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
109             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
110             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
111         > set_type;
112
113         set_type s;
114         this->test( s );
115     }
116
117     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold_rt )
118     {
119         typedef ci::StripedSet<
120             typename TestFixture::base_hook_container,
121             ci::opt::hash< typename TestFixture::hash2 >,
122             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
123             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
124             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
125         > set_type;
126
127         set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
128         this->test( s );
129     }
130
131 // ****************************************************************
132 // striped member hook
133
134     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_compare )
135     {
136         typedef ci::StripedSet<
137             typename TestFixture::member_hook_container,
138             ci::opt::hash< typename TestFixture::hash1 >,
139             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
140         > set_type;
141
142         set_type s;
143         this->test( s );
144     }
145
146     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_less )
147     {
148         typedef ci::StripedSet<
149             typename TestFixture::member_hook_container,
150             ci::opt::hash< typename TestFixture::hash1 >,
151             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
152         > set_type;
153
154         set_type s( 32 );
155         this->test( s );
156     }
157
158     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_cmpmix )
159     {
160         typedef ci::StripedSet<
161             typename TestFixture::member_hook_container,
162             ci::opt::hash< typename TestFixture::hash1 >,
163             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
164             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
165             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
166         > set_type;
167
168         set_type s( 64 );
169         this->test( s );
170     }
171
172     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold )
173     {
174         typedef ci::StripedSet<
175             typename TestFixture::member_hook_container,
176             ci::opt::hash< typename TestFixture::hash1 >,
177             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
178             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
179             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
180         > set_type;
181
182         set_type s;
183         this->test( s );
184     }
185
186     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold_rt )
187     {
188         typedef ci::StripedSet<
189             typename TestFixture::member_hook_container,
190             ci::opt::hash< typename TestFixture::hash2 >,
191             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
192             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
193             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
194         > set_type;
195
196         set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
197         this->test( s );
198     }
199
200
201 // ****************************************************************
202 // refinable base hook
203
204     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_compare )
205     {
206         typedef ci::StripedSet< 
207             typename TestFixture::base_hook_container,
208             ci::opt::hash< typename TestFixture::hash1 >,
209             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
210         > set_type;
211
212         set_type s;
213         this->test( s );
214     }
215
216     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_less )
217     {
218         typedef ci::StripedSet<
219             typename TestFixture::base_hook_container,
220             ci::opt::hash< typename TestFixture::hash1 >,
221             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
222         > set_type;
223
224         set_type s( 32 );
225         this->test( s );
226     }
227
228     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_cmpmix )
229     {
230         typedef ci::StripedSet<
231             typename TestFixture::base_hook_container,
232             ci::opt::hash< typename TestFixture::hash1 >,
233             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
234             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
235             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
236         > set_type;
237
238         set_type s( 64 );
239         this->test( s );
240     }
241
242     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold )
243     {
244         typedef ci::StripedSet<
245             typename TestFixture::base_hook_container,
246             ci::opt::hash< typename TestFixture::hash1 >,
247             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
248             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
249             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
250         > set_type;
251
252         set_type s;
253         this->test( s );
254     }
255
256     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold_rt )
257     {
258         typedef ci::StripedSet<
259             typename TestFixture::base_hook_container,
260             ci::opt::hash< typename TestFixture::hash2 >,
261             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
262             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
263             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
264         > set_type;
265
266         set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
267         this->test( s );
268     }
269
270 // ****************************************************************
271 // refinable member hook
272
273     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_compare )
274     {
275         typedef ci::StripedSet<
276             typename TestFixture::member_hook_container,
277             ci::opt::hash< typename TestFixture::hash1 >,
278             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
279         > set_type;
280
281         set_type s;
282         this->test( s );
283     }
284
285     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_less )
286     {
287         typedef ci::StripedSet<
288             typename TestFixture::member_hook_container,
289             ci::opt::hash< typename TestFixture::hash1 >,
290             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
291         > set_type;
292
293         set_type s( 32 );
294         this->test( s );
295     }
296
297     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_cmpmix )
298     {
299         typedef ci::StripedSet<
300             typename TestFixture::member_hook_container,
301             ci::opt::hash< typename TestFixture::hash1 >,
302             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
303             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
304             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
305         > set_type;
306
307         set_type s( 64 );
308         this->test( s );
309     }
310
311     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold )
312     {
313         typedef ci::StripedSet<
314             typename TestFixture::member_hook_container,
315             ci::opt::hash< typename TestFixture::hash1 >,
316             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
317             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
318             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
319         > set_type;
320
321         set_type s;
322         this->test( s );
323     }
324
325     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold_rt )
326     {
327         typedef ci::StripedSet<
328             typename TestFixture::member_hook_container,
329             ci::opt::hash< typename TestFixture::hash2 >,
330             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
331             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
332             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
333         > set_type;
334
335         set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
336         this->test( s );
337     }
338
339     REGISTER_TYPED_TEST_CASE_P( IntrusiveStripedSet,
340         striped_basehook_compare, striped_basehook_less, striped_basehook_cmpmix, striped_basehook_resizing_threshold, striped_basehook_resizing_threshold_rt, striped_memberhook_compare, striped_memberhook_less, striped_memberhook_cmpmix, striped_memberhook_resizing_threshold, striped_memberhook_resizing_threshold_rt, refinable_basehook_compare, refinable_basehook_less, refinable_basehook_cmpmix, refinable_basehook_resizing_threshold, refinable_basehook_resizing_threshold_rt, refinable_memberhook_compare, refinable_memberhook_less, refinable_memberhook_cmpmix, refinable_memberhook_resizing_threshold, refinable_memberhook_resizing_threshold_rt
341         );
342
343 } // namespace
344
345 #endif // CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H