Replace NULL with nullptr
[libcds.git] / tests / test-hdr / set / hdr_skiplist_set.h
1 //$$CDS-header$$
2
3 #include "set/hdr_set.h"
4
5 namespace set {
6
7     class SkipListSetHdrTest: public HashSetHdrTest
8     {
9         typedef HashSetHdrTest base_class;
10
11         typedef base_class::other_item  wrapped_item;
12         typedef base_class::other_less  wrapped_less;
13
14         template <class Set, typename PrintStat >
15         void test()
16         {
17             Set s;
18             base_class::test_int_with( s );
19
20             static int const nLimit = 10000;
21             typedef typename Set::iterator          set_iterator;
22             typedef typename Set::const_iterator    const_set_iterator;
23             typedef typename Set::guarded_ptr       guarded_ptr;
24
25             int nCount = 0;
26             int nPrevKey = 0;
27             guarded_ptr gp;
28             int arrRandom[nLimit];
29             for ( int i = 0; i < nLimit; ++i )
30                 arrRandom[i] = i;
31             std::random_shuffle( arrRandom, arrRandom + nLimit );
32
33
34             // Test iterator - ascending order
35             s.clear();
36             CPPUNIT_ASSERT( s.empty() );
37
38             for ( int i = 0; i < nLimit; ++i ) {
39                 CPPUNIT_CHECK( !s.get(gp, i) );
40                 CPPUNIT_CHECK( gp.empty() );
41
42                 CPPUNIT_ASSERT( s.insert(i) );
43
44                 CPPUNIT_CHECK( s.get(gp, i));
45                 CPPUNIT_ASSERT( !gp.empty());
46                 CPPUNIT_CHECK( gp->nKey == i );
47                 CPPUNIT_CHECK( gp->nVal == i );
48                 gp.release();
49             }
50             CPPUNIT_MSG( PrintStat()(s, "Iterator test, ascending insert order") );
51
52             nCount = 0;
53             nPrevKey = 0;
54             for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
55                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
56                 CPPUNIT_ASSERT( s.find( it->nKey ));
57                 it->nVal = (*it).nKey * 2;
58                 ++nCount;
59                 if ( it != s.begin() ) {
60                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
61                 }
62                 nPrevKey = it->nKey;
63
64                 // get
65                 CPPUNIT_CHECK( s.get( gp, it->nKey ));
66                 CPPUNIT_ASSERT( !gp.empty() );
67                 CPPUNIT_CHECK( gp->nKey == it->nKey );
68                 CPPUNIT_CHECK( gp->nVal == it->nKey * 2 );
69                 gp.release();
70             }
71             CPPUNIT_ASSERT( nCount == nLimit );
72
73             nCount = 0;
74             for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
75                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
76                 ++nCount;
77                 if ( it != s.cbegin() ) {
78                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
79                 }
80                 nPrevKey = it->nKey;
81             }
82             CPPUNIT_ASSERT( nCount == nLimit );
83
84             // Test iterator - descending order
85             s.clear();
86             CPPUNIT_ASSERT( s.empty() );
87
88             for ( int i = nLimit; i > 0; --i ) {
89                 CPPUNIT_CHECK( !s.get_with(gp, i-1, base_class::less<typename Set::value_type>() ) );
90                 CPPUNIT_CHECK( gp.empty() );
91
92                 CPPUNIT_ASSERT( s.insert( std::make_pair(i - 1, (i-1) * 2) ));
93
94                 // get_with
95                 CPPUNIT_CHECK( s.get_with(gp, i-1, base_class::less<typename Set::value_type>() ));
96                 CPPUNIT_ASSERT( !gp.empty());
97                 CPPUNIT_CHECK( gp->nKey == i-1 );
98                 CPPUNIT_CHECK( gp->nVal == (i-1) * 2 );
99                 gp.release();
100             }
101             CPPUNIT_MSG( PrintStat()(s, "Iterator test, descending insert order") );
102
103             nCount = 0;
104             nPrevKey = 0;
105             for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
106                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
107                 CPPUNIT_ASSERT( s.find( it->nKey ));
108                 it->nVal = (*it).nKey;
109                 ++nCount;
110                 if ( it != s.begin() ) {
111                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
112                 }
113                 nPrevKey = it->nKey;
114             }
115             CPPUNIT_ASSERT( nCount == nLimit );
116
117             nCount = 0;
118             for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
119                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
120                 ++nCount;
121                 if ( it != s.cbegin() ) {
122                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
123                 }
124                 nPrevKey = it->nKey;
125             }
126             CPPUNIT_ASSERT( nCount == nLimit );
127
128             // Test iterator - random order
129             s.clear();
130             CPPUNIT_ASSERT( s.empty() );
131             {
132                 for ( int i = 0; i < nLimit; ++i )
133                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
134                 CPPUNIT_MSG( PrintStat()(s, "Iterator test, random insert order") );
135             }
136
137             nCount = 0;
138             nPrevKey = 0;
139             for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
140                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
141                 CPPUNIT_ASSERT( s.find( it->nKey ));
142                 it->nVal = (*it).nKey * 2;
143                 ++nCount;
144                 if ( it != s.begin() ) {
145                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
146                 }
147                 nPrevKey = it->nKey;
148             }
149             CPPUNIT_ASSERT( nCount == nLimit );
150
151             nCount = 0;
152             for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
153                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
154                 ++nCount;
155                 if ( it != s.cbegin() ) {
156                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
157                 }
158                 nPrevKey = it->nKey;
159             }
160             CPPUNIT_ASSERT( nCount == nLimit );
161
162             // extract test
163             {
164                 typedef typename base_class::less<typename Set::value_type> less_predicate;
165                 typename Set::guarded_ptr gp;
166
167                 // extract/get
168                 for ( int i = 0; i < nLimit; ++i ) {
169                     int nKey = arrRandom[i];
170                     CPPUNIT_ASSERT( s.get(gp, nKey));
171                     CPPUNIT_ASSERT( !gp.empty());
172                     CPPUNIT_CHECK( gp->nKey == nKey );
173                     CPPUNIT_CHECK( gp->nVal == nKey * 2);
174                     gp.release();
175
176                     CPPUNIT_ASSERT( s.extract(gp, nKey));
177                     CPPUNIT_ASSERT( !gp.empty());
178                     CPPUNIT_CHECK( gp->nKey == nKey );
179                     CPPUNIT_CHECK( gp->nVal == nKey * 2);
180                     gp.release();
181
182                     CPPUNIT_CHECK( !s.get(gp, nKey));
183                     CPPUNIT_ASSERT( gp.empty());
184                     CPPUNIT_ASSERT( !s.extract(gp, nKey));
185                     CPPUNIT_ASSERT( gp.empty());
186                 }
187                 CPPUNIT_ASSERT( s.empty() );
188
189                 // extract_with/get_with
190                 for ( int i = 0; i < nLimit; ++i )
191                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
192
193                 for ( int i = 0; i < nLimit; ++i ) {
194                     int nKey = arrRandom[i];
195                     CPPUNIT_ASSERT( s.get_with(gp, wrapped_item(nKey), wrapped_less() ));
196                     CPPUNIT_ASSERT( !gp.empty());
197                     CPPUNIT_CHECK( gp->nKey == nKey );
198                     CPPUNIT_CHECK( gp->nVal == nKey );
199                     gp.release();
200
201                     CPPUNIT_ASSERT( s.extract_with(gp, wrapped_item(nKey), wrapped_less() ));
202                     CPPUNIT_ASSERT( !gp.empty());
203                     CPPUNIT_CHECK( gp->nKey == nKey );
204                     CPPUNIT_CHECK( gp->nVal == nKey );
205                     CPPUNIT_CHECK( !s.get_with(gp, wrapped_item(nKey), wrapped_less() ));
206                     CPPUNIT_ASSERT( !s.extract_with(gp, wrapped_item(nKey), wrapped_less() ));
207                     gp.release();
208                 }
209                 CPPUNIT_ASSERT( s.empty() );
210
211                 // extract_min
212                 for ( int i = 0; i < nLimit; ++i )
213                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
214
215                 for ( int i = 0; i < nLimit; ++i ) {
216                     CPPUNIT_ASSERT( s.extract_min(gp));
217                     CPPUNIT_ASSERT( !gp.empty());
218                     CPPUNIT_CHECK( gp->nKey == i );
219                     CPPUNIT_CHECK( gp->nVal == i );
220                     CPPUNIT_CHECK( !s.get(gp, i ));
221                     gp.release();
222                 }
223                 CPPUNIT_ASSERT( s.empty() );
224                 CPPUNIT_CHECK( !s.extract_min(gp));
225                 CPPUNIT_ASSERT( gp.empty() );
226                 CPPUNIT_CHECK( !s.extract_max(gp));
227                 CPPUNIT_ASSERT( gp.empty() );
228
229                 // extract_max
230                 for ( int i = 0; i < nLimit; ++i )
231                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
232
233                 for ( int i = nLimit-1; i >= 0; --i ) {
234                     CPPUNIT_ASSERT( s.extract_max(gp));
235                     CPPUNIT_ASSERT( !gp.empty());
236                     CPPUNIT_CHECK( gp->nKey == i );
237                     CPPUNIT_CHECK( gp->nVal == i );
238                     CPPUNIT_CHECK( !s.get(gp, i ));
239                     gp.release();
240                 }
241                 CPPUNIT_ASSERT( s.empty() );
242                 CPPUNIT_CHECK( !s.extract_min(gp));
243                 CPPUNIT_ASSERT( gp.empty() );
244                 CPPUNIT_CHECK( !s.extract_max(gp));
245                 CPPUNIT_ASSERT( gp.empty() );
246             }
247
248             CPPUNIT_MSG( PrintStat()(s, nullptr) );
249         }
250
251         template <class Set, typename PrintStat >
252         void test_nogc()
253         {
254             typedef typename Set::value_type        value_type;
255             typedef typename Set::iterator          iterator;
256             typedef typename Set::const_iterator    const_iterator;
257
258             Set s;
259             iterator it;
260
261             CPPUNIT_ASSERT( s.empty() );
262             CPPUNIT_ASSERT( check_size( s, 0 ));
263
264             // insert
265             it = s.insert( 10 );
266             CPPUNIT_ASSERT( it != s.end() );
267             CPPUNIT_ASSERT( it->key() == 10 );
268             CPPUNIT_ASSERT( it->val() == 10 );
269             CPPUNIT_ASSERT( !s.empty() );
270             CPPUNIT_ASSERT( check_size( s, 1 ));
271             CPPUNIT_ASSERT( s.insert( 10 ) == s.end() );
272
273             it = s.insert( std::make_pair( 50, 25 ));
274             CPPUNIT_ASSERT( it != s.end() );
275             CPPUNIT_ASSERT( it->key() == 50 );
276             CPPUNIT_ASSERT( it->val() == 25 );
277             CPPUNIT_ASSERT( !s.empty() );
278             CPPUNIT_ASSERT( check_size( s, 2 ));
279             CPPUNIT_ASSERT( s.insert( 50 ) == s.end() );
280
281             // ensure
282             std::pair< iterator, bool>  ensureResult;
283             ensureResult = s.ensure( 20 );
284             CPPUNIT_ASSERT( ensureResult.first != s.end() );
285             CPPUNIT_ASSERT( ensureResult.second  );
286             CPPUNIT_ASSERT( ensureResult.first->key() == 20 );
287             CPPUNIT_ASSERT( ensureResult.first->val() == 20 );
288             CPPUNIT_ASSERT( !s.empty() );
289             CPPUNIT_ASSERT( check_size( s, 3 ));
290
291             ensureResult = s.ensure( std::make_pair( 20, 200 ));
292             CPPUNIT_ASSERT( ensureResult.first != s.end() );
293             CPPUNIT_ASSERT( !ensureResult.second  );
294             CPPUNIT_ASSERT( ensureResult.first->key() == 20 );
295             CPPUNIT_ASSERT( ensureResult.first->val() == 20 );
296             CPPUNIT_ASSERT( !s.empty() );
297             CPPUNIT_ASSERT( check_size( s, 3 ));
298             ensureResult.first->nVal = 22;
299
300             ensureResult = s.ensure( std::make_pair( 30, 33 ));
301             CPPUNIT_ASSERT( ensureResult.first != s.end() );
302             CPPUNIT_ASSERT( ensureResult.second  );
303             CPPUNIT_ASSERT( ensureResult.first->key() == 30 );
304             CPPUNIT_ASSERT( ensureResult.first->val() == 33 );
305             CPPUNIT_ASSERT( !s.empty() );
306             CPPUNIT_ASSERT( check_size( s, 4 ));
307
308             // find
309             it = s.find( 10 );
310             CPPUNIT_ASSERT( it != s.end() );
311             CPPUNIT_ASSERT( it->key() == 10 );
312             CPPUNIT_ASSERT( it->val() == 10 );
313
314             it = s.find( 20 );
315             CPPUNIT_ASSERT( it != s.end() );
316             CPPUNIT_ASSERT( it->key() == 20 );
317             CPPUNIT_ASSERT( it->val() == 22 );
318
319             it = s.find_with( 30, base_class::less<value_type>() );
320             CPPUNIT_ASSERT( it != s.end() );
321             CPPUNIT_ASSERT( it->key() == 30 );
322             CPPUNIT_ASSERT( it->val() == 33 );
323
324             it = s.find( 40 );
325             CPPUNIT_ASSERT( it == s.end() );
326
327             it = s.find( 50 );
328             CPPUNIT_ASSERT( it != s.end() );
329             CPPUNIT_ASSERT( it->key() == 50 );
330             CPPUNIT_ASSERT( it->val() == 25 );
331
332 #       ifdef CDS_EMPLACE_SUPPORT
333             // emplace test
334             it = s.emplace( 151 ) ;  // key = 151,  val = 151
335             CPPUNIT_ASSERT( it != s.end() );
336             CPPUNIT_ASSERT( it->key() == 151 );
337             CPPUNIT_ASSERT( it->val() == 151 );
338
339             it = s.emplace( 174, 471 ) ; // key == 174, val = 471
340             CPPUNIT_ASSERT( it != s.end() );
341             CPPUNIT_ASSERT( it->key() == 174 );
342             CPPUNIT_ASSERT( it->val() == 471 );
343
344             it = s.emplace( std::make_pair( 190, 91 )) ; // key == 190, val = 91
345             CPPUNIT_ASSERT( it != s.end() );
346             CPPUNIT_ASSERT( it->key() == 190 );
347             CPPUNIT_ASSERT( it->val() == 91 );
348
349             it = s.find( 174 );
350             CPPUNIT_ASSERT( it != s.end() );
351             CPPUNIT_ASSERT( it->key() == 174 );
352             CPPUNIT_ASSERT( it->val() == 471 );
353
354             it = s.find( 190 );
355             CPPUNIT_ASSERT( it != s.end() );
356             CPPUNIT_ASSERT( it->key() == 190 );
357             CPPUNIT_ASSERT( it->val() == 91 );
358
359             it = s.find( 151 );
360             CPPUNIT_ASSERT( it != s.end() );
361             CPPUNIT_ASSERT( it->key() == 151 );
362             CPPUNIT_ASSERT( it->val() == 151 );
363 #       endif
364
365             CPPUNIT_ASSERT( !s.empty() );
366             s.clear();
367             CPPUNIT_ASSERT( s.empty() );
368             CPPUNIT_ASSERT( check_size( s, 0 ));
369
370             // get_min test
371             for ( int i = 500; i > 0; --i ) {
372                 CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
373
374                 typename Set::value_type * pVal = s.get_min();
375                 CPPUNIT_ASSERT( pVal != nullptr );
376                 CPPUNIT_CHECK( pVal->nKey == i );
377                 CPPUNIT_CHECK( pVal->nVal ==  i * 2 );
378             }
379             CPPUNIT_ASSERT( !s.empty() );
380             s.clear();
381             CPPUNIT_ASSERT( s.empty() );
382             CPPUNIT_ASSERT( check_size( s, 0 ));
383
384             CPPUNIT_CHECK( s.get_min() == nullptr );
385             CPPUNIT_CHECK( s.get_max() == nullptr );
386
387             // iterator test
388             for ( int i = 0; i < 500; ++i ) {
389                 CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
390
391                 typename Set::value_type * pVal = s.get_max();
392                 CPPUNIT_ASSERT( pVal != nullptr );
393                 CPPUNIT_CHECK( pVal->nKey == i );
394                 CPPUNIT_CHECK( pVal->nVal == i * 2 );
395             }
396             CPPUNIT_ASSERT( !s.empty() );
397             CPPUNIT_ASSERT( check_size( s, 500 ));
398
399             for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
400                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
401                 it->nVal = (*it).nKey;
402             }
403
404             Set const& refSet = s;
405             for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
406                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
407             }
408         }
409
410     public:
411         void SkipList_HP_less();
412         void SkipList_HP_cmp();
413         void SkipList_HP_cmpless();
414         void SkipList_HP_less_stat();
415         void SkipList_HP_cmp_stat();
416         void SkipList_HP_cmpless_stat();
417         void SkipList_HP_xorshift_less();
418         void SkipList_HP_xorshift_cmp();
419         void SkipList_HP_xorshift_cmpless();
420         void SkipList_HP_xorshift_less_stat();
421         void SkipList_HP_xorshift_cmp_stat();
422         void SkipList_HP_xorshift_cmpless_stat();
423         void SkipList_HP_turbopas_less();
424         void SkipList_HP_turbopas_cmp();
425         void SkipList_HP_turbopas_cmpless();
426         void SkipList_HP_turbopas_less_stat();
427         void SkipList_HP_turbopas_cmp_stat();
428         void SkipList_HP_turbopas_cmpless_stat();
429         void SkipList_HP_michaelalloc_less();
430         void SkipList_HP_michaelalloc_cmp();
431         void SkipList_HP_michaelalloc_cmpless();
432         void SkipList_HP_michaelalloc_less_stat();
433         void SkipList_HP_michaelalloc_cmp_stat();
434         void SkipList_HP_michaelalloc_cmpless_stat();
435
436         void SkipList_HRC_less();
437         void SkipList_HRC_cmp();
438         void SkipList_HRC_cmpless();
439         void SkipList_HRC_less_stat();
440         void SkipList_HRC_cmp_stat();
441         void SkipList_HRC_cmpless_stat();
442         void SkipList_HRC_xorshift_less();
443         void SkipList_HRC_xorshift_cmp();
444         void SkipList_HRC_xorshift_cmpless();
445         void SkipList_HRC_xorshift_less_stat();
446         void SkipList_HRC_xorshift_cmp_stat();
447         void SkipList_HRC_xorshift_cmpless_stat();
448         void SkipList_HRC_turbopas_less();
449         void SkipList_HRC_turbopas_cmp();
450         void SkipList_HRC_turbopas_cmpless();
451         void SkipList_HRC_turbopas_less_stat();
452         void SkipList_HRC_turbopas_cmp_stat();
453         void SkipList_HRC_turbopas_cmpless_stat();
454         void SkipList_HRC_michaelalloc_less();
455         void SkipList_HRC_michaelalloc_cmp();
456         void SkipList_HRC_michaelalloc_cmpless();
457         void SkipList_HRC_michaelalloc_less_stat();
458         void SkipList_HRC_michaelalloc_cmp_stat();
459         void SkipList_HRC_michaelalloc_cmpless_stat();
460
461         void SkipList_PTB_less();
462         void SkipList_PTB_cmp();
463         void SkipList_PTB_cmpless();
464         void SkipList_PTB_less_stat();
465         void SkipList_PTB_cmp_stat();
466         void SkipList_PTB_cmpless_stat();
467         void SkipList_PTB_xorshift_less();
468         void SkipList_PTB_xorshift_cmp();
469         void SkipList_PTB_xorshift_cmpless();
470         void SkipList_PTB_xorshift_less_stat();
471         void SkipList_PTB_xorshift_cmp_stat();
472         void SkipList_PTB_xorshift_cmpless_stat();
473         void SkipList_PTB_turbopas_less();
474         void SkipList_PTB_turbopas_cmp();
475         void SkipList_PTB_turbopas_cmpless();
476         void SkipList_PTB_turbopas_less_stat();
477         void SkipList_PTB_turbopas_cmp_stat();
478         void SkipList_PTB_turbopas_cmpless_stat();
479         void SkipList_PTB_michaelalloc_less();
480         void SkipList_PTB_michaelalloc_cmp();
481         void SkipList_PTB_michaelalloc_cmpless();
482         void SkipList_PTB_michaelalloc_less_stat();
483         void SkipList_PTB_michaelalloc_cmp_stat();
484         void SkipList_PTB_michaelalloc_cmpless_stat();
485
486         void SkipList_NOGC_less();
487         void SkipList_NOGC_cmp();
488         void SkipList_NOGC_cmpless();
489         void SkipList_NOGC_less_stat();
490         void SkipList_NOGC_cmp_stat();
491         void SkipList_NOGC_cmpless_stat();
492         void SkipList_NOGC_xorshift_less();
493         void SkipList_NOGC_xorshift_cmp();
494         void SkipList_NOGC_xorshift_cmpless();
495         void SkipList_NOGC_xorshift_less_stat();
496         void SkipList_NOGC_xorshift_cmp_stat();
497         void SkipList_NOGC_xorshift_cmpless_stat();
498         void SkipList_NOGC_turbopas_less();
499         void SkipList_NOGC_turbopas_cmp();
500         void SkipList_NOGC_turbopas_cmpless();
501         void SkipList_NOGC_turbopas_less_stat();
502         void SkipList_NOGC_turbopas_cmp_stat();
503         void SkipList_NOGC_turbopas_cmpless_stat();
504         void SkipList_NOGC_michaelalloc_less();
505         void SkipList_NOGC_michaelalloc_cmp();
506         void SkipList_NOGC_michaelalloc_cmpless();
507         void SkipList_NOGC_michaelalloc_less_stat();
508         void SkipList_NOGC_michaelalloc_cmp_stat();
509         void SkipList_NOGC_michaelalloc_cmpless_stat();
510
511         CPPUNIT_TEST_SUITE(SkipListSetHdrTest)
512             CPPUNIT_TEST(SkipList_HP_less)
513             CPPUNIT_TEST(SkipList_HP_cmp)
514             CPPUNIT_TEST(SkipList_HP_cmpless)
515             CPPUNIT_TEST(SkipList_HP_less_stat)
516             CPPUNIT_TEST(SkipList_HP_cmp_stat)
517             CPPUNIT_TEST(SkipList_HP_cmpless_stat)
518             CPPUNIT_TEST(SkipList_HP_xorshift_less)
519             CPPUNIT_TEST(SkipList_HP_xorshift_cmp)
520             CPPUNIT_TEST(SkipList_HP_xorshift_cmpless)
521             CPPUNIT_TEST(SkipList_HP_xorshift_less_stat)
522             CPPUNIT_TEST(SkipList_HP_xorshift_cmp_stat)
523             CPPUNIT_TEST(SkipList_HP_xorshift_cmpless_stat)
524             CPPUNIT_TEST(SkipList_HP_turbopas_less)
525             CPPUNIT_TEST(SkipList_HP_turbopas_cmp)
526             CPPUNIT_TEST(SkipList_HP_turbopas_cmpless)
527             CPPUNIT_TEST(SkipList_HP_turbopas_less_stat)
528             CPPUNIT_TEST(SkipList_HP_turbopas_cmp_stat)
529             CPPUNIT_TEST(SkipList_HP_turbopas_cmpless_stat)
530             CPPUNIT_TEST(SkipList_HP_michaelalloc_less)
531             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp)
532             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless)
533             CPPUNIT_TEST(SkipList_HP_michaelalloc_less_stat)
534             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp_stat)
535             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless_stat)
536
537             CPPUNIT_TEST(SkipList_HRC_less)
538             CPPUNIT_TEST(SkipList_HRC_cmp)
539             CPPUNIT_TEST(SkipList_HRC_cmpless)
540             CPPUNIT_TEST(SkipList_HRC_less_stat)
541             CPPUNIT_TEST(SkipList_HRC_cmp_stat)
542             CPPUNIT_TEST(SkipList_HRC_cmpless_stat)
543             CPPUNIT_TEST(SkipList_HRC_xorshift_less)
544             CPPUNIT_TEST(SkipList_HRC_xorshift_cmp)
545             CPPUNIT_TEST(SkipList_HRC_xorshift_cmpless)
546             CPPUNIT_TEST(SkipList_HRC_xorshift_less_stat)
547             CPPUNIT_TEST(SkipList_HRC_xorshift_cmp_stat)
548             CPPUNIT_TEST(SkipList_HRC_xorshift_cmpless_stat)
549             CPPUNIT_TEST(SkipList_HRC_turbopas_less)
550             CPPUNIT_TEST(SkipList_HRC_turbopas_cmp)
551             CPPUNIT_TEST(SkipList_HRC_turbopas_cmpless)
552             CPPUNIT_TEST(SkipList_HRC_turbopas_less_stat)
553             CPPUNIT_TEST(SkipList_HRC_turbopas_cmp_stat)
554             CPPUNIT_TEST(SkipList_HRC_turbopas_cmpless_stat)
555             CPPUNIT_TEST(SkipList_HRC_michaelalloc_less)
556             CPPUNIT_TEST(SkipList_HRC_michaelalloc_cmp)
557             CPPUNIT_TEST(SkipList_HRC_michaelalloc_cmpless)
558             CPPUNIT_TEST(SkipList_HRC_michaelalloc_less_stat)
559             CPPUNIT_TEST(SkipList_HRC_michaelalloc_cmp_stat)
560             CPPUNIT_TEST(SkipList_HRC_michaelalloc_cmpless_stat)
561
562             CPPUNIT_TEST(SkipList_PTB_less)
563             CPPUNIT_TEST(SkipList_PTB_cmp)
564             CPPUNIT_TEST(SkipList_PTB_cmpless)
565             CPPUNIT_TEST(SkipList_PTB_less_stat)
566             CPPUNIT_TEST(SkipList_PTB_cmp_stat)
567             CPPUNIT_TEST(SkipList_PTB_cmpless_stat)
568             CPPUNIT_TEST(SkipList_PTB_xorshift_less)
569             CPPUNIT_TEST(SkipList_PTB_xorshift_cmp)
570             CPPUNIT_TEST(SkipList_PTB_xorshift_cmpless)
571             CPPUNIT_TEST(SkipList_PTB_xorshift_less_stat)
572             CPPUNIT_TEST(SkipList_PTB_xorshift_cmp_stat)
573             CPPUNIT_TEST(SkipList_PTB_xorshift_cmpless_stat)
574             CPPUNIT_TEST(SkipList_PTB_turbopas_less)
575             CPPUNIT_TEST(SkipList_PTB_turbopas_cmp)
576             CPPUNIT_TEST(SkipList_PTB_turbopas_cmpless)
577             CPPUNIT_TEST(SkipList_PTB_turbopas_less_stat)
578             CPPUNIT_TEST(SkipList_PTB_turbopas_cmp_stat)
579             CPPUNIT_TEST(SkipList_PTB_turbopas_cmpless_stat)
580             CPPUNIT_TEST(SkipList_PTB_michaelalloc_less)
581             CPPUNIT_TEST(SkipList_PTB_michaelalloc_cmp)
582             CPPUNIT_TEST(SkipList_PTB_michaelalloc_cmpless)
583             CPPUNIT_TEST(SkipList_PTB_michaelalloc_less_stat)
584             CPPUNIT_TEST(SkipList_PTB_michaelalloc_cmp_stat)
585             CPPUNIT_TEST(SkipList_PTB_michaelalloc_cmpless_stat)
586
587             CPPUNIT_TEST(SkipList_NOGC_less)
588             CPPUNIT_TEST(SkipList_NOGC_cmp)
589             CPPUNIT_TEST(SkipList_NOGC_cmpless)
590             CPPUNIT_TEST(SkipList_NOGC_less_stat)
591             CPPUNIT_TEST(SkipList_NOGC_cmp_stat)
592             CPPUNIT_TEST(SkipList_NOGC_cmpless_stat)
593             CPPUNIT_TEST(SkipList_NOGC_xorshift_less)
594             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp)
595             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless)
596             CPPUNIT_TEST(SkipList_NOGC_xorshift_less_stat)
597             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp_stat)
598             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless_stat)
599             CPPUNIT_TEST(SkipList_NOGC_turbopas_less)
600             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp)
601             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless)
602             CPPUNIT_TEST(SkipList_NOGC_turbopas_less_stat)
603             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp_stat)
604             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless_stat)
605             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less)
606             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp)
607             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless)
608             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less_stat)
609             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp_stat)
610             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless_stat)
611
612         CPPUNIT_TEST_SUITE_END()
613
614     };
615 }