issue#11: tests/test-hdr: changed .h file guard prefix to CDSTEST_xxx
[libcds.git] / tests / test-hdr / set / hdr_skiplist_set_rcu.h
1 //$$CDS-header$$
2
3 #ifndef CDSTEST_HDR_SKIPLIST_SET_RCU_H
4 #define CDSTEST_HDR_SKIPLIST_SET_RCU_H
5
6 #include "set/hdr_set.h"
7
8 namespace set {
9
10     class SkipListSetRCUHdrTest: public HashSetHdrTest
11     {
12         typedef HashSetHdrTest base_class;
13
14         typedef base_class::other_item  wrapped_item;
15         typedef base_class::other_less  wrapped_less;
16
17         template <class Set, typename PrintStat >
18         void test()
19         {
20             Set s;
21             base_class::test_int_with( s );
22
23             static int const nLimit = 10000;
24             typedef typename Set::iterator          set_iterator;
25             typedef typename Set::const_iterator    const_set_iterator;
26             typedef typename Set::gc::scoped_lock   rcu_lock;
27
28             int nCount = 0;
29             int nPrevKey = 0;
30
31             int arrRandom[nLimit];
32             for ( int i = 0; i < nLimit; ++i )
33                 arrRandom[i] = i;
34             std::random_shuffle( arrRandom, arrRandom + nLimit );
35
36             // Test iterator - ascending order
37             s.clear();
38             CPPUNIT_ASSERT( s.empty() );
39
40             for ( int i = 0; i < nLimit; ++i ) {
41                 CPPUNIT_ASSERT( s.insert(i) );
42             }
43             CPPUNIT_MSG( PrintStat()(s, "Iterator test, ascending insert order") );
44
45             nCount = 0;
46             nPrevKey = 0;
47             {
48                 rcu_lock l;
49                 for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
50                     CPPUNIT_ASSERT( (*it).nKey == it->nVal );
51                     CPPUNIT_ASSERT( s.find( it->nKey ));
52                     it->nVal = (*it).nKey * 2;
53                     ++nCount;
54                     if ( it != s.begin() ) {
55                         CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
56                     }
57                     nPrevKey = it->nKey;
58                 }
59             }
60             CPPUNIT_ASSERT( nCount == nLimit );
61
62             nCount = 0;
63             {
64                 rcu_lock l;
65                 for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
66                     CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
67                     ++nCount;
68                     if ( it != s.cbegin() ) {
69                         CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
70                     }
71                     nPrevKey = it->nKey;
72                 }
73             }
74             CPPUNIT_ASSERT( nCount == nLimit );
75
76             // Test iterator - descending order
77             s.clear();
78             CPPUNIT_ASSERT( s.empty() );
79
80             for ( int i = nLimit; i > 0; --i ) {
81                 CPPUNIT_ASSERT( s.insert( std::make_pair(i - 1, (i-1) * 2) ));
82             }
83             CPPUNIT_MSG( PrintStat()(s, "Iterator test, descending insert order") );
84
85             nCount = 0;
86             nPrevKey = 0;
87             {
88                 rcu_lock l;
89                 for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
90                     CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
91                     CPPUNIT_ASSERT( s.find( it->nKey ));
92                     it->nVal = (*it).nKey;
93                     ++nCount;
94                     if ( it != s.begin() ) {
95                         CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
96                     }
97                     nPrevKey = it->nKey;
98                 }
99             }
100             CPPUNIT_ASSERT( nCount == nLimit );
101
102             nCount = 0;
103             {
104                 rcu_lock l;
105                 for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
106                     CPPUNIT_ASSERT( (*it).nKey == it->nVal );
107                     ++nCount;
108                     if ( it != s.cbegin() ) {
109                         CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
110                     }
111                     nPrevKey = it->nKey;
112                 }
113             }
114             CPPUNIT_ASSERT( nCount == nLimit );
115
116             // Test iterator - random order
117             s.clear();
118             CPPUNIT_ASSERT( s.empty() );
119             {
120                 for ( int i = 0; i < nLimit; ++i ) {
121                     CPPUNIT_ASSERT( s.insert( arrRandom[i] ) );
122                 }
123                 CPPUNIT_MSG( PrintStat()(s, "Iterator test, random insert order") );
124             }
125
126             nCount = 0;
127             nPrevKey = 0;
128             {
129                 rcu_lock l;
130                 for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
131                     CPPUNIT_ASSERT( (*it).nKey == it->nVal );
132                     CPPUNIT_ASSERT( s.find( it->nKey ));
133                     it->nVal = (*it).nKey * 2;
134                     ++nCount;
135                     if ( it != s.begin() ) {
136                         CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
137                     }
138                     nPrevKey = it->nKey;
139                 }
140             }
141             CPPUNIT_ASSERT( nCount == nLimit );
142
143             nCount = 0;
144             {
145                 rcu_lock l;
146                 for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
147                     CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
148                     ++nCount;
149                     if ( it != s.cbegin() ) {
150                         CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
151                     }
152                     nPrevKey = it->nKey;
153                 }
154             }
155             CPPUNIT_ASSERT( nCount == nLimit );
156
157             // extract/get tests
158             {
159                 typedef typename base_class::less<typename Set::value_type> less_predicate;
160                 typename Set::value_type * pVal;
161                 typename Set::exempt_ptr ep;
162
163                 // extract/get
164                 for ( int i = 0; i < nLimit; ++i ) {
165                     int nKey = arrRandom[i];
166                     {
167                         rcu_lock l;
168                         pVal = s.get( nKey );
169                         CPPUNIT_ASSERT( pVal != nullptr );
170                         CPPUNIT_CHECK( pVal->nKey == nKey );
171                         CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
172                     }
173
174                     ep = s.extract( nKey );
175                     CPPUNIT_ASSERT( ep );
176                     CPPUNIT_ASSERT( !ep.empty() );
177                     CPPUNIT_CHECK( ep->nKey == nKey );
178                     CPPUNIT_CHECK( ep->nVal == nKey * 2 );
179                     ep.release();
180
181                     {
182                         rcu_lock l;
183                         CPPUNIT_CHECK( s.get( nKey ) == nullptr );
184                     }
185                     ep = s.extract( nKey );
186                     CPPUNIT_CHECK( !ep );
187                 }
188                 CPPUNIT_CHECK( s.empty());
189
190                 // extract_with/get_with
191                 for ( int i = 0; i < nLimit; ++i )
192                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
193
194                 for ( int i = 0; i < nLimit; ++i ) {
195                     int nKey = arrRandom[i];
196                     {
197                         rcu_lock l;
198                         pVal = s.get_with( wrapped_item(nKey), wrapped_less() );
199                         CPPUNIT_ASSERT( pVal != nullptr );
200                         CPPUNIT_CHECK( pVal->nKey == nKey );
201                         CPPUNIT_CHECK( pVal->nVal == nKey );
202                     }
203
204                     ep = s.extract_with( wrapped_item( nKey ), wrapped_less() );
205                     CPPUNIT_ASSERT( ep );
206                     CPPUNIT_ASSERT( !ep.empty() );
207                     CPPUNIT_CHECK( ep->nKey == nKey );
208                     CPPUNIT_CHECK( ep->nVal == nKey );
209                     ep.release();
210
211                     {
212                         rcu_lock l;
213                         CPPUNIT_CHECK( s.get_with( wrapped_item( nKey ), wrapped_less() ) == nullptr );
214                     }
215                     ep = s.extract_with( wrapped_item( nKey ), wrapped_less() );
216                     CPPUNIT_CHECK( !ep );
217                 }
218                 CPPUNIT_CHECK( s.empty());
219
220                 // extract_min
221                 for ( int i = 0; i < nLimit; ++i )
222                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
223
224                 for ( int i = 0; i < nLimit; ++i ) {
225                     ep = s.extract_min();
226                     CPPUNIT_ASSERT( ep );
227                     CPPUNIT_ASSERT( !ep.empty() );
228                     CPPUNIT_CHECK( ep->nKey == i );
229                     CPPUNIT_CHECK( ep->nVal == i );
230                     CPPUNIT_CHECK( !s.find(i) );
231                     ep.release();
232                 }
233                 CPPUNIT_CHECK( s.empty());
234
235                 // extract_max
236                 for ( int i = 0; i < nLimit; ++i )
237                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
238
239                 for ( int i = nLimit-1; i >= 0; --i ) {
240                     ep = s.extract_max();
241                     CPPUNIT_ASSERT( ep );
242                     CPPUNIT_ASSERT( !ep.empty() );
243                     CPPUNIT_CHECK( ep->nKey == i );
244                     CPPUNIT_CHECK( ep->nVal == i );
245                     CPPUNIT_CHECK( !s.find(i) );
246                     ep.release();
247                 }
248                 CPPUNIT_CHECK( s.empty());
249                 ep = s.extract_min();
250                 CPPUNIT_CHECK( !ep );
251                 CPPUNIT_CHECK( !s.extract_max() );
252             }
253
254             CPPUNIT_MSG( PrintStat()(s, 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(SkipListSetRCUHdrTest)
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
514 #endif // #ifndef CDSTEST_HDR_SKIPLIST_SET_RCU_H