Removed signal_threaded uRCU
[libcds.git] / test / stress / map / map_type_feldman_hashmap.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_MAP_TYPE_FELDMAN_HASHMAP_H
32 #define CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H
33
34 #include "map_type.h"
35
36 #include <cds/container/feldman_hashmap_hp.h>
37 #include <cds/container/feldman_hashmap_dhp.h>
38 #include <cds/container/feldman_hashmap_rcu.h>
39
40 #include <cds_test/stat_feldman_hashset_out.h>
41 #include <cds_test/hash_func.h>
42
43 namespace map {
44
45     template <class GC, typename Key, typename T, typename Traits = cc::feldman_hashmap::traits>
46     class FeldmanHashMap : public cc::FeldmanHashMap< GC, Key, T, Traits >
47     {
48         typedef cc::FeldmanHashMap< GC, Key, T, Traits > base_class;
49     public:
50
51         template <typename OtherTraits>
52         struct rebind_traits {
53             typedef FeldmanHashMap<GC, Key, T, OtherTraits > result;
54         };
55
56         template <typename Config>
57         FeldmanHashMap( Config const& cfg)
58             : base_class( cfg.s_nFeldmanMap_HeadBits, cfg.s_nFeldmanMap_ArrayBits )
59         {}
60
61         template <typename Iterator>
62         typename std::enable_if< std::is_same< Iterator, typename base_class::iterator>::value, Iterator>::type
63         get_begin()
64         {
65             return base_class::begin();
66         }
67
68         template <typename Iterator>
69         typename std::enable_if< std::is_same< Iterator, typename base_class::iterator>::value, Iterator>::type
70         get_end()
71         {
72             return base_class::end();
73         }
74
75         template <typename Iterator>
76         typename std::enable_if< std::is_same< Iterator, typename base_class::reverse_iterator>::value, Iterator>::type
77             get_begin()
78         {
79             return base_class::rbegin();
80         }
81
82         template <typename Iterator>
83         typename std::enable_if< std::is_same< Iterator, typename base_class::reverse_iterator>::value, Iterator>::type
84             get_end()
85         {
86             return base_class::rend();
87         }
88
89         // for testing
90         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
91         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
92         static CDS_CONSTEXPR bool const c_bEraseExactKey = true;
93     };
94
95     struct tag_FeldmanHashMap;
96
97     template <typename Key, typename Value>
98     struct map_type< tag_FeldmanHashMap, Key, Value >: public map_type_base< Key, Value >
99     {
100         typedef map_type_base< Key, Value >      base_class;
101         typedef typename base_class::key_compare compare;
102         typedef typename base_class::key_less    less;
103
104         struct traits_FeldmanHashMap_stdhash : public cc::feldman_hashmap::traits
105         {
106             typedef std::hash< Key >    hash;
107             typedef std::less<size_t>   less;
108         };
109
110         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_hp_stdhash;
111         typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_dhp_stdhash;
112         typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpi_stdhash;
113         typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpb_stdhash;
114         typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpt_stdhash;
115 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
116         typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_shb_stdhash;
117 #endif
118
119         struct traits_FeldmanHashMap_stdhash_stat: traits_FeldmanHashMap_stdhash
120         {
121             typedef cc::feldman_hashmap::stat<> stat;
122             typedef std::less<size_t>   less;
123         };
124
125         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_hp_stdhash_stat;
126         typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_dhp_stdhash_stat;
127         typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpi_stdhash_stat;
128         typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpb_stdhash_stat;
129         typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpt_stdhash_stat;
130 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
131         typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_shb_stdhash_stat;
132 #endif
133
134         // CityHash
135 #if CDS_BUILD_BITS == 64
136         struct traits_FeldmanHashMap_city64 : public cc::feldman_hashmap::traits
137         {
138             typedef ::cds_test::city64 hash;
139             typedef ::cds_test::city64::less less;
140         };
141         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_hp_city64;
142         typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_dhp_city64;
143         typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpi_city64;
144         typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpb_city64;
145         typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpt_city64;
146 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
147         typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_shb_city64;
148 #endif
149
150         struct traits_FeldmanHashMap_city64_stat : public traits_FeldmanHashMap_city64
151         {
152             typedef cc::feldman_hashmap::stat<> stat;
153         };
154         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_hp_city64_stat;
155         typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_dhp_city64_stat;
156         typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpi_city64_stat;
157         typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpb_city64_stat;
158         typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpt_city64_stat;
159 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
160         typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_shb_city64_stat;
161 #endif
162
163         struct traits_FeldmanHashMap_city128 : public cc::feldman_hashmap::traits
164         {
165             typedef ::cds_test::city128 hash;
166             typedef ::cds_test::city128::less less;
167         };
168         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_hp_city128;
169         typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_dhp_city128;
170         typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpi_city128;
171         typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpb_city128;
172         typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpt_city128;
173 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
174         typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_shb_city128;
175 #endif
176
177         struct traits_FeldmanHashMap_city128_stat : public traits_FeldmanHashMap_city128
178         {
179             typedef cc::feldman_hashmap::stat<> stat;
180         };
181         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_hp_city128_stat;
182         typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_dhp_city128_stat;
183         typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpi_city128_stat;
184         typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpb_city128_stat;
185         typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpt_city128_stat;
186 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
187         typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_shb_city128_stat;
188 #endif
189 #endif // CDS_BUILD_BITS == 64
190
191
192         // for fixed-sized keys - no hash functor required
193         struct traits_FeldmanHashMap_fixed: public cc::feldman_hashmap::traits
194         {
195             typedef map::cmp<Key>    compare;
196         };
197
198         typedef FeldmanHashMap< cds::gc::HP, Key, Value,  traits_FeldmanHashMap_fixed >    FeldmanHashMap_hp_fixed;
199         typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_fixed >   FeldmanHashMap_dhp_fixed;
200         typedef FeldmanHashMap< rcu_gpi, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_gpi_fixed;
201         typedef FeldmanHashMap< rcu_gpb, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_gpb_fixed;
202         typedef FeldmanHashMap< rcu_gpt, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_gpt_fixed;
203 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
204         typedef FeldmanHashMap< rcu_shb, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_shb_fixed;
205 #endif
206
207         struct traits_FeldmanHashMap_fixed_stat : public traits_FeldmanHashMap_fixed
208         {
209             typedef cc::feldman_hashmap::stat<> stat;
210         };
211         typedef FeldmanHashMap< cds::gc::HP, Key, Value,    traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_hp_fixed_stat;
212         typedef FeldmanHashMap< cds::gc::DHP, Key, Value,   traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_dhp_fixed_stat;
213         typedef FeldmanHashMap< rcu_gpi, Key, Value,        traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_rcu_gpi_fixed_stat;
214         typedef FeldmanHashMap< rcu_gpb, Key, Value,        traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_rcu_gpb_fixed_stat;
215         typedef FeldmanHashMap< rcu_gpt, Key, Value,        traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_rcu_gpt_fixed_stat;
216 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
217         typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_fixed_stat > FeldmanHashMap_rcu_shb_fixed_stat;
218 #endif
219
220     };
221
222     template <typename GC, typename K, typename T, typename Traits >
223     static inline void print_stat( cds_test::property_stream& o, FeldmanHashMap< GC, K, T, Traits > const& m )
224     {
225         std::vector< cds::intrusive::feldman_hashset::level_statistics > level_stat;
226         m.get_level_statistics( level_stat );
227
228         o << m.statistics()
229           << level_stat;
230     }
231
232 #define CDSSTRESS_FeldmanHashMap_case( fixture, test_case, feldman_map_type, key_type, value_type ) \
233     TEST_F( fixture, feldman_map_type ) \
234     { \
235         typedef map::map_type< tag_FeldmanHashMap, key_type, value_type >::feldman_map_type map_type; \
236         test_case<map_type>(); \
237     }
238
239
240 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
241 #   define CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type ) \
242         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_fixed, key_type, value_type ) \
243         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_fixed_stat, key_type, value_type ) \
244
245 #   define CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type ) \
246         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_stdhash, key_type, value_type ) \
247         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_stdhash_stat, key_type, value_type ) \
248
249 #   if CDS_BUILD_BITS == 64
250 #       define CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type ) \
251             CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64, key_type, value_type ) \
252             CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64_stat, key_type, value_type ) \
253
254 #       define CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type ) \
255             CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64, key_type, value_type ) \
256             CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64_stat, key_type, value_type ) \
257
258 #   else
259 #       define CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
260 #       define CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
261 #   endif
262
263 #else
264 #   define CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type )
265 #   define CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type )
266 #   define CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
267 #   define CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
268 #endif
269
270 #define CDSSTRESS_FeldmanHashMap_fixed_HP( fixture, test_case, key_type, value_type ) \
271     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_fixed,         key_type, value_type ) \
272     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_fixed,        key_type, value_type ) \
273     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_fixed_stat,    key_type, value_type ) \
274     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_fixed_stat,   key_type, value_type ) \
275
276 #define CDSSTRESS_FeldmanHashMap_fixed_RCU( fixture, test_case, key_type, value_type ) \
277     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_fixed,        key_type, value_type ) \
278     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_fixed,        key_type, value_type ) \
279     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_fixed,        key_type, value_type ) \
280     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_fixed_stat,   key_type, value_type ) \
281     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_fixed_stat,   key_type, value_type ) \
282     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_fixed_stat,   key_type, value_type ) \
283
284     //CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type )
285
286 #define CDSSTRESS_FeldmanHashMap_fixed( fixture, test_case, key_type, value_type ) \
287     CDSSTRESS_FeldmanHashMap_fixed_HP( fixture, test_case, key_type, value_type ) \
288     CDSSTRESS_FeldmanHashMap_fixed_RCU( fixture, test_case, key_type, value_type ) \
289
290
291 #define CDSSTRESS_FeldmanHashMap_stdhash_HP( fixture, test_case, key_type, value_type ) \
292     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_stdhash,       key_type, value_type ) \
293     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_stdhash,      key_type, value_type ) \
294     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_stdhash_stat,  key_type, value_type ) \
295     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_stdhash_stat, key_type, value_type ) \
296
297 #define CDSSTRESS_FeldmanHashMap_stdhash_RCU( fixture, test_case, key_type, value_type ) \
298     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_stdhash,      key_type, value_type ) \
299     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_stdhash,      key_type, value_type ) \
300     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_stdhash,      key_type, value_type ) \
301     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_stdhash_stat, key_type, value_type ) \
302     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_stdhash_stat, key_type, value_type ) \
303     CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_stdhash_stat, key_type, value_type ) \
304
305     //CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type )
306
307 #define CDSSTRESS_FeldmanHashMap_stdhash( fixture, test_case, key_type, value_type ) \
308     CDSSTRESS_FeldmanHashMap_stdhash_HP( fixture, test_case, key_type, value_type ) \
309     CDSSTRESS_FeldmanHashMap_stdhash_RCU( fixture, test_case, key_type, value_type ) \
310
311
312 #if CDS_BUILD_BITS == 64
313 #   define CDSSTRESS_FeldmanHashMap_city64_HP( fixture, test_case, key_type, value_type ) \
314         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city64, key_type, value_type ) \
315         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city64, key_type, value_type ) \
316         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city64_stat, key_type, value_type ) \
317         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city64_stat, key_type, value_type ) \
318
319 #   define CDSSTRESS_FeldmanHashMap_city64_RCU( fixture, test_case, key_type, value_type ) \
320         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city64, key_type, value_type ) \
321         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city64, key_type, value_type ) \
322         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city64, key_type, value_type ) \
323         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city64_stat, key_type, value_type ) \
324         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city64_stat, key_type, value_type ) \
325         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city64_stat, key_type, value_type ) \
326
327         //CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
328
329 #   define CDSSTRESS_FeldmanHashMap_city64( fixture, test_case, key_type, value_type ) \
330         CDSSTRESS_FeldmanHashMap_city64_HP( fixture, test_case, key_type, value_type ) \
331         CDSSTRESS_FeldmanHashMap_city64_RCU( fixture, test_case, key_type, value_type ) \
332
333
334 #   define CDSSTRESS_FeldmanHashMap_city128_HP( fixture, test_case, key_type, value_type ) \
335         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city128, key_type, value_type ) \
336         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city128, key_type, value_type ) \
337         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city128_stat, key_type, value_type ) \
338         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city128_stat, key_type, value_type ) \
339
340 #   define CDSSTRESS_FeldmanHashMap_city128_RCU( fixture, test_case, key_type, value_type ) \
341         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city128, key_type, value_type ) \
342         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city128, key_type, value_type ) \
343         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city128, key_type, value_type ) \
344         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city128_stat, key_type, value_type ) \
345         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city128_stat, key_type, value_type ) \
346         CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city128_stat, key_type, value_type ) \
347
348         //CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
349
350 #   define CDSSTRESS_FeldmanHashMap_city128( fixture, test_case, key_type, value_type ) \
351         CDSSTRESS_FeldmanHashMap_city128_HP( fixture, test_case, key_type, value_type ) \
352         CDSSTRESS_FeldmanHashMap_city128_RCU( fixture, test_case, key_type, value_type ) \
353
354 #   define CDSSTRESS_FeldmanHashMap_city_HP( fixture, test_case, key_type, value_type ) \
355         CDSSTRESS_FeldmanHashMap_city64_HP( fixture, test_case, key_type, value_type ) \
356         CDSSTRESS_FeldmanHashMap_city128_HP( fixture, test_case, key_type, value_type )
357
358 #   define CDSSTRESS_FeldmanHashMap_city_RCU( fixture, test_case, key_type, value_type ) \
359         CDSSTRESS_FeldmanHashMap_city64_RCU( fixture, test_case, key_type, value_type ) \
360         CDSSTRESS_FeldmanHashMap_city128_RCU( fixture, test_case, key_type, value_type )
361
362 #   define CDSSTRESS_FeldmanHashMap_city( fixture, test_case, key_type, value_type ) \
363         CDSSTRESS_FeldmanHashMap_city_HP( fixture, test_case, key_type, value_type ) \
364         CDSSTRESS_FeldmanHashMap_city_RCU( fixture, test_case, key_type, value_type )
365
366 #else
367 #   define CDSSTRESS_FeldmanHashMap_city64_HP( fixture, test_case, key_type, value_type )
368 #   define CDSSTRESS_FeldmanHashMap_city64_RCU( fixture, test_case, key_type, value_type )
369 #   define CDSSTRESS_FeldmanHashMap_city64( fixture, test_case, key_type, value_type )
370 #   define CDSSTRESS_FeldmanHashMap_city128_HP( fixture, test_case, key_type, value_type )
371 #   define CDSSTRESS_FeldmanHashMap_city128_RCU( fixture, test_case, key_type, value_type )
372 #   define CDSSTRESS_FeldmanHashMap_city128( fixture, test_case, key_type, value_type )
373 #   define CDSSTRESS_FeldmanHashMap_city_HP( fixture, test_case, key_type, value_type )
374 #   define CDSSTRESS_FeldmanHashMap_city_RCU( fixture, test_case, key_type, value_type )
375 #   define CDSSTRESS_FeldmanHashMap_city( fixture, test_case, key_type, value_type )
376 #endif
377
378
379 }   // namespace map
380
381 #endif // #ifndef CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H