c3a5d436f4618469ec91f124b743fbde34dbba34
[libcds.git] / tests / test-hdr / map / hdr_skiplist_map_rcu.h
1 //$$CDS-header$$
2
3 #ifndef __CDSTEST_HDR_SKIPLIST_MAP_RCU_H
4 #define __CDSTEST_HDR_SKIPLIST_MAP_RCU_H
5
6 #include "map/hdr_map.h"
7
8 namespace map {
9
10     class SkipListMapRCUHdrTest: public HashMapHdrTest
11     {
12         typedef HashMapHdrTest base_class;
13         typedef base_class::other_item  wrapped_item;
14         typedef base_class::other_less  wrapped_less;
15
16         template <class Map, typename PrintStat >
17         void test()
18         {
19             Map m;
20             test_int_with( m );
21
22             static int const nLimit = 10000;
23             typedef typename Map::iterator          set_iterator;
24             typedef typename Map::const_iterator    const_set_iterator;
25             typedef typename Map::gc::scoped_lock   rcu_lock;
26
27             int nCount = 0;
28             int nPrevKey = 0;
29
30             // Test iterator - ascending order
31             m.clear();
32             CPPUNIT_ASSERT( m.empty() );
33
34             for ( int i = 0; i < nLimit; ++i ) {
35                 CPPUNIT_ASSERT( m.insert(i, i) );
36             }
37             CPPUNIT_MSG( PrintStat()(m, "Iterator test, ascending insert order") );
38
39             nCount = 0;
40             nPrevKey = 0;
41             {
42                 rcu_lock sl;
43                 for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
44                     CPPUNIT_ASSERT( (*it).first == it->second.m_val );
45                     CPPUNIT_ASSERT( m.find( it->first ));
46                     it->second.m_val = (*it).first * 2;
47                     ++nCount;
48                     if ( it != m.begin() ) {
49                         CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
50                     }
51                     nPrevKey = it->first;
52                 }
53             }
54             CPPUNIT_ASSERT( nCount == nLimit );
55
56             nCount = 0;
57             {
58                 rcu_lock sl;
59                 for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
60                     CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
61                     ++nCount;
62                     if ( it != m.cbegin() ) {
63                         CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
64                     }
65                     nPrevKey = it->first;
66                 }
67             }
68             CPPUNIT_ASSERT( nCount == nLimit );
69
70             // Test iterator - descending order
71             m.clear();
72             CPPUNIT_ASSERT( m.empty() );
73
74             for ( int i = nLimit; i > 0; --i ) {
75                 CPPUNIT_ASSERT( m.insert( i - 1, (i-1) * 2) );
76             }
77             CPPUNIT_MSG( PrintStat()(m, "Iterator test, descending insert order") );
78
79             nCount = 0;
80             nPrevKey = 0;
81             {
82                 rcu_lock sl;
83                 for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
84                     CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
85                     CPPUNIT_ASSERT( m.find( it->first ));
86                     it->second.m_val = (*it).first;
87                     ++nCount;
88                     if ( it != m.begin() ) {
89                         CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
90                     }
91                     nPrevKey = it->first;
92                 }
93             }
94             CPPUNIT_ASSERT( nCount == nLimit );
95
96             nCount = 0;
97             {
98                 rcu_lock sl;
99                 for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
100                     CPPUNIT_ASSERT( (*it).first == it->second.m_val );
101                     ++nCount;
102                     if ( it != m.cbegin() ) {
103                         CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
104                     }
105                     nPrevKey = it->first;
106                 }
107             }
108             CPPUNIT_ASSERT( nCount == nLimit );
109
110             // Test iterator - random order
111             m.clear();
112             CPPUNIT_ASSERT( m.empty() );
113             {
114                 int nRand[nLimit];
115                 for ( int i = 0; i < nLimit; ++i ) {
116                     nRand[i] = i;
117                 }
118                 std::random_shuffle( nRand, nRand + nLimit );
119
120                 for ( int i = 0; i < nLimit; ++i ) {
121                     CPPUNIT_ASSERT( m.insert(i, i) );
122                 }
123                 CPPUNIT_MSG( PrintStat()(m, "Iterator test, random insert order") );
124             }
125
126             nCount = 0;
127             nPrevKey = 0;
128             {
129                 rcu_lock sl;
130                 for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
131                     CPPUNIT_ASSERT( (*it).first == it->second.m_val );
132                     CPPUNIT_ASSERT( m.find( it->first ));
133                     it->second.m_val = (*it).first * 2;
134                     ++nCount;
135                     if ( it != m.begin() ) {
136                         CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
137                     }
138                     nPrevKey = it->first;
139                 }
140             }
141             CPPUNIT_ASSERT( nCount == nLimit );
142
143             nCount = 0;
144             {
145                 rcu_lock sl;
146                 for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
147                     CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
148                     ++nCount;
149                     if ( it != m.cbegin() ) {
150                         CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
151                     }
152                     nPrevKey = it->first;
153                 }
154             }
155             CPPUNIT_ASSERT( nCount == nLimit );
156
157             {
158                 int arrItem[nLimit];
159                 for ( int i = 0; i < nLimit; ++i )
160                     arrItem[i] = i;
161                 std::random_shuffle( arrItem, arrItem + nLimit );
162
163                 typedef typename Map::value_type value_type;
164                 typename Map::exempt_ptr ep;
165
166                 // extract/get
167                 for ( int i = 0; i < nLimit; ++i ) {
168                     int nKey = arrItem[i];
169                     {
170                         rcu_lock l;
171                         value_type * pVal = m.get( nKey );
172                         CPPUNIT_ASSERT( pVal != nullptr );
173                         CPPUNIT_CHECK( pVal->first == nKey );
174                         CPPUNIT_CHECK( pVal->second.m_val == nKey * 2 );
175                     }
176
177                     ep = m.extract( nKey );
178                     CPPUNIT_ASSERT( ep );
179                     CPPUNIT_ASSERT( !ep.empty() );
180                     CPPUNIT_CHECK( ep->first == nKey );
181                     CPPUNIT_CHECK( ep->second.m_val == nKey * 2 );
182
183                     {
184                         rcu_lock l;
185                         CPPUNIT_CHECK( m.get( nKey ) ==  nullptr );
186                     }
187                     ep = m.extract( nKey );
188                     CPPUNIT_CHECK( !ep );
189                 }
190                 CPPUNIT_ASSERT( m.empty() );
191
192                 // extract_with/get_with
193                 for ( int i = 0; i < nLimit; ++i )
194                     CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
195
196                 for ( int i = 0; i < nLimit; ++i ) {
197                     int nKey = arrItem[i];
198                     {
199                         rcu_lock l;
200                         value_type * pVal = m.get_with( wrapped_item(nKey), wrapped_less() );
201                         CPPUNIT_ASSERT( pVal != nullptr );
202                         CPPUNIT_CHECK( pVal->first == nKey );
203                         CPPUNIT_CHECK( pVal->second.m_val == nKey * 2 );
204                     }
205
206                     ep = m.extract_with( wrapped_item( nKey ), wrapped_less() );
207                     CPPUNIT_ASSERT( ep );
208                     CPPUNIT_ASSERT( !ep.empty() );
209                     CPPUNIT_CHECK( ep->first == nKey );
210                     CPPUNIT_CHECK( ep->second.m_val == nKey * 2 );
211
212                     {
213                         rcu_lock l;
214                         CPPUNIT_CHECK( m.get_with( wrapped_item(nKey), wrapped_less() ) ==  nullptr );
215                     }
216                     ep = m.extract_with( wrapped_item( nKey ), wrapped_less() );
217                     CPPUNIT_CHECK( !ep );
218                 }
219                 CPPUNIT_ASSERT( m.empty() );
220
221                 // extract_min
222                 for ( int i = 0; i < nLimit; ++i )
223                     CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
224                 for ( int i = 0; i < nLimit; ++i ) {
225                     ep = m.extract_min();
226                     CPPUNIT_ASSERT( ep );
227                     CPPUNIT_ASSERT( !ep.empty() );
228                     CPPUNIT_CHECK( ep->first == i );
229                     CPPUNIT_CHECK( ep->second.m_val == i * 2 );
230                 }
231                 CPPUNIT_ASSERT( m.empty() );
232                 ep = m.extract_min();
233                 CPPUNIT_CHECK( !ep );
234
235                 // extract_max
236                 for ( int i = 0; i < nLimit; ++i )
237                     CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
238                 for ( int i = nLimit-1; i >= 0; --i ) {
239                     ep = m.extract_max();
240                     CPPUNIT_ASSERT( ep );
241                     CPPUNIT_ASSERT( !ep.empty() );
242                     CPPUNIT_CHECK( ep->first == i );
243                     CPPUNIT_CHECK( ep->second.m_val == i * 2 );
244                 }
245                 CPPUNIT_ASSERT( m.empty() );
246                 ep = m.extract_max();
247                 CPPUNIT_CHECK( !ep );
248             }
249
250             CPPUNIT_MSG( PrintStat()(m, nullptr) );
251         }
252
253     public:
254         void SkipList_RCU_GPI_less();
255         void SkipList_RCU_GPI_cmp();
256         void SkipList_RCU_GPI_cmpless();
257         void SkipList_RCU_GPI_less_stat();
258         void SkipList_RCU_GPI_cmp_stat();
259         void SkipList_RCU_GPI_cmpless_stat();
260         void SkipList_RCU_GPI_xorshift_less();
261         void SkipList_RCU_GPI_xorshift_cmp();
262         void SkipList_RCU_GPI_xorshift_cmpless();
263         void SkipList_RCU_GPI_xorshift_less_stat();
264         void SkipList_RCU_GPI_xorshift_cmp_stat();
265         void SkipList_RCU_GPI_xorshift_cmpless_stat();
266         void SkipList_RCU_GPI_turbopas_less();
267         void SkipList_RCU_GPI_turbopas_cmp();
268         void SkipList_RCU_GPI_turbopas_cmpless();
269         void SkipList_RCU_GPI_turbopas_less_stat();
270         void SkipList_RCU_GPI_turbopas_cmp_stat();
271         void SkipList_RCU_GPI_turbopas_cmpless_stat();
272         void SkipList_RCU_GPI_michaelalloc_less();
273         void SkipList_RCU_GPI_michaelalloc_cmp();
274         void SkipList_RCU_GPI_michaelalloc_cmpless();
275         void SkipList_RCU_GPI_michaelalloc_less_stat();
276         void SkipList_RCU_GPI_michaelalloc_cmp_stat();
277         void SkipList_RCU_GPI_michaelalloc_cmpless_stat();
278
279         void SkipList_RCU_GPB_less();
280         void SkipList_RCU_GPB_cmp();
281         void SkipList_RCU_GPB_cmpless();
282         void SkipList_RCU_GPB_less_stat();
283         void SkipList_RCU_GPB_cmp_stat();
284         void SkipList_RCU_GPB_cmpless_stat();
285         void SkipList_RCU_GPB_xorshift_less();
286         void SkipList_RCU_GPB_xorshift_cmp();
287         void SkipList_RCU_GPB_xorshift_cmpless();
288         void SkipList_RCU_GPB_xorshift_less_stat();
289         void SkipList_RCU_GPB_xorshift_cmp_stat();
290         void SkipList_RCU_GPB_xorshift_cmpless_stat();
291         void SkipList_RCU_GPB_turbopas_less();
292         void SkipList_RCU_GPB_turbopas_cmp();
293         void SkipList_RCU_GPB_turbopas_cmpless();
294         void SkipList_RCU_GPB_turbopas_less_stat();
295         void SkipList_RCU_GPB_turbopas_cmp_stat();
296         void SkipList_RCU_GPB_turbopas_cmpless_stat();
297         void SkipList_RCU_GPB_michaelalloc_less();
298         void SkipList_RCU_GPB_michaelalloc_cmp();
299         void SkipList_RCU_GPB_michaelalloc_cmpless();
300         void SkipList_RCU_GPB_michaelalloc_less_stat();
301         void SkipList_RCU_GPB_michaelalloc_cmp_stat();
302         void SkipList_RCU_GPB_michaelalloc_cmpless_stat();
303
304         void SkipList_RCU_GPT_less();
305         void SkipList_RCU_GPT_cmp();
306         void SkipList_RCU_GPT_cmpless();
307         void SkipList_RCU_GPT_less_stat();
308         void SkipList_RCU_GPT_cmp_stat();
309         void SkipList_RCU_GPT_cmpless_stat();
310         void SkipList_RCU_GPT_xorshift_less();
311         void SkipList_RCU_GPT_xorshift_cmp();
312         void SkipList_RCU_GPT_xorshift_cmpless();
313         void SkipList_RCU_GPT_xorshift_less_stat();
314         void SkipList_RCU_GPT_xorshift_cmp_stat();
315         void SkipList_RCU_GPT_xorshift_cmpless_stat();
316         void SkipList_RCU_GPT_turbopas_less();
317         void SkipList_RCU_GPT_turbopas_cmp();
318         void SkipList_RCU_GPT_turbopas_cmpless();
319         void SkipList_RCU_GPT_turbopas_less_stat();
320         void SkipList_RCU_GPT_turbopas_cmp_stat();
321         void SkipList_RCU_GPT_turbopas_cmpless_stat();
322         void SkipList_RCU_GPT_michaelalloc_less();
323         void SkipList_RCU_GPT_michaelalloc_cmp();
324         void SkipList_RCU_GPT_michaelalloc_cmpless();
325         void SkipList_RCU_GPT_michaelalloc_less_stat();
326         void SkipList_RCU_GPT_michaelalloc_cmp_stat();
327         void SkipList_RCU_GPT_michaelalloc_cmpless_stat();
328
329         void SkipList_RCU_SHB_less();
330         void SkipList_RCU_SHB_cmp();
331         void SkipList_RCU_SHB_cmpless();
332         void SkipList_RCU_SHB_less_stat();
333         void SkipList_RCU_SHB_cmp_stat();
334         void SkipList_RCU_SHB_cmpless_stat();
335         void SkipList_RCU_SHB_xorshift_less();
336         void SkipList_RCU_SHB_xorshift_cmp();
337         void SkipList_RCU_SHB_xorshift_cmpless();
338         void SkipList_RCU_SHB_xorshift_less_stat();
339         void SkipList_RCU_SHB_xorshift_cmp_stat();
340         void SkipList_RCU_SHB_xorshift_cmpless_stat();
341         void SkipList_RCU_SHB_turbopas_less();
342         void SkipList_RCU_SHB_turbopas_cmp();
343         void SkipList_RCU_SHB_turbopas_cmpless();
344         void SkipList_RCU_SHB_turbopas_less_stat();
345         void SkipList_RCU_SHB_turbopas_cmp_stat();
346         void SkipList_RCU_SHB_turbopas_cmpless_stat();
347         void SkipList_RCU_SHB_michaelalloc_less();
348         void SkipList_RCU_SHB_michaelalloc_cmp();
349         void SkipList_RCU_SHB_michaelalloc_cmpless();
350         void SkipList_RCU_SHB_michaelalloc_less_stat();
351         void SkipList_RCU_SHB_michaelalloc_cmp_stat();
352         void SkipList_RCU_SHB_michaelalloc_cmpless_stat();
353
354         void SkipList_RCU_SHT_less();
355         void SkipList_RCU_SHT_cmp();
356         void SkipList_RCU_SHT_cmpless();
357         void SkipList_RCU_SHT_less_stat();
358         void SkipList_RCU_SHT_cmp_stat();
359         void SkipList_RCU_SHT_cmpless_stat();
360         void SkipList_RCU_SHT_xorshift_less();
361         void SkipList_RCU_SHT_xorshift_cmp();
362         void SkipList_RCU_SHT_xorshift_cmpless();
363         void SkipList_RCU_SHT_xorshift_less_stat();
364         void SkipList_RCU_SHT_xorshift_cmp_stat();
365         void SkipList_RCU_SHT_xorshift_cmpless_stat();
366         void SkipList_RCU_SHT_turbopas_less();
367         void SkipList_RCU_SHT_turbopas_cmp();
368         void SkipList_RCU_SHT_turbopas_cmpless();
369         void SkipList_RCU_SHT_turbopas_less_stat();
370         void SkipList_RCU_SHT_turbopas_cmp_stat();
371         void SkipList_RCU_SHT_turbopas_cmpless_stat();
372         void SkipList_RCU_SHT_michaelalloc_less();
373         void SkipList_RCU_SHT_michaelalloc_cmp();
374         void SkipList_RCU_SHT_michaelalloc_cmpless();
375         void SkipList_RCU_SHT_michaelalloc_less_stat();
376         void SkipList_RCU_SHT_michaelalloc_cmp_stat();
377         void SkipList_RCU_SHT_michaelalloc_cmpless_stat();
378
379         CPPUNIT_TEST_SUITE(SkipListMapRCUHdrTest)
380             CPPUNIT_TEST(SkipList_RCU_GPI_less)
381             CPPUNIT_TEST(SkipList_RCU_GPI_cmp)
382             CPPUNIT_TEST(SkipList_RCU_GPI_cmpless)
383             CPPUNIT_TEST(SkipList_RCU_GPI_less_stat)
384             CPPUNIT_TEST(SkipList_RCU_GPI_cmp_stat)
385             CPPUNIT_TEST(SkipList_RCU_GPI_cmpless_stat)
386             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less)
387             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp)
388             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless)
389             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less_stat)
390             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp_stat)
391             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless_stat)
392             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less)
393             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp)
394             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless)
395             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less_stat)
396             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp_stat)
397             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless_stat)
398             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less)
399             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp)
400             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless)
401             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less_stat)
402             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp_stat)
403             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless_stat)
404
405             CPPUNIT_TEST(SkipList_RCU_GPB_less)
406             CPPUNIT_TEST(SkipList_RCU_GPB_cmp)
407             CPPUNIT_TEST(SkipList_RCU_GPB_cmpless)
408             CPPUNIT_TEST(SkipList_RCU_GPB_less_stat)
409             CPPUNIT_TEST(SkipList_RCU_GPB_cmp_stat)
410             CPPUNIT_TEST(SkipList_RCU_GPB_cmpless_stat)
411             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less)
412             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp)
413             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless)
414             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less_stat)
415             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp_stat)
416             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless_stat)
417             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less)
418             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp)
419             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless)
420             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less_stat)
421             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp_stat)
422             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless_stat)
423             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less)
424             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp)
425             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless)
426             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less_stat)
427             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp_stat)
428             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless_stat)
429
430             CPPUNIT_TEST(SkipList_RCU_GPT_less)
431             CPPUNIT_TEST(SkipList_RCU_GPT_cmp)
432             CPPUNIT_TEST(SkipList_RCU_GPT_cmpless)
433             CPPUNIT_TEST(SkipList_RCU_GPT_less_stat)
434             CPPUNIT_TEST(SkipList_RCU_GPT_cmp_stat)
435             CPPUNIT_TEST(SkipList_RCU_GPT_cmpless_stat)
436             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less)
437             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp)
438             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless)
439             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less_stat)
440             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp_stat)
441             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless_stat)
442             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less)
443             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp)
444             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless)
445             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less_stat)
446             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp_stat)
447             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless_stat)
448             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less)
449             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp)
450             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless)
451             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less_stat)
452             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp_stat)
453             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless_stat)
454
455             CPPUNIT_TEST(SkipList_RCU_SHB_less)
456             CPPUNIT_TEST(SkipList_RCU_SHB_cmp)
457             CPPUNIT_TEST(SkipList_RCU_SHB_cmpless)
458             CPPUNIT_TEST(SkipList_RCU_SHB_less_stat)
459             CPPUNIT_TEST(SkipList_RCU_SHB_cmp_stat)
460             CPPUNIT_TEST(SkipList_RCU_SHB_cmpless_stat)
461             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less)
462             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp)
463             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless)
464             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less_stat)
465             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp_stat)
466             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless_stat)
467             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less)
468             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp)
469             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless)
470             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less_stat)
471             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp_stat)
472             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless_stat)
473             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less)
474             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp)
475             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless)
476             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less_stat)
477             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp_stat)
478             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless_stat)
479
480             CPPUNIT_TEST(SkipList_RCU_SHT_less)
481             CPPUNIT_TEST(SkipList_RCU_SHT_cmp)
482             CPPUNIT_TEST(SkipList_RCU_SHT_cmpless)
483             CPPUNIT_TEST(SkipList_RCU_SHT_less_stat)
484             CPPUNIT_TEST(SkipList_RCU_SHT_cmp_stat)
485             CPPUNIT_TEST(SkipList_RCU_SHT_cmpless_stat)
486             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less)
487             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp)
488             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless)
489             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less_stat)
490             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp_stat)
491             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless_stat)
492             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less)
493             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp)
494             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless)
495             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less_stat)
496             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp_stat)
497             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless_stat)
498             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less)
499             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp)
500             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless)
501             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less_stat)
502             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp_stat)
503             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless_stat)
504
505         CPPUNIT_TEST_SUITE_END()
506
507     };
508
509 } // namespace map
510
511 #endif // #ifndef __CDSTEST_HDR_SKIPLIST_MAP_RCU_H