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