Stress tests: removed command line parameter --detail-level and envvar CDSTEST_DETAIL...
[libcds.git] / test / stress / set / set_type_split_list.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 #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
32 #define CDSUNIT_SET_TYPE_SPLIT_LIST_H
33
34 #include "set_type.h"
35
36 #include <cds/container/michael_list_hp.h>
37 #include <cds/container/michael_list_dhp.h>
38 #include <cds/container/michael_list_rcu.h>
39 #include <cds/container/lazy_list_hp.h>
40 #include <cds/container/lazy_list_dhp.h>
41 #include <cds/container/lazy_list_rcu.h>
42 #include <cds/container/iterable_list_hp.h>
43 #include <cds/container/iterable_list_dhp.h>
44
45 #include <cds/container/split_list_set.h>
46 #include <cds/container/split_list_set_rcu.h>
47
48 #include <cds_test/stat_splitlist_out.h>
49 #include <cds_test/stat_michael_list_out.h>
50 #include <cds_test/stat_lazy_list_out.h>
51 #include <cds_test/stat_iterable_list_out.h>
52
53 namespace set {
54
55     template <typename GC, typename T, typename Traits = cc::split_list::traits>
56     class SplitListSet : public cc::SplitListSet< GC, T, Traits >
57     {
58         typedef cc::SplitListSet< GC, T, Traits > base_class;
59     public:
60         template <typename Config>
61         SplitListSet( Config const& cfg )
62             : base_class( cfg.s_nSetSize, cfg.s_nLoadFactor )
63         {}
64
65         // for testing
66         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
67         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
68         static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
69     };
70
71     struct tag_SplitListSet;
72
73     template <typename Key, typename Val>
74     struct set_type< tag_SplitListSet, Key, Val >: public set_type_base< Key, Val >
75     {
76         typedef set_type_base< Key, Val > base_class;
77         typedef typename base_class::key_val key_val;
78         typedef typename base_class::compare compare;
79         typedef typename base_class::less less;
80         typedef typename base_class::hash hash;
81
82         // ***************************************************************************
83         // SplitListSet based on MichaelList
84
85         struct traits_SplitList_Michael_dyn_cmp :
86             public cc::split_list::make_traits<
87                 cc::split_list::ordered_list<cc::michael_list_tag>
88                 ,co::hash< hash >
89                 ,cc::split_list::ordered_list_traits<
90                     typename cc::michael_list::make_traits<
91                         co::compare< compare >
92                     >::type
93                 >
94             >::type
95         {};
96         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
97         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
98         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
99         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
100         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
101 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
102         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
103         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
104 #endif
105
106         struct traits_SplitList_Michael_dyn_cmp_stat :
107             public cc::split_list::make_traits<
108                 cc::split_list::ordered_list<cc::michael_list_tag>
109                 ,co::hash< hash >
110                 ,co::stat< cc::split_list::stat<> >
111                 ,cc::split_list::ordered_list_traits<
112                     typename cc::michael_list::make_traits<
113                         co::compare< compare >
114                         ,co::stat< cc::michael_list::stat<>>
115                     >::type
116                 >
117             >::type
118         {};
119         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
120         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
121         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
122         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
123         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
124 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
125         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
126         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
127 #endif
128
129         struct traits_SplitList_Michael_dyn_cmp_seqcst :
130             public cc::split_list::make_traits<
131                 cc::split_list::ordered_list<cc::michael_list_tag>
132                 ,co::hash< hash >
133                 ,co::memory_model< co::v::sequential_consistent >
134                 ,cc::split_list::ordered_list_traits<
135                     typename cc::michael_list::make_traits<
136                         co::compare< compare >
137                         ,co::memory_model< co::v::sequential_consistent >
138                     >::type
139                 >
140             >::type
141         {};
142         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
143         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
144         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
145         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
146         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
147 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
148         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
149         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
150 #endif
151
152         struct traits_SplitList_Michael_st_cmp :
153             public cc::split_list::make_traits<
154                 cc::split_list::ordered_list<cc::michael_list_tag>
155                 ,cc::split_list::dynamic_bucket_table< false >
156                 ,co::hash< hash >
157                 ,cc::split_list::ordered_list_traits<
158                     typename cc::michael_list::make_traits<
159                         co::compare< compare >
160                     >::type
161                 >
162             >::type
163         {};
164         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
165         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
166         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
167         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
168         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
169 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
170         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
171         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
172 #endif
173
174         //HP + less
175         struct traits_SplitList_Michael_dyn_less :
176             public cc::split_list::make_traits<
177                 cc::split_list::ordered_list<cc::michael_list_tag>
178                 ,co::hash< hash >
179                 ,cc::split_list::ordered_list_traits<
180                     typename cc::michael_list::make_traits<
181                         co::less< less >
182                     >::type
183                 >
184             >::type
185         {};
186         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
187         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
188         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
189         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
190         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
191 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
192         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
193         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
194 #endif
195
196         struct traits_SplitList_Michael_st_less :
197             public cc::split_list::make_traits<
198                 cc::split_list::ordered_list<cc::michael_list_tag>
199                 ,cc::split_list::dynamic_bucket_table< false >
200                 ,co::hash< hash >
201                 ,cc::split_list::ordered_list_traits<
202                     typename cc::michael_list::make_traits<
203                         co::less< less >
204                     >::type
205                 >
206             >::type
207         {};
208         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
209         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
210         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
211         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
212         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
213 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
214         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
215         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
216 #endif
217
218         struct traits_SplitList_Michael_st_less_stat :
219             public cc::split_list::make_traits<
220                 cc::split_list::ordered_list<cc::michael_list_tag>
221                 ,cc::split_list::dynamic_bucket_table< false >
222                 ,co::hash< hash >
223                 ,co::stat< cc::split_list::stat<>>
224                 ,cc::split_list::ordered_list_traits<
225                     typename cc::michael_list::make_traits<
226                         co::less< less >
227                         ,co::stat< cc::michael_list::stat<>>
228                     >::type
229                 >
230             >::type
231         {};
232         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
233         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
234         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
235         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
236         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
237 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
238         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
239         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
240 #endif
241
242         // ***************************************************************************
243         // SplitListSet based on LazyList
244
245         struct traits_SplitList_Lazy_dyn_cmp :
246             public cc::split_list::make_traits<
247                 cc::split_list::ordered_list<cc::lazy_list_tag>
248                 ,co::hash< hash >
249                 ,cc::split_list::ordered_list_traits<
250                     typename cc::lazy_list::make_traits<
251                         co::compare< compare >
252                     >::type
253                 >
254             >::type
255         {};
256         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
257         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
258         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
259         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
260         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
261 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
262         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
263         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
264 #endif
265
266         struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
267         {
268             typedef cc::split_list::stat<> stat;
269             typedef typename cc::lazy_list::make_traits<
270                 co::compare< compare >
271                 , co::stat< cc::lazy_list::stat<>>
272             >::type ordered_list_traits;
273         };
274         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
275         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
276         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
277         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
278         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
279 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
280         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
281         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
282 #endif
283
284         struct traits_SplitList_Lazy_dyn_cmp_seqcst :
285             public cc::split_list::make_traits<
286                 cc::split_list::ordered_list<cc::lazy_list_tag>
287                 ,co::hash< hash >
288                 ,co::memory_model< co::v::sequential_consistent >
289                 ,cc::split_list::ordered_list_traits<
290                     typename cc::lazy_list::make_traits<
291                         co::compare< compare >
292                         ,co::memory_model< co::v::sequential_consistent >
293                     >::type
294                 >
295             >::type
296         {};
297         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
298         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
299         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
300         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
301         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
302 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
303         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
304         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
305 #endif
306
307         struct traits_SplitList_Lazy_st_cmp :
308             public cc::split_list::make_traits<
309                 cc::split_list::ordered_list<cc::lazy_list_tag>
310                 ,cc::split_list::dynamic_bucket_table< false >
311                 ,co::hash< hash >
312                 ,cc::split_list::ordered_list_traits<
313                     typename cc::lazy_list::make_traits<
314                         co::compare< compare >
315                     >::type
316                 >
317             >::type
318         {};
319         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
320         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
321         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
322         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
323         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
324 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
325         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
326         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
327 #endif
328
329         struct traits_SplitList_Lazy_dyn_less :
330             public cc::split_list::make_traits<
331                 cc::split_list::ordered_list<cc::lazy_list_tag>
332                 ,co::hash< hash >
333                 ,cc::split_list::ordered_list_traits<
334                     typename cc::lazy_list::make_traits<
335                         co::less< less >
336                     >::type
337                 >
338             >::type
339         {};
340         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
341         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
342         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
343         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
344         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
345 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
346         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
347         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
348 #endif
349
350         struct traits_SplitList_Lazy_st_less :
351             public cc::split_list::make_traits<
352                 cc::split_list::ordered_list<cc::lazy_list_tag>
353                 ,cc::split_list::dynamic_bucket_table< false >
354                 ,co::hash< hash >
355                 ,cc::split_list::ordered_list_traits<
356                     typename cc::lazy_list::make_traits<
357                         co::less< less >
358                     >::type
359                 >
360             >::type
361         {};
362         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
363         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
364         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
365         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
366         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
367 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
368         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
369         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
370 #endif
371
372         struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
373         {
374             typedef cc::split_list::stat<> stat;
375             typedef typename cc::lazy_list::make_traits<
376                 co::less< less >
377                 , co::stat< cc::lazy_list::stat<>>
378             >::type ordered_list_traits;
379         };
380         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
381         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
382         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
383         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
384         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
385 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
386         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
387         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
388 #endif
389
390         // ***************************************************************************
391         // SplitListSet based on IterableList
392
393         struct traits_SplitList_Iterable_dyn_cmp :
394             public cc::split_list::make_traits<
395                 cc::split_list::ordered_list<cc::iterable_list_tag>
396                 ,co::hash< hash >
397                 ,cc::split_list::ordered_list_traits<
398                     typename cc::iterable_list::make_traits<
399                         co::compare< compare >
400                     >::type
401                 >
402             >::type
403         {};
404         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_HP_dyn_cmp;
405         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_DHP_dyn_cmp;
406 #if 0
407         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPI_dyn_cmp;
408         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPB_dyn_cmp;
409         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPT_dyn_cmp;
410 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
411         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_SHB_dyn_cmp;
412         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_SHT_dyn_cmp;
413 #endif
414 #endif
415
416         struct traits_SplitList_Iterable_dyn_cmp_stat:
417             public cc::split_list::make_traits<
418                 cc::split_list::ordered_list<cc::iterable_list_tag>
419                 ,co::hash< hash >
420                 ,co::stat< cc::split_list::stat<> >
421                 ,cc::split_list::ordered_list_traits<
422                     typename cc::iterable_list::make_traits<
423                         co::compare< compare >
424                         ,co::stat< cc::iterable_list::stat<>>
425                     >::type
426                 >
427             >::type
428         {};
429         typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_HP_dyn_cmp_stat;
430         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_DHP_dyn_cmp_stat;
431 #if 0
432         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPI_dyn_cmp_stat;
433         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPB_dyn_cmp_stat;
434         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPT_dyn_cmp_stat;
435 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
436         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_SHB_dyn_cmp_stat;
437         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_SHT_dyn_cmp_stat;
438 #endif
439 #endif
440
441         struct traits_SplitList_Iterable_dyn_cmp_seqcst :
442             public cc::split_list::make_traits<
443                 cc::split_list::ordered_list<cc::iterable_list_tag>
444                 ,co::hash< hash >
445                 ,co::memory_model< co::v::sequential_consistent >
446                 ,cc::split_list::ordered_list_traits<
447                     typename cc::iterable_list::make_traits<
448                         co::compare< compare >
449                         ,co::memory_model< co::v::sequential_consistent >
450                     >::type
451                 >
452             >::type
453         {};
454         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_HP_dyn_cmp_seqcst;
455         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_DHP_dyn_cmp_seqcst;
456 #if 0
457         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPI_dyn_cmp_seqcst;
458         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPB_dyn_cmp_seqcst;
459         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPT_dyn_cmp_seqcst;
460 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
461         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_SHB_dyn_cmp_seqcst;
462         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_SHT_dyn_cmp_seqcst;
463 #endif
464 #endif
465
466         struct traits_SplitList_Iterable_st_cmp :
467             public cc::split_list::make_traits<
468                 cc::split_list::ordered_list<cc::iterable_list_tag>
469                 ,cc::split_list::dynamic_bucket_table< false >
470                 ,co::hash< hash >
471                 ,cc::split_list::ordered_list_traits<
472                     typename cc::iterable_list::make_traits<
473                         co::compare< compare >
474                     >::type
475                 >
476             >::type
477         {};
478         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_HP_st_cmp;
479         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_DHP_st_cmp;
480 #if 0
481         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPI_st_cmp;
482         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPB_st_cmp;
483         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPT_st_cmp;
484 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
485         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_SHB_st_cmp;
486         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_SHT_st_cmp;
487 #endif
488 #endif
489
490         //HP + less
491         struct traits_SplitList_Iterable_dyn_less :
492             public cc::split_list::make_traits<
493                 cc::split_list::ordered_list<cc::iterable_list_tag>
494                 ,co::hash< hash >
495                 ,cc::split_list::ordered_list_traits<
496                     typename cc::iterable_list::make_traits<
497                         co::less< less >
498                     >::type
499                 >
500             >::type
501         {};
502         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_HP_dyn_less;
503         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_DHP_dyn_less;
504 #if 0
505         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPI_dyn_less;
506         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPB_dyn_less;
507         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPT_dyn_less;
508 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
509         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_SHB_dyn_less;
510         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_SHT_dyn_less;
511 #endif
512 #endif
513
514         struct traits_SplitList_Iterable_st_less :
515             public cc::split_list::make_traits<
516                 cc::split_list::ordered_list<cc::iterable_list_tag>
517                 ,cc::split_list::dynamic_bucket_table< false >
518                 ,co::hash< hash >
519                 ,cc::split_list::ordered_list_traits<
520                     typename cc::iterable_list::make_traits<
521                         co::less< less >
522                     >::type
523                 >
524             >::type
525         {};
526         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_HP_st_less;
527         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_DHP_st_less;
528 #if 0
529         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPI_st_less;
530         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPB_st_less;
531         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPT_st_less;
532 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
533         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_SHB_st_less;
534         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_SHT_st_less;
535 #endif
536 #endif
537
538         struct traits_SplitList_Iterable_st_less_stat :
539             public cc::split_list::make_traits<
540                 cc::split_list::ordered_list<cc::iterable_list_tag>
541                 ,cc::split_list::dynamic_bucket_table< false >
542                 ,co::hash< hash >
543                 ,co::stat< cc::split_list::stat<>>
544                 ,cc::split_list::ordered_list_traits<
545                     typename cc::iterable_list::make_traits<
546                         co::less< less >
547                         ,co::stat< cc::iterable_list::stat<>>
548                     >::type
549                 >
550             >::type
551         {};
552         typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_HP_st_less_stat;
553         typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_DHP_st_less_stat;
554 #if 0
555         typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPI_st_less_stat;
556         typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPB_st_less_stat;
557         typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPT_st_less_stat;
558 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
559         typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_SHB_st_less_stat;
560         typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_SHT_st_less_stat;
561 #endif
562 #endif
563
564     };
565
566     template <typename GC, typename T, typename Traits>
567     static inline void print_stat( cds_test::property_stream& o, SplitListSet<GC, T, Traits> const& s )
568     {
569         o << s.statistics()
570           << cds_test::stat_prefix( "list_stat" )
571           << s.list_statistics()
572           << cds_test::stat_prefix( "" );
573     }
574
575 } // namespace set
576
577
578 #define CDSSTRESS_SplitListSet_case( fixture, test_case, splitlist_set_type, key_type, value_type ) \
579     TEST_P( fixture, splitlist_set_type ) \
580     { \
581         typedef set::set_type< tag_SplitListSet, key_type, value_type >::splitlist_set_type set_type; \
582         test_case<set_type>(); \
583     }
584
585
586 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
587
588 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 1
589 #   define CDSSTRESS_SplitListSet_SHRCU_2( fixture, test_case, key_type, value_type ) \
590         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_seqcst,  key_type, value_type ) \
591         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_seqcst,  key_type, value_type ) \
592
593 #else
594 #   define CDSSTRESS_SplitListSet_SHRCU_2( fixture, test_case, key_type, value_type )
595 #endif
596
597 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL == 1
598 #   define CDSSTRESS_SplitListSet_SHRCU_1( fixture, test_case, key_type, value_type ) \
599         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp,         key_type, value_type ) \
600         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_stat,    key_type, value_type ) \
601         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_cmp,          key_type, value_type ) \
602         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_less,        key_type, value_type ) \
603         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less,         key_type, value_type ) \
604         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less_stat,    key_type, value_type ) \
605         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp,            key_type, value_type ) \
606         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp_stat,       key_type, value_type ) \
607         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_cmp,             key_type, value_type ) \
608         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_less,           key_type, value_type ) \
609         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less,            key_type, value_type ) \
610         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less_stat,       key_type, value_type ) \
611
612 #else
613 #   define CDSSTRESS_SplitListSet_SHRCU_1( fixture, test_case, key_type, value_type )
614 #endif
615
616
617 #   define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type ) \
618         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp,         key_type, value_type ) \
619         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_stat,    key_type, value_type ) \
620         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_cmp,          key_type, value_type ) \
621         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_less,        key_type, value_type ) \
622         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less,         key_type, value_type ) \
623         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less_stat,    key_type, value_type ) \
624         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp,            key_type, value_type ) \
625         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp_stat,       key_type, value_type ) \
626         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_cmp,             key_type, value_type ) \
627         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_less,           key_type, value_type ) \
628         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less,            key_type, value_type ) \
629         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less_stat,       key_type, value_type ) \
630         CDSSTRESS_SplitListSet_SHRCU_1( fixture, test_case, key_type, value_type ) \
631         CDSSTRESS_SplitListSet_SHRCU_2( fixture, test_case, key_type, value_type ) \
632
633 #else
634 #   define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
635 #endif
636
637 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 1
638 #   define CDSSTRESS_SplitListSet_2( fixture, test_case, key_type, value_type ) \
639         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_seqcst,       key_type, value_type ) \
640         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_seqcst,      key_type, value_type ) \
641         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_seqcst,  key_type, value_type ) \
642         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_seqcst,  key_type, value_type ) \
643         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_seqcst,  key_type, value_type ) \
644
645 #else
646 #   define CDSSTRESS_SplitListSet_2( fixture, test_case, key_type, value_type )
647 #endif
648
649 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL == 1
650 #   define CDSSTRESS_SplitListSet_1( fixture, test_case, key_type, value_type ) \
651     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp,             key_type, value_type ) \
652     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp,         key_type, value_type ) \
653     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_stat,         key_type, value_type ) \
654     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_stat,    key_type, value_type ) \
655     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_stat,    key_type, value_type ) \
656     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_cmp,               key_type, value_type ) \
657     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_cmp,          key_type, value_type ) \
658     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_cmp,          key_type, value_type ) \
659     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_less,            key_type, value_type ) \
660     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_less,        key_type, value_type ) \
661     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less,              key_type, value_type ) \
662     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less,         key_type, value_type ) \
663     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less,         key_type, value_type ) \
664     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less_stat,        key_type, value_type ) \
665     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less_stat,    key_type, value_type ) \
666     \
667     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp,                key_type, value_type ) \
668     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp,            key_type, value_type ) \
669     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp_stat,            key_type, value_type ) \
670     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp_stat,       key_type, value_type ) \
671     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp_stat,       key_type, value_type ) \
672     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_cmp,                 key_type, value_type ) \
673     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_cmp,             key_type, value_type ) \
674     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_less,                key_type, value_type ) \
675     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_less,           key_type, value_type ) \
676     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_less,           key_type, value_type ) \
677     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less,                key_type, value_type ) \
678     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less,            key_type, value_type ) \
679     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less_stat,            key_type, value_type ) \
680     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less_stat,       key_type, value_type ) \
681     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_stat,       key_type, value_type ) \
682
683 #else
684 #   define CDSSTRESS_SplitListSet_1( fixture, test_case, key_type, value_type )
685 #endif
686
687 #define CDSSTRESS_SplitListSet( fixture, test_case, key_type, value_type ) \
688     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp,              key_type, value_type ) \
689     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp,         key_type, value_type ) \
690     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp,         key_type, value_type ) \
691     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_stat,        key_type, value_type ) \
692     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_stat,    key_type, value_type ) \
693     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_cmp,              key_type, value_type ) \
694     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_cmp,          key_type, value_type ) \
695     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_less,             key_type, value_type ) \
696     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_less,        key_type, value_type ) \
697     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_less,        key_type, value_type ) \
698     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less,             key_type, value_type ) \
699     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less,         key_type, value_type ) \
700     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less_stat,         key_type, value_type ) \
701     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less_stat,    key_type, value_type ) \
702     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less_stat,    key_type, value_type ) \
703     \
704     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp,                 key_type, value_type ) \
705     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp,            key_type, value_type ) \
706     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp,            key_type, value_type ) \
707     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp_stat,           key_type, value_type ) \
708     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp_stat,       key_type, value_type ) \
709     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_cmp,                  key_type, value_type ) \
710     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_cmp,             key_type, value_type ) \
711     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_cmp,             key_type, value_type ) \
712     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_less,               key_type, value_type ) \
713     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_less,           key_type, value_type ) \
714     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less,                 key_type, value_type ) \
715     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less,            key_type, value_type ) \
716     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less,            key_type, value_type ) \
717     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less_stat,           key_type, value_type ) \
718     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_stat,       key_type, value_type ) \
719     CDSSTRESS_SplitListSet_1( fixture, test_case, key_type, value_type ) \
720     CDSSTRESS_SplitListSet_2( fixture, test_case, key_type, value_type ) \
721     CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
722
723
724 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 0
725 #   define CDSSTRESS_SplitListIterableSet_1( fixture, test_case, key_type, value_type ) \
726         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp,             key_type, value_type ) \
727         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp_stat,         key_type, value_type ) \
728         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp_seqcst,       key_type, value_type ) \
729         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp_seqcst,      key_type, value_type ) \
730         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_cmp,               key_type, value_type ) \
731         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_less,            key_type, value_type ) \
732         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_less,              key_type, value_type ) \
733         CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_less_stat,        key_type, value_type ) \
734
735 #else
736 #   define CDSSTRESS_SplitListIterableSet_1( fixture, test_case, key_type, value_type )
737 #endif
738
739 #define CDSSTRESS_SplitListIterableSet( fixture, test_case, key_type, value_type ) \
740     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp,              key_type, value_type ) \
741     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp_stat,        key_type, value_type ) \
742     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_cmp,              key_type, value_type ) \
743     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_less,             key_type, value_type ) \
744     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_less,             key_type, value_type ) \
745     CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_less_stat,         key_type, value_type ) \
746     CDSSTRESS_SplitListIterableSet_1( fixture, test_case, key_type, value_type )
747
748 #endif // #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H