2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
6 Source code repo: http://github.com/khizmax/libcds/
7 Download: http://sourceforge.net/projects/libcds/files/
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are met:
12 * Redistributions of source code must retain the above copyright notice, this
13 list of conditions and the following disclaimer.
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.
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.
31 #ifndef CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
32 #define CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
34 #include "test_intrusive_set.h"
36 #include <cds/intrusive/striped_set.h>
39 namespace ci = cds::intrusive;
41 template <typename ContainerPair>
42 class IntrusiveStripedSet : public cds_test::intrusive_set
45 typedef cds_test::intrusive_set base_class;
47 typedef typename ContainerPair::base_item base_item;
48 typedef typename ContainerPair::member_item member_item;
50 typedef typename ContainerPair::base_hook_container base_hook_container;
51 typedef typename ContainerPair::member_hook_container member_hook_container;
60 TYPED_TEST_CASE_P( IntrusiveStripedSet );
62 // ****************************************************************
65 TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_compare )
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 >>
77 TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_less )
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 >>
89 TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_cmpmix )
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 >>
103 TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold )
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>>
117 TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold_rt )
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>>
127 set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
131 // ****************************************************************
132 // striped member hook
134 TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_compare )
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 >>
146 TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_less )
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 >>
158 TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_cmpmix )
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 >>
172 TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold )
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>>
186 TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold_rt )
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>>
196 set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
201 // ****************************************************************
202 // refinable base hook
204 TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_compare )
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 >>
216 TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_less )
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 >>
228 TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_cmpmix )
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 >>
242 TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold )
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>>
256 TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold_rt )
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>>
266 set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
270 // ****************************************************************
271 // refinable member hook
273 TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_compare )
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 >>
285 TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_less )
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 >>
297 TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_cmpmix )
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 >>
311 TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold )
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>>
325 TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold_rt )
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>>
335 set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
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
345 #endif // CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H