fix tests for guarded_ptr and exempt_ptr
[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                     ep.release();
183
184                     {
185                         rcu_lock l;
186                         CPPUNIT_CHECK( m.get( nKey ) ==  nullptr );
187                     }
188                     ep = m.extract( nKey );
189                     CPPUNIT_CHECK( !ep );
190                 }
191                 CPPUNIT_ASSERT( m.empty() );
192
193                 // extract_with/get_with
194                 for ( int i = 0; i < nLimit; ++i )
195                     CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
196
197                 for ( int i = 0; i < nLimit; ++i ) {
198                     int nKey = arrItem[i];
199                     {
200                         rcu_lock l;
201                         value_type * pVal = m.get_with( wrapped_item(nKey), wrapped_less() );
202                         CPPUNIT_ASSERT( pVal != nullptr );
203                         CPPUNIT_CHECK( pVal->first == nKey );
204                         CPPUNIT_CHECK( pVal->second.m_val == nKey * 2 );
205                     }
206
207                     ep = m.extract_with( wrapped_item( nKey ), wrapped_less() );
208                     CPPUNIT_ASSERT( ep );
209                     CPPUNIT_ASSERT( !ep.empty() );
210                     CPPUNIT_CHECK( ep->first == nKey );
211                     CPPUNIT_CHECK( ep->second.m_val == nKey * 2 );
212                     ep.release();
213
214                     {
215                         rcu_lock l;
216                         CPPUNIT_CHECK( m.get_with( wrapped_item(nKey), wrapped_less() ) ==  nullptr );
217                     }
218                     ep = m.extract_with( wrapped_item( nKey ), wrapped_less() );
219                     CPPUNIT_CHECK( !ep );
220                 }
221                 CPPUNIT_ASSERT( m.empty() );
222
223                 // extract_min
224                 for ( int i = 0; i < nLimit; ++i )
225                     CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
226                 for ( int i = 0; i < nLimit; ++i ) {
227                     ep = m.extract_min();
228                     CPPUNIT_ASSERT( ep );
229                     CPPUNIT_ASSERT( !ep.empty() );
230                     CPPUNIT_CHECK( ep->first == i );
231                     CPPUNIT_CHECK( ep->second.m_val == i * 2 );
232                     ep.release();
233                 }
234                 CPPUNIT_ASSERT( m.empty() );
235                 ep = m.extract_min();
236                 CPPUNIT_CHECK( !ep );
237
238                 // extract_max
239                 for ( int i = 0; i < nLimit; ++i )
240                     CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
241                 for ( int i = nLimit-1; i >= 0; --i ) {
242                     ep = m.extract_max();
243                     CPPUNIT_ASSERT( ep );
244                     CPPUNIT_ASSERT( !ep.empty() );
245                     CPPUNIT_CHECK( ep->first == i );
246                     CPPUNIT_CHECK( ep->second.m_val == i * 2 );
247                     ep.release();
248                 }
249                 CPPUNIT_ASSERT( m.empty() );
250                 ep = m.extract_max();
251                 CPPUNIT_CHECK( !ep );
252             }
253
254             CPPUNIT_MSG( PrintStat()(m, nullptr) );
255         }
256
257     public:
258         void SkipList_RCU_GPI_less();
259         void SkipList_RCU_GPI_cmp();
260         void SkipList_RCU_GPI_cmpless();
261         void SkipList_RCU_GPI_less_stat();
262         void SkipList_RCU_GPI_cmp_stat();
263         void SkipList_RCU_GPI_cmpless_stat();
264         void SkipList_RCU_GPI_xorshift_less();
265         void SkipList_RCU_GPI_xorshift_cmp();
266         void SkipList_RCU_GPI_xorshift_cmpless();
267         void SkipList_RCU_GPI_xorshift_less_stat();
268         void SkipList_RCU_GPI_xorshift_cmp_stat();
269         void SkipList_RCU_GPI_xorshift_cmpless_stat();
270         void SkipList_RCU_GPI_turbopas_less();
271         void SkipList_RCU_GPI_turbopas_cmp();
272         void SkipList_RCU_GPI_turbopas_cmpless();
273         void SkipList_RCU_GPI_turbopas_less_stat();
274         void SkipList_RCU_GPI_turbopas_cmp_stat();
275         void SkipList_RCU_GPI_turbopas_cmpless_stat();
276         void SkipList_RCU_GPI_michaelalloc_less();
277         void SkipList_RCU_GPI_michaelalloc_cmp();
278         void SkipList_RCU_GPI_michaelalloc_cmpless();
279         void SkipList_RCU_GPI_michaelalloc_less_stat();
280         void SkipList_RCU_GPI_michaelalloc_cmp_stat();
281         void SkipList_RCU_GPI_michaelalloc_cmpless_stat();
282
283         void SkipList_RCU_GPB_less();
284         void SkipList_RCU_GPB_cmp();
285         void SkipList_RCU_GPB_cmpless();
286         void SkipList_RCU_GPB_less_stat();
287         void SkipList_RCU_GPB_cmp_stat();
288         void SkipList_RCU_GPB_cmpless_stat();
289         void SkipList_RCU_GPB_xorshift_less();
290         void SkipList_RCU_GPB_xorshift_cmp();
291         void SkipList_RCU_GPB_xorshift_cmpless();
292         void SkipList_RCU_GPB_xorshift_less_stat();
293         void SkipList_RCU_GPB_xorshift_cmp_stat();
294         void SkipList_RCU_GPB_xorshift_cmpless_stat();
295         void SkipList_RCU_GPB_turbopas_less();
296         void SkipList_RCU_GPB_turbopas_cmp();
297         void SkipList_RCU_GPB_turbopas_cmpless();
298         void SkipList_RCU_GPB_turbopas_less_stat();
299         void SkipList_RCU_GPB_turbopas_cmp_stat();
300         void SkipList_RCU_GPB_turbopas_cmpless_stat();
301         void SkipList_RCU_GPB_michaelalloc_less();
302         void SkipList_RCU_GPB_michaelalloc_cmp();
303         void SkipList_RCU_GPB_michaelalloc_cmpless();
304         void SkipList_RCU_GPB_michaelalloc_less_stat();
305         void SkipList_RCU_GPB_michaelalloc_cmp_stat();
306         void SkipList_RCU_GPB_michaelalloc_cmpless_stat();
307
308         void SkipList_RCU_GPT_less();
309         void SkipList_RCU_GPT_cmp();
310         void SkipList_RCU_GPT_cmpless();
311         void SkipList_RCU_GPT_less_stat();
312         void SkipList_RCU_GPT_cmp_stat();
313         void SkipList_RCU_GPT_cmpless_stat();
314         void SkipList_RCU_GPT_xorshift_less();
315         void SkipList_RCU_GPT_xorshift_cmp();
316         void SkipList_RCU_GPT_xorshift_cmpless();
317         void SkipList_RCU_GPT_xorshift_less_stat();
318         void SkipList_RCU_GPT_xorshift_cmp_stat();
319         void SkipList_RCU_GPT_xorshift_cmpless_stat();
320         void SkipList_RCU_GPT_turbopas_less();
321         void SkipList_RCU_GPT_turbopas_cmp();
322         void SkipList_RCU_GPT_turbopas_cmpless();
323         void SkipList_RCU_GPT_turbopas_less_stat();
324         void SkipList_RCU_GPT_turbopas_cmp_stat();
325         void SkipList_RCU_GPT_turbopas_cmpless_stat();
326         void SkipList_RCU_GPT_michaelalloc_less();
327         void SkipList_RCU_GPT_michaelalloc_cmp();
328         void SkipList_RCU_GPT_michaelalloc_cmpless();
329         void SkipList_RCU_GPT_michaelalloc_less_stat();
330         void SkipList_RCU_GPT_michaelalloc_cmp_stat();
331         void SkipList_RCU_GPT_michaelalloc_cmpless_stat();
332
333         void SkipList_RCU_SHB_less();
334         void SkipList_RCU_SHB_cmp();
335         void SkipList_RCU_SHB_cmpless();
336         void SkipList_RCU_SHB_less_stat();
337         void SkipList_RCU_SHB_cmp_stat();
338         void SkipList_RCU_SHB_cmpless_stat();
339         void SkipList_RCU_SHB_xorshift_less();
340         void SkipList_RCU_SHB_xorshift_cmp();
341         void SkipList_RCU_SHB_xorshift_cmpless();
342         void SkipList_RCU_SHB_xorshift_less_stat();
343         void SkipList_RCU_SHB_xorshift_cmp_stat();
344         void SkipList_RCU_SHB_xorshift_cmpless_stat();
345         void SkipList_RCU_SHB_turbopas_less();
346         void SkipList_RCU_SHB_turbopas_cmp();
347         void SkipList_RCU_SHB_turbopas_cmpless();
348         void SkipList_RCU_SHB_turbopas_less_stat();
349         void SkipList_RCU_SHB_turbopas_cmp_stat();
350         void SkipList_RCU_SHB_turbopas_cmpless_stat();
351         void SkipList_RCU_SHB_michaelalloc_less();
352         void SkipList_RCU_SHB_michaelalloc_cmp();
353         void SkipList_RCU_SHB_michaelalloc_cmpless();
354         void SkipList_RCU_SHB_michaelalloc_less_stat();
355         void SkipList_RCU_SHB_michaelalloc_cmp_stat();
356         void SkipList_RCU_SHB_michaelalloc_cmpless_stat();
357
358         void SkipList_RCU_SHT_less();
359         void SkipList_RCU_SHT_cmp();
360         void SkipList_RCU_SHT_cmpless();
361         void SkipList_RCU_SHT_less_stat();
362         void SkipList_RCU_SHT_cmp_stat();
363         void SkipList_RCU_SHT_cmpless_stat();
364         void SkipList_RCU_SHT_xorshift_less();
365         void SkipList_RCU_SHT_xorshift_cmp();
366         void SkipList_RCU_SHT_xorshift_cmpless();
367         void SkipList_RCU_SHT_xorshift_less_stat();
368         void SkipList_RCU_SHT_xorshift_cmp_stat();
369         void SkipList_RCU_SHT_xorshift_cmpless_stat();
370         void SkipList_RCU_SHT_turbopas_less();
371         void SkipList_RCU_SHT_turbopas_cmp();
372         void SkipList_RCU_SHT_turbopas_cmpless();
373         void SkipList_RCU_SHT_turbopas_less_stat();
374         void SkipList_RCU_SHT_turbopas_cmp_stat();
375         void SkipList_RCU_SHT_turbopas_cmpless_stat();
376         void SkipList_RCU_SHT_michaelalloc_less();
377         void SkipList_RCU_SHT_michaelalloc_cmp();
378         void SkipList_RCU_SHT_michaelalloc_cmpless();
379         void SkipList_RCU_SHT_michaelalloc_less_stat();
380         void SkipList_RCU_SHT_michaelalloc_cmp_stat();
381         void SkipList_RCU_SHT_michaelalloc_cmpless_stat();
382
383         CPPUNIT_TEST_SUITE(SkipListMapRCUHdrTest)
384             CPPUNIT_TEST(SkipList_RCU_GPI_less)
385             CPPUNIT_TEST(SkipList_RCU_GPI_cmp)
386             CPPUNIT_TEST(SkipList_RCU_GPI_cmpless)
387             CPPUNIT_TEST(SkipList_RCU_GPI_less_stat)
388             CPPUNIT_TEST(SkipList_RCU_GPI_cmp_stat)
389             CPPUNIT_TEST(SkipList_RCU_GPI_cmpless_stat)
390             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less)
391             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp)
392             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless)
393             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less_stat)
394             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp_stat)
395             CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless_stat)
396             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less)
397             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp)
398             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless)
399             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less_stat)
400             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp_stat)
401             CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless_stat)
402             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less)
403             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp)
404             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless)
405             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less_stat)
406             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp_stat)
407             CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless_stat)
408
409             CPPUNIT_TEST(SkipList_RCU_GPB_less)
410             CPPUNIT_TEST(SkipList_RCU_GPB_cmp)
411             CPPUNIT_TEST(SkipList_RCU_GPB_cmpless)
412             CPPUNIT_TEST(SkipList_RCU_GPB_less_stat)
413             CPPUNIT_TEST(SkipList_RCU_GPB_cmp_stat)
414             CPPUNIT_TEST(SkipList_RCU_GPB_cmpless_stat)
415             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less)
416             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp)
417             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless)
418             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less_stat)
419             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp_stat)
420             CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless_stat)
421             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less)
422             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp)
423             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless)
424             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less_stat)
425             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp_stat)
426             CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless_stat)
427             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less)
428             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp)
429             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless)
430             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less_stat)
431             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp_stat)
432             CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless_stat)
433
434             CPPUNIT_TEST(SkipList_RCU_GPT_less)
435             CPPUNIT_TEST(SkipList_RCU_GPT_cmp)
436             CPPUNIT_TEST(SkipList_RCU_GPT_cmpless)
437             CPPUNIT_TEST(SkipList_RCU_GPT_less_stat)
438             CPPUNIT_TEST(SkipList_RCU_GPT_cmp_stat)
439             CPPUNIT_TEST(SkipList_RCU_GPT_cmpless_stat)
440             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less)
441             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp)
442             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless)
443             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less_stat)
444             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp_stat)
445             CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless_stat)
446             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less)
447             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp)
448             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless)
449             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less_stat)
450             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp_stat)
451             CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless_stat)
452             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less)
453             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp)
454             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless)
455             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less_stat)
456             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp_stat)
457             CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless_stat)
458
459             CPPUNIT_TEST(SkipList_RCU_SHB_less)
460             CPPUNIT_TEST(SkipList_RCU_SHB_cmp)
461             CPPUNIT_TEST(SkipList_RCU_SHB_cmpless)
462             CPPUNIT_TEST(SkipList_RCU_SHB_less_stat)
463             CPPUNIT_TEST(SkipList_RCU_SHB_cmp_stat)
464             CPPUNIT_TEST(SkipList_RCU_SHB_cmpless_stat)
465             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less)
466             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp)
467             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless)
468             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less_stat)
469             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp_stat)
470             CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless_stat)
471             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less)
472             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp)
473             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless)
474             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less_stat)
475             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp_stat)
476             CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless_stat)
477             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less)
478             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp)
479             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless)
480             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less_stat)
481             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp_stat)
482             CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless_stat)
483
484             CPPUNIT_TEST(SkipList_RCU_SHT_less)
485             CPPUNIT_TEST(SkipList_RCU_SHT_cmp)
486             CPPUNIT_TEST(SkipList_RCU_SHT_cmpless)
487             CPPUNIT_TEST(SkipList_RCU_SHT_less_stat)
488             CPPUNIT_TEST(SkipList_RCU_SHT_cmp_stat)
489             CPPUNIT_TEST(SkipList_RCU_SHT_cmpless_stat)
490             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less)
491             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp)
492             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless)
493             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less_stat)
494             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp_stat)
495             CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless_stat)
496             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less)
497             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp)
498             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless)
499             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less_stat)
500             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp_stat)
501             CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless_stat)
502             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less)
503             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp)
504             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless)
505             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less_stat)
506             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp_stat)
507             CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless_stat)
508
509         CPPUNIT_TEST_SUITE_END()
510
511     };
512
513 } // namespace map
514
515 #endif // #ifndef __CDSTEST_HDR_SKIPLIST_MAP_RCU_H