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.
30 #ifndef CDSUNIT_MAP_TEST_SPLIT_LIST_LAZY_RCU_H
31 #define CDSUNIT_MAP_TEST_SPLIT_LIST_LAZY_RCU_H
33 #include "test_map_rcu.h"
34 #include <cds/container/lazy_list_rcu.h>
35 #include <cds/container/split_list_map_rcu.h>
36 #include <cds/intrusive/free_list.h>
38 namespace cc = cds::container;
41 class SplitListLazyMap: public cds_test::container_map_rcu
43 typedef cds_test::container_map_rcu base_class;
45 typedef cds::urcu::gc<RCU> rcu_type;
51 cds::threading::Manager::attachThread();
56 cds::threading::Manager::detachThread();
61 TYPED_TEST_CASE_P( SplitListLazyMap );
63 //TYPED_TEST_P( SplitListLazyMap, compare )
64 TYPED_TEST_P( SplitListLazyMap, compare )
66 typedef typename TestFixture::rcu_type rcu_type;
67 typedef typename TestFixture::key_type key_type;
68 typedef typename TestFixture::value_type value_type;
69 typedef typename TestFixture::hash1 hash1;
71 typedef cc::SplitListMap< rcu_type, key_type, value_type,
72 typename cc::split_list::make_traits<
73 cc::split_list::ordered_list< cc::lazy_list_tag >
74 , cds::opt::hash< hash1 >
75 , cc::split_list::ordered_list_traits<
76 typename cc::lazy_list::make_traits<
77 cds::opt::compare< typename TestFixture::cmp >
83 map_type m( TestFixture::kSize, 2 );
87 TYPED_TEST_P( SplitListLazyMap, less )
89 typedef typename TestFixture::rcu_type rcu_type;
90 typedef typename TestFixture::key_type key_type;
91 typedef typename TestFixture::value_type value_type;
92 typedef typename TestFixture::hash1 hash1;
94 typedef cc::SplitListMap< rcu_type, key_type, value_type,
95 typename cc::split_list::make_traits<
96 cc::split_list::ordered_list< cc::lazy_list_tag >
97 , cds::opt::hash< hash1 >
98 , cc::split_list::ordered_list_traits<
99 typename cc::lazy_list::make_traits<
100 cds::opt::less< typename TestFixture::less >
106 map_type m( TestFixture::kSize, 4 );
110 TYPED_TEST_P( SplitListLazyMap, cmpmix )
112 typedef typename TestFixture::rcu_type rcu_type;
113 typedef typename TestFixture::key_type key_type;
114 typedef typename TestFixture::value_type value_type;
115 typedef typename TestFixture::hash1 hash1;
117 typedef cc::SplitListMap< rcu_type, key_type, value_type,
118 typename cc::split_list::make_traits<
119 cc::split_list::ordered_list< cc::lazy_list_tag >
120 , cds::opt::hash< hash1 >
121 , cc::split_list::ordered_list_traits<
122 typename cc::lazy_list::make_traits<
123 cds::opt::less< typename TestFixture::less >
124 , cds::opt::compare< typename TestFixture::cmp >
130 map_type m( TestFixture::kSize, 2 );
134 TYPED_TEST_P( SplitListLazyMap, item_counting )
136 typedef typename TestFixture::rcu_type rcu_type;
137 typedef typename TestFixture::key_type key_type;
138 typedef typename TestFixture::value_type value_type;
139 typedef typename TestFixture::hash1 hash1;
141 struct map_traits: public cc::split_list::traits
143 typedef cc::lazy_list_tag ordered_list;
145 typedef cds::atomicity::item_counter item_counter;
147 struct ordered_list_traits: public cc::lazy_list::traits
149 typedef typename TestFixture::cmp compare;
150 typedef typename TestFixture::less less;
151 typedef cds::backoff::empty back_off;
154 typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
156 map_type m( TestFixture::kSize, 1 );
160 TYPED_TEST_P( SplitListLazyMap, stat )
162 typedef typename TestFixture::rcu_type rcu_type;
163 typedef typename TestFixture::key_type key_type;
164 typedef typename TestFixture::value_type value_type;
165 typedef typename TestFixture::hash1 hash1;
167 struct map_traits: public cc::split_list::traits
169 typedef cc::lazy_list_tag ordered_list;
171 typedef cds::atomicity::item_counter item_counter;
172 typedef cc::split_list::stat<> stat;
174 struct ordered_list_traits: public cc::lazy_list::traits
176 typedef typename TestFixture::less less;
177 typedef cds::opt::v::sequential_consistent memory_model;
180 typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
182 map_type m( TestFixture::kSize, 3 );
186 TYPED_TEST_P( SplitListLazyMap, back_off )
188 typedef typename TestFixture::rcu_type rcu_type;
189 typedef typename TestFixture::key_type key_type;
190 typedef typename TestFixture::value_type value_type;
191 typedef typename TestFixture::hash1 hash1;
193 struct map_traits: public cc::split_list::traits
195 typedef cc::lazy_list_tag ordered_list;
197 typedef cds::atomicity::item_counter item_counter;
198 typedef cds::backoff::yield back_off;
199 typedef cds::opt::v::sequential_consistent memory_model;
201 struct ordered_list_traits: public cc::lazy_list::traits
203 typedef typename TestFixture::cmp compare;
204 typedef cds::backoff::pause back_off;
207 typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
209 map_type m( TestFixture::kSize, 2 );
213 TYPED_TEST_P( SplitListLazyMap, free_list )
215 typedef typename TestFixture::rcu_type rcu_type;
216 typedef typename TestFixture::key_type key_type;
217 typedef typename TestFixture::value_type value_type;
218 typedef typename TestFixture::hash1 hash1;
220 struct map_traits: public cc::split_list::traits
222 typedef cc::lazy_list_tag ordered_list;
224 typedef cds::intrusive::FreeList free_list;
226 struct ordered_list_traits: public cc::lazy_list::traits
228 typedef typename TestFixture::cmp compare;
229 typedef cds::backoff::pause back_off;
232 typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
234 map_type m( TestFixture::kSize, 2 );
238 TYPED_TEST_P( SplitListLazyMap, mutex )
240 typedef typename TestFixture::rcu_type rcu_type;
241 typedef typename TestFixture::key_type key_type;
242 typedef typename TestFixture::value_type value_type;
243 typedef typename TestFixture::hash1 hash1;
245 struct map_traits: public cc::split_list::traits
247 typedef cc::lazy_list_tag ordered_list;
249 typedef cds::atomicity::item_counter item_counter;
250 typedef cds::backoff::yield back_off;
251 typedef cds::opt::v::sequential_consistent memory_model;
253 struct ordered_list_traits: public cc::lazy_list::traits
255 typedef typename TestFixture::cmp compare;
256 typedef cds::backoff::pause back_off;
257 typedef std::mutex lock_type;
260 typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
262 map_type m( TestFixture::kSize, 2 );
267 struct set_static_traits: public cc::split_list::traits
269 static bool const dynamic_bucket_table = false;
273 TYPED_TEST_P( SplitListLazyMap, static_bucket_table )
275 typedef typename TestFixture::rcu_type rcu_type;
276 typedef typename TestFixture::key_type key_type;
277 typedef typename TestFixture::value_type value_type;
278 typedef typename TestFixture::hash1 hash1;
280 struct map_traits: public set_static_traits
282 typedef cc::lazy_list_tag ordered_list;
284 typedef cds::atomicity::item_counter item_counter;
286 struct ordered_list_traits: public cc::lazy_list::traits
288 typedef typename TestFixture::cmp compare;
289 typedef cds::backoff::pause back_off;
292 typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
294 map_type m( TestFixture::kSize, 4 );
298 TYPED_TEST_P( SplitListLazyMap, static_bucket_table_free_list )
300 typedef typename TestFixture::rcu_type rcu_type;
301 typedef typename TestFixture::key_type key_type;
302 typedef typename TestFixture::value_type value_type;
303 typedef typename TestFixture::hash1 hash1;
305 struct map_traits: public set_static_traits
307 typedef cc::lazy_list_tag ordered_list;
309 typedef cds::atomicity::item_counter item_counter;
310 typedef cds::intrusive::FreeList free_list;
312 struct ordered_list_traits: public cc::lazy_list::traits
314 typedef typename TestFixture::cmp compare;
315 typedef cds::backoff::pause back_off;
318 typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
320 map_type m( TestFixture::kSize, 4 );
324 REGISTER_TYPED_TEST_CASE_P( SplitListLazyMap,
325 compare, less, cmpmix, item_counting, stat, back_off, mutex, free_list, static_bucket_table, static_bucket_table_free_list
329 #endif // CDSUNIT_MAP_TEST_SPLIT_LIST_LAZY_RCU_H