Removed trailing spaces
[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         std::vector< typename set_type::value_type > data;
74         {
75             set_type s;
76             this->test( s, data );
77         }
78     }
79
80     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_less )
81     {
82         typedef ci::StripedSet<
83             typename TestFixture::base_hook_container,
84             ci::opt::hash< typename TestFixture::hash1 >,
85             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
86         > set_type;
87
88         std::vector< typename set_type::value_type > data;
89         {
90             set_type s;
91             this->test( s, data );
92         }
93     }
94
95     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_cmpmix )
96     {
97         typedef ci::StripedSet<
98             typename TestFixture::base_hook_container,
99             ci::opt::hash< typename TestFixture::hash1 >,
100             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
101             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
102             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
103         > set_type;
104
105         std::vector< typename set_type::value_type > data;
106         {
107             set_type s( 64 );
108             this->test( s, data );
109         }
110     }
111
112     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold )
113     {
114         typedef ci::StripedSet<
115             typename TestFixture::base_hook_container,
116             ci::opt::hash< typename TestFixture::hash1 >,
117             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
118             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
119             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
120         > set_type;
121
122         std::vector< typename set_type::value_type > data;
123         {
124             set_type s;
125             this->test( s, data );
126         }
127     }
128
129     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold_rt )
130     {
131         typedef ci::StripedSet<
132             typename TestFixture::base_hook_container,
133             ci::opt::hash< typename TestFixture::hash2 >,
134             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
135             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
136             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
137         > set_type;
138
139         std::vector< typename set_type::value_type > data;
140         {
141             set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
142             this->test( s, data );
143         }
144     }
145
146 // ****************************************************************
147 // striped member hook
148
149     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_compare )
150     {
151         typedef ci::StripedSet<
152             typename TestFixture::member_hook_container,
153             ci::opt::hash< typename TestFixture::hash1 >,
154             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
155         > set_type;
156
157         std::vector< typename set_type::value_type > data;
158         {
159             set_type s;
160             this->test( s, data );
161         }
162     }
163
164     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_less )
165     {
166         typedef ci::StripedSet<
167             typename TestFixture::member_hook_container,
168             ci::opt::hash< typename TestFixture::hash1 >,
169             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
170         > set_type;
171
172         std::vector< typename set_type::value_type > data;
173         {
174             set_type s( 32 );
175             this->test( s, data );
176         }
177     }
178
179     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_cmpmix )
180     {
181         typedef ci::StripedSet<
182             typename TestFixture::member_hook_container,
183             ci::opt::hash< typename TestFixture::hash1 >,
184             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
185             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
186             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
187         > set_type;
188
189         std::vector< typename set_type::value_type > data;
190         {
191             set_type s( 64 );
192             this->test( s, data );
193         }
194     }
195
196     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold )
197     {
198         typedef ci::StripedSet<
199             typename TestFixture::member_hook_container,
200             ci::opt::hash< typename TestFixture::hash1 >,
201             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
202             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
203             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
204         > set_type;
205
206         std::vector< typename set_type::value_type > data;
207         {
208             set_type s;
209             this->test( s, data );
210         }
211     }
212
213     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold_rt )
214     {
215         typedef ci::StripedSet<
216             typename TestFixture::member_hook_container,
217             ci::opt::hash< typename TestFixture::hash2 >,
218             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
219             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
220             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
221         > set_type;
222
223         std::vector< typename set_type::value_type > data;
224         {
225             set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
226             this->test( s, data );
227         }
228     }
229
230
231 // ****************************************************************
232 // refinable base hook
233
234     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_compare )
235     {
236         typedef ci::StripedSet<
237             typename TestFixture::base_hook_container,
238             ci::opt::hash< typename TestFixture::hash1 >,
239             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
240         > set_type;
241
242         std::vector< typename set_type::value_type > data;
243         {
244             set_type s;
245             this->test( s, data );
246         }
247     }
248
249     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_less )
250     {
251         typedef ci::StripedSet<
252             typename TestFixture::base_hook_container,
253             ci::opt::hash< typename TestFixture::hash1 >,
254             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
255         > set_type;
256
257         std::vector< typename set_type::value_type > data;
258         {
259             set_type s( 32 );
260             this->test( s, data );
261         }
262     }
263
264     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_cmpmix )
265     {
266         typedef ci::StripedSet<
267             typename TestFixture::base_hook_container,
268             ci::opt::hash< typename TestFixture::hash1 >,
269             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
270             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
271             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
272         > set_type;
273
274         std::vector< typename set_type::value_type > data;
275         {
276             set_type s( 64 );
277             this->test( s, data );
278         }
279     }
280
281     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold )
282     {
283         typedef ci::StripedSet<
284             typename TestFixture::base_hook_container,
285             ci::opt::hash< typename TestFixture::hash1 >,
286             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
287             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
288             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
289         > set_type;
290
291         std::vector< typename set_type::value_type > data;
292         {
293             set_type s;
294             this->test( s, data );
295         }
296     }
297
298     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold_rt )
299     {
300         typedef ci::StripedSet<
301             typename TestFixture::base_hook_container,
302             ci::opt::hash< typename TestFixture::hash2 >,
303             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
304             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
305             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
306         > set_type;
307
308         std::vector< typename set_type::value_type > data;
309         {
310             set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
311             this->test( s, data );
312         }
313     }
314
315 // ****************************************************************
316 // refinable member hook
317
318     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_compare )
319     {
320         typedef ci::StripedSet<
321             typename TestFixture::member_hook_container,
322             ci::opt::hash< typename TestFixture::hash1 >,
323             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
324         > set_type;
325
326         std::vector< typename set_type::value_type > data;
327         {
328             set_type s;
329             this->test( s, data );
330         }
331     }
332
333     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_less )
334     {
335         typedef ci::StripedSet<
336             typename TestFixture::member_hook_container,
337             ci::opt::hash< typename TestFixture::hash1 >,
338             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
339         > set_type;
340
341         std::vector< typename set_type::value_type > data;
342         {
343             set_type s( 32 );
344             this->test( s, data );
345         }
346     }
347
348     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_cmpmix )
349     {
350         typedef ci::StripedSet<
351             typename TestFixture::member_hook_container,
352             ci::opt::hash< typename TestFixture::hash1 >,
353             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
354             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
355             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
356         > set_type;
357
358         std::vector< typename set_type::value_type > data;
359         {
360             set_type s( 64 );
361             this->test( s, data );
362         }
363     }
364
365     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold )
366     {
367         typedef ci::StripedSet<
368             typename TestFixture::member_hook_container,
369             ci::opt::hash< typename TestFixture::hash1 >,
370             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
371             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
372             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
373         > set_type;
374
375         std::vector< typename set_type::value_type > data;
376         {
377             set_type s;
378             this->test( s, data );
379         }
380     }
381
382     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold_rt )
383     {
384         typedef ci::StripedSet<
385             typename TestFixture::member_hook_container,
386             ci::opt::hash< typename TestFixture::hash2 >,
387             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
388             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
389             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
390         > set_type;
391
392         std::vector< typename set_type::value_type > data;
393         {
394             set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
395             this->test( s, data );
396         }
397     }
398
399     REGISTER_TYPED_TEST_CASE_P( IntrusiveStripedSet,
400         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
401         );
402
403 } // namespace
404
405 #endif // CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H