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