movable guarded_ptr: SkipList
[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                 gp = s.get( i );
40                 CPPUNIT_CHECK( !gp );
41                 CPPUNIT_CHECK( gp.empty() );
42
43                 CPPUNIT_ASSERT( s.insert(i) );
44
45                 gp = s.get( i );
46                 CPPUNIT_CHECK( gp );
47                 CPPUNIT_ASSERT( !gp.empty());
48                 CPPUNIT_CHECK( gp->nKey == i );
49                 CPPUNIT_CHECK( gp->nVal == i );
50             }
51             CPPUNIT_MSG( PrintStat()(s, "Iterator test, ascending insert order") );
52
53             nCount = 0;
54             nPrevKey = 0;
55             for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
56                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
57                 CPPUNIT_ASSERT( s.find( it->nKey ));
58                 it->nVal = (*it).nKey * 2;
59                 ++nCount;
60                 if ( it != s.begin() ) {
61                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
62                 }
63                 nPrevKey = it->nKey;
64
65                 // get
66                 gp = s.get( it->nKey );
67                 CPPUNIT_CHECK( gp );
68                 CPPUNIT_ASSERT( !gp.empty() );
69                 CPPUNIT_CHECK( gp->nKey == it->nKey );
70                 CPPUNIT_CHECK( gp->nVal == it->nKey * 2 );
71             }
72             CPPUNIT_ASSERT( nCount == nLimit );
73
74             nCount = 0;
75             for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
76                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
77                 ++nCount;
78                 if ( it != s.cbegin() ) {
79                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
80                 }
81                 nPrevKey = it->nKey;
82             }
83             CPPUNIT_ASSERT( nCount == nLimit );
84
85             // Test iterator - descending order
86             s.clear();
87             CPPUNIT_ASSERT( s.empty() );
88
89             for ( int i = nLimit; i > 0; --i ) {
90                 gp = s.get_with( i - 1, base_class::less<typename Set::value_type>());
91                 CPPUNIT_CHECK( !gp );
92                 CPPUNIT_CHECK( gp.empty() );
93
94                 CPPUNIT_ASSERT( s.insert( std::make_pair(i - 1, (i-1) * 2) ));
95
96                 // get_with
97                 gp = s.get_with( i - 1, base_class::less<typename Set::value_type>());
98                 CPPUNIT_CHECK( gp );
99                 CPPUNIT_ASSERT( !gp.empty());
100                 CPPUNIT_CHECK( gp->nKey == i-1 );
101                 CPPUNIT_CHECK( gp->nVal == (i-1) * 2 );
102             }
103             CPPUNIT_MSG( PrintStat()(s, "Iterator test, descending insert order") );
104
105             nCount = 0;
106             nPrevKey = 0;
107             for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
108                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
109                 CPPUNIT_ASSERT( s.find( it->nKey ));
110                 it->nVal = (*it).nKey;
111                 ++nCount;
112                 if ( it != s.begin() ) {
113                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
114                 }
115                 nPrevKey = it->nKey;
116             }
117             CPPUNIT_ASSERT( nCount == nLimit );
118
119             nCount = 0;
120             for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
121                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
122                 ++nCount;
123                 if ( it != s.cbegin() ) {
124                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
125                 }
126                 nPrevKey = it->nKey;
127             }
128             CPPUNIT_ASSERT( nCount == nLimit );
129
130             // Test iterator - random order
131             s.clear();
132             CPPUNIT_ASSERT( s.empty() );
133             {
134                 for ( int i = 0; i < nLimit; ++i )
135                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
136                 CPPUNIT_MSG( PrintStat()(s, "Iterator test, random insert order") );
137             }
138
139             nCount = 0;
140             nPrevKey = 0;
141             for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
142                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
143                 CPPUNIT_ASSERT( s.find( it->nKey ));
144                 it->nVal = (*it).nKey * 2;
145                 ++nCount;
146                 if ( it != s.begin() ) {
147                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
148                 }
149                 nPrevKey = it->nKey;
150             }
151             CPPUNIT_ASSERT( nCount == nLimit );
152
153             nCount = 0;
154             for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
155                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
156                 ++nCount;
157                 if ( it != s.cbegin() ) {
158                     CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
159                 }
160                 nPrevKey = it->nKey;
161             }
162             CPPUNIT_ASSERT( nCount == nLimit );
163
164             // extract test
165             {
166                 typedef typename base_class::less<typename Set::value_type> less_predicate;
167                 typename Set::guarded_ptr gp;
168
169                 // extract/get
170                 for ( int i = 0; i < nLimit; ++i ) {
171                     int nKey = arrRandom[i];
172                     gp = s.get( nKey );
173                     CPPUNIT_ASSERT( gp );
174                     CPPUNIT_ASSERT( !gp.empty());
175                     CPPUNIT_CHECK( gp->nKey == nKey );
176                     CPPUNIT_CHECK( gp->nVal == nKey * 2);
177
178                     gp = s.extract( nKey );
179                     CPPUNIT_ASSERT( gp );
180                     CPPUNIT_ASSERT( !gp.empty());
181                     CPPUNIT_CHECK( gp->nKey == nKey );
182                     CPPUNIT_CHECK( gp->nVal == nKey * 2);
183
184                     gp = s.get( nKey );
185                     CPPUNIT_CHECK( !gp );
186                     CPPUNIT_ASSERT( gp.empty());
187                     CPPUNIT_ASSERT( !s.extract(nKey));
188                 }
189                 CPPUNIT_ASSERT( 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                     gp = s.get_with( wrapped_item( nKey ), wrapped_less());
198                     CPPUNIT_ASSERT( gp );
199                     CPPUNIT_ASSERT( !gp.empty());
200                     CPPUNIT_CHECK( gp->nKey == nKey );
201                     CPPUNIT_CHECK( gp->nVal == nKey );
202
203                     gp = s.extract_with( wrapped_item( nKey ), wrapped_less());
204                     CPPUNIT_ASSERT( gp );
205                     CPPUNIT_ASSERT( !gp.empty());
206                     CPPUNIT_CHECK( gp->nKey == nKey );
207                     CPPUNIT_CHECK( gp->nVal == nKey );
208                     gp = s.get_with( wrapped_item( nKey ), wrapped_less());
209                     CPPUNIT_CHECK( !gp );
210                     CPPUNIT_ASSERT( !s.extract_with( wrapped_item(nKey), wrapped_less() ));
211                 }
212                 CPPUNIT_ASSERT( s.empty() );
213
214                 // extract_min
215                 for ( int i = 0; i < nLimit; ++i )
216                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
217
218                 for ( int i = 0; i < nLimit; ++i ) {
219                     gp = s.extract_min();
220                     CPPUNIT_ASSERT( gp );
221                     CPPUNIT_ASSERT( !gp.empty());
222                     CPPUNIT_CHECK( gp->nKey == i );
223                     CPPUNIT_CHECK( gp->nVal == i );
224                     gp = s.get( i );
225                     CPPUNIT_CHECK( !gp );
226                 }
227                 CPPUNIT_ASSERT( s.empty() );
228                 CPPUNIT_CHECK( !s.extract_min());
229                 CPPUNIT_CHECK( !s.extract_max());
230
231                 // extract_max
232                 for ( int i = 0; i < nLimit; ++i )
233                     CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
234
235                 for ( int i = nLimit-1; i >= 0; --i ) {
236                     gp = s.extract_max();
237                     CPPUNIT_ASSERT( gp );
238                     CPPUNIT_ASSERT( !gp.empty());
239                     CPPUNIT_CHECK( gp->nKey == i );
240                     CPPUNIT_CHECK( gp->nVal == i );
241                     gp = s.get( i );
242                     CPPUNIT_CHECK( !gp );
243                 }
244                 CPPUNIT_ASSERT( s.empty() );
245                 CPPUNIT_CHECK( !s.extract_min());
246                 CPPUNIT_CHECK( !s.extract_max());
247             }
248
249             CPPUNIT_MSG( PrintStat()(s, nullptr) );
250         }
251
252         template <class Set, typename PrintStat >
253         void test_nogc()
254         {
255             typedef typename Set::value_type        value_type;
256             typedef typename Set::iterator          iterator;
257             typedef typename Set::const_iterator    const_iterator;
258
259             Set s;
260             iterator it;
261
262             CPPUNIT_ASSERT( s.empty() );
263             CPPUNIT_ASSERT( check_size( s, 0 ));
264
265             // insert
266             it = s.insert( 10 );
267             CPPUNIT_ASSERT( it != s.end() );
268             CPPUNIT_ASSERT( it->key() == 10 );
269             CPPUNIT_ASSERT( it->val() == 10 );
270             CPPUNIT_ASSERT( !s.empty() );
271             CPPUNIT_ASSERT( check_size( s, 1 ));
272             CPPUNIT_ASSERT( s.insert( 10 ) == s.end() );
273
274             it = s.insert( std::make_pair( 50, 25 ));
275             CPPUNIT_ASSERT( it != s.end() );
276             CPPUNIT_ASSERT( it->key() == 50 );
277             CPPUNIT_ASSERT( it->val() == 25 );
278             CPPUNIT_ASSERT( !s.empty() );
279             CPPUNIT_ASSERT( check_size( s, 2 ));
280             CPPUNIT_ASSERT( s.insert( 50 ) == s.end() );
281
282             // ensure
283             std::pair< iterator, bool>  ensureResult;
284             ensureResult = s.ensure( 20 );
285             CPPUNIT_ASSERT( ensureResult.first != s.end() );
286             CPPUNIT_ASSERT( ensureResult.second  );
287             CPPUNIT_ASSERT( ensureResult.first->key() == 20 );
288             CPPUNIT_ASSERT( ensureResult.first->val() == 20 );
289             CPPUNIT_ASSERT( !s.empty() );
290             CPPUNIT_ASSERT( check_size( s, 3 ));
291
292             ensureResult = s.ensure( std::make_pair( 20, 200 ));
293             CPPUNIT_ASSERT( ensureResult.first != s.end() );
294             CPPUNIT_ASSERT( !ensureResult.second  );
295             CPPUNIT_ASSERT( ensureResult.first->key() == 20 );
296             CPPUNIT_ASSERT( ensureResult.first->val() == 20 );
297             CPPUNIT_ASSERT( !s.empty() );
298             CPPUNIT_ASSERT( check_size( s, 3 ));
299             ensureResult.first->nVal = 22;
300
301             ensureResult = s.ensure( std::make_pair( 30, 33 ));
302             CPPUNIT_ASSERT( ensureResult.first != s.end() );
303             CPPUNIT_ASSERT( ensureResult.second  );
304             CPPUNIT_ASSERT( ensureResult.first->key() == 30 );
305             CPPUNIT_ASSERT( ensureResult.first->val() == 33 );
306             CPPUNIT_ASSERT( !s.empty() );
307             CPPUNIT_ASSERT( check_size( s, 4 ));
308
309             // find
310             it = s.find( 10 );
311             CPPUNIT_ASSERT( it != s.end() );
312             CPPUNIT_ASSERT( it->key() == 10 );
313             CPPUNIT_ASSERT( it->val() == 10 );
314
315             it = s.find( 20 );
316             CPPUNIT_ASSERT( it != s.end() );
317             CPPUNIT_ASSERT( it->key() == 20 );
318             CPPUNIT_ASSERT( it->val() == 22 );
319
320             it = s.find_with( 30, base_class::less<value_type>() );
321             CPPUNIT_ASSERT( it != s.end() );
322             CPPUNIT_ASSERT( it->key() == 30 );
323             CPPUNIT_ASSERT( it->val() == 33 );
324
325             it = s.find( 40 );
326             CPPUNIT_ASSERT( it == s.end() );
327
328             it = s.find( 50 );
329             CPPUNIT_ASSERT( it != s.end() );
330             CPPUNIT_ASSERT( it->key() == 50 );
331             CPPUNIT_ASSERT( it->val() == 25 );
332
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
364             CPPUNIT_ASSERT( !s.empty() );
365             s.clear();
366             CPPUNIT_ASSERT( s.empty() );
367             CPPUNIT_ASSERT( check_size( s, 0 ));
368
369             // get_min test
370             for ( int i = 500; i > 0; --i ) {
371                 CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
372
373                 typename Set::value_type * pVal = s.get_min();
374                 CPPUNIT_ASSERT( pVal != nullptr );
375                 CPPUNIT_CHECK( pVal->nKey == i );
376                 CPPUNIT_CHECK( pVal->nVal ==  i * 2 );
377             }
378             CPPUNIT_ASSERT( !s.empty() );
379             s.clear();
380             CPPUNIT_ASSERT( s.empty() );
381             CPPUNIT_ASSERT( check_size( s, 0 ));
382
383             CPPUNIT_CHECK( s.get_min() == nullptr );
384             CPPUNIT_CHECK( s.get_max() == nullptr );
385
386             // iterator test
387             for ( int i = 0; i < 500; ++i ) {
388                 CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
389
390                 typename Set::value_type * pVal = s.get_max();
391                 CPPUNIT_ASSERT( pVal != nullptr );
392                 CPPUNIT_CHECK( pVal->nKey == i );
393                 CPPUNIT_CHECK( pVal->nVal == i * 2 );
394             }
395             CPPUNIT_ASSERT( !s.empty() );
396             CPPUNIT_ASSERT( check_size( s, 500 ));
397
398             for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
399                 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
400                 it->nVal = (*it).nKey;
401             }
402
403             Set const& refSet = s;
404             for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
405                 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
406             }
407         }
408
409     public:
410         void SkipList_HP_less();
411         void SkipList_HP_cmp();
412         void SkipList_HP_cmpless();
413         void SkipList_HP_less_stat();
414         void SkipList_HP_cmp_stat();
415         void SkipList_HP_cmpless_stat();
416         void SkipList_HP_xorshift_less();
417         void SkipList_HP_xorshift_cmp();
418         void SkipList_HP_xorshift_cmpless();
419         void SkipList_HP_xorshift_less_stat();
420         void SkipList_HP_xorshift_cmp_stat();
421         void SkipList_HP_xorshift_cmpless_stat();
422         void SkipList_HP_turbopas_less();
423         void SkipList_HP_turbopas_cmp();
424         void SkipList_HP_turbopas_cmpless();
425         void SkipList_HP_turbopas_less_stat();
426         void SkipList_HP_turbopas_cmp_stat();
427         void SkipList_HP_turbopas_cmpless_stat();
428         void SkipList_HP_michaelalloc_less();
429         void SkipList_HP_michaelalloc_cmp();
430         void SkipList_HP_michaelalloc_cmpless();
431         void SkipList_HP_michaelalloc_less_stat();
432         void SkipList_HP_michaelalloc_cmp_stat();
433         void SkipList_HP_michaelalloc_cmpless_stat();
434
435         void SkipList_DHP_less();
436         void SkipList_DHP_cmp();
437         void SkipList_DHP_cmpless();
438         void SkipList_DHP_less_stat();
439         void SkipList_DHP_cmp_stat();
440         void SkipList_DHP_cmpless_stat();
441         void SkipList_DHP_xorshift_less();
442         void SkipList_DHP_xorshift_cmp();
443         void SkipList_DHP_xorshift_cmpless();
444         void SkipList_DHP_xorshift_less_stat();
445         void SkipList_DHP_xorshift_cmp_stat();
446         void SkipList_DHP_xorshift_cmpless_stat();
447         void SkipList_DHP_turbopas_less();
448         void SkipList_DHP_turbopas_cmp();
449         void SkipList_DHP_turbopas_cmpless();
450         void SkipList_DHP_turbopas_less_stat();
451         void SkipList_DHP_turbopas_cmp_stat();
452         void SkipList_DHP_turbopas_cmpless_stat();
453         void SkipList_DHP_michaelalloc_less();
454         void SkipList_DHP_michaelalloc_cmp();
455         void SkipList_DHP_michaelalloc_cmpless();
456         void SkipList_DHP_michaelalloc_less_stat();
457         void SkipList_DHP_michaelalloc_cmp_stat();
458         void SkipList_DHP_michaelalloc_cmpless_stat();
459
460         void SkipList_NOGC_less();
461         void SkipList_NOGC_cmp();
462         void SkipList_NOGC_cmpless();
463         void SkipList_NOGC_less_stat();
464         void SkipList_NOGC_cmp_stat();
465         void SkipList_NOGC_cmpless_stat();
466         void SkipList_NOGC_xorshift_less();
467         void SkipList_NOGC_xorshift_cmp();
468         void SkipList_NOGC_xorshift_cmpless();
469         void SkipList_NOGC_xorshift_less_stat();
470         void SkipList_NOGC_xorshift_cmp_stat();
471         void SkipList_NOGC_xorshift_cmpless_stat();
472         void SkipList_NOGC_turbopas_less();
473         void SkipList_NOGC_turbopas_cmp();
474         void SkipList_NOGC_turbopas_cmpless();
475         void SkipList_NOGC_turbopas_less_stat();
476         void SkipList_NOGC_turbopas_cmp_stat();
477         void SkipList_NOGC_turbopas_cmpless_stat();
478         void SkipList_NOGC_michaelalloc_less();
479         void SkipList_NOGC_michaelalloc_cmp();
480         void SkipList_NOGC_michaelalloc_cmpless();
481         void SkipList_NOGC_michaelalloc_less_stat();
482         void SkipList_NOGC_michaelalloc_cmp_stat();
483         void SkipList_NOGC_michaelalloc_cmpless_stat();
484
485         CPPUNIT_TEST_SUITE(SkipListSetHdrTest)
486             CPPUNIT_TEST(SkipList_HP_less)
487             CPPUNIT_TEST(SkipList_HP_cmp)
488             CPPUNIT_TEST(SkipList_HP_cmpless)
489             CPPUNIT_TEST(SkipList_HP_less_stat)
490             CPPUNIT_TEST(SkipList_HP_cmp_stat)
491             CPPUNIT_TEST(SkipList_HP_cmpless_stat)
492             CPPUNIT_TEST(SkipList_HP_xorshift_less)
493             CPPUNIT_TEST(SkipList_HP_xorshift_cmp)
494             CPPUNIT_TEST(SkipList_HP_xorshift_cmpless)
495             CPPUNIT_TEST(SkipList_HP_xorshift_less_stat)
496             CPPUNIT_TEST(SkipList_HP_xorshift_cmp_stat)
497             CPPUNIT_TEST(SkipList_HP_xorshift_cmpless_stat)
498             CPPUNIT_TEST(SkipList_HP_turbopas_less)
499             CPPUNIT_TEST(SkipList_HP_turbopas_cmp)
500             CPPUNIT_TEST(SkipList_HP_turbopas_cmpless)
501             CPPUNIT_TEST(SkipList_HP_turbopas_less_stat)
502             CPPUNIT_TEST(SkipList_HP_turbopas_cmp_stat)
503             CPPUNIT_TEST(SkipList_HP_turbopas_cmpless_stat)
504             CPPUNIT_TEST(SkipList_HP_michaelalloc_less)
505             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp)
506             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless)
507             CPPUNIT_TEST(SkipList_HP_michaelalloc_less_stat)
508             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp_stat)
509             CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless_stat)
510
511             CPPUNIT_TEST(SkipList_DHP_less)
512             CPPUNIT_TEST(SkipList_DHP_cmp)
513             CPPUNIT_TEST(SkipList_DHP_cmpless)
514             CPPUNIT_TEST(SkipList_DHP_less_stat)
515             CPPUNIT_TEST(SkipList_DHP_cmp_stat)
516             CPPUNIT_TEST(SkipList_DHP_cmpless_stat)
517             CPPUNIT_TEST(SkipList_DHP_xorshift_less)
518             CPPUNIT_TEST(SkipList_DHP_xorshift_cmp)
519             CPPUNIT_TEST(SkipList_DHP_xorshift_cmpless)
520             CPPUNIT_TEST(SkipList_DHP_xorshift_less_stat)
521             CPPUNIT_TEST(SkipList_DHP_xorshift_cmp_stat)
522             CPPUNIT_TEST(SkipList_DHP_xorshift_cmpless_stat)
523             CPPUNIT_TEST(SkipList_DHP_turbopas_less)
524             CPPUNIT_TEST(SkipList_DHP_turbopas_cmp)
525             CPPUNIT_TEST(SkipList_DHP_turbopas_cmpless)
526             CPPUNIT_TEST(SkipList_DHP_turbopas_less_stat)
527             CPPUNIT_TEST(SkipList_DHP_turbopas_cmp_stat)
528             CPPUNIT_TEST(SkipList_DHP_turbopas_cmpless_stat)
529             CPPUNIT_TEST(SkipList_DHP_michaelalloc_less)
530             CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmp)
531             CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmpless)
532             CPPUNIT_TEST(SkipList_DHP_michaelalloc_less_stat)
533             CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmp_stat)
534             CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmpless_stat)
535
536             CPPUNIT_TEST(SkipList_NOGC_less)
537             CPPUNIT_TEST(SkipList_NOGC_cmp)
538             CPPUNIT_TEST(SkipList_NOGC_cmpless)
539             CPPUNIT_TEST(SkipList_NOGC_less_stat)
540             CPPUNIT_TEST(SkipList_NOGC_cmp_stat)
541             CPPUNIT_TEST(SkipList_NOGC_cmpless_stat)
542             CPPUNIT_TEST(SkipList_NOGC_xorshift_less)
543             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp)
544             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless)
545             CPPUNIT_TEST(SkipList_NOGC_xorshift_less_stat)
546             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp_stat)
547             CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless_stat)
548             CPPUNIT_TEST(SkipList_NOGC_turbopas_less)
549             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp)
550             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless)
551             CPPUNIT_TEST(SkipList_NOGC_turbopas_less_stat)
552             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp_stat)
553             CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless_stat)
554             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less)
555             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp)
556             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless)
557             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less_stat)
558             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp_stat)
559             CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless_stat)
560
561         CPPUNIT_TEST_SUITE_END()
562
563     };
564 }