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