3 #ifndef CDSHDRTEST_ELLENBINTREE_MAP_H
4 #define CDSHDRTEST_ELLENBINTREE_MAP_H
6 #include "cppunit/cppunit_proxy.h"
7 #include "size_check.h"
8 #include <functional> // ref
12 using misc::check_size;
14 class EllenBinTreeMapHdrTest: public CppUnitMini::TestCase
20 size_t nInsertFuncCall;
21 size_t nEnsureExistFuncCall;
22 size_t nEnsureNewFuncCall;
23 size_t nEraseFuncCall;
25 size_t nFindConstFuncCall;
29 , nEnsureExistFuncCall(0)
30 , nEnsureNewFuncCall(0)
33 , nFindConstFuncCall(0)
37 struct value_type: public stat_data
49 value_type( value_type const& v )
53 value_type( value_type&& v )
57 value_type& operator=( int n )
63 value_type& operator=( value_type const& v )
70 typedef std::pair<key_type const, value_type> pair_type;
73 bool operator()( int k1, int k2 ) const
80 int cmp( int k1, int k2 ) const
82 return k1 < k2 ? -1 : (k1 > k2 ? 1 : 0);
84 int operator()( int k1, int k2 ) const
100 bool operator()( wrapped_int const& w, int n ) const
104 bool operator()( int n, wrapped_int const& w ) const
109 template <typename T>
110 bool operator()( wrapped_int const& w, T const& v ) const
112 return w.nKey < v.nKey;
114 template <typename T>
115 bool operator()( T const& v, wrapped_int const& w ) const
117 return v.nKey < w.nKey;
123 template <typename Map>
124 struct insert_functor
126 typedef typename Map::value_type pair_type;
129 void operator()( pair_type& item )
131 item.second.nVal = item.first * 3;
135 void operator()( bool bNew, pair_type& item )
138 item.second.nVal = item.first * 2;
140 item.second.nVal = item.first * 5;
147 check_value( int nExpected )
148 : m_nExpected( nExpected )
151 template <typename T>
152 void operator ()( T& pair )
154 CPPUNIT_ASSERT_CURRENT( pair.second.nVal == m_nExpected );
156 template <typename T, typename Q>
157 void operator ()( T& pair, Q )
159 CPPUNIT_ASSERT_CURRENT( pair.second.nVal == m_nExpected );
163 struct extract_functor
166 void operator()( pair_type const& val )
168 *m_pVal = val.second.nVal;
173 static const size_t c_nItemCount = 10000;
182 : pFirst( new int[c_nItemCount] )
183 , pLast( pFirst + c_nItemCount )
186 for ( int * p = pFirst; p != pLast; ++p, ++i )
189 std::random_shuffle( pFirst, pLast );
197 int operator[]( size_t i ) const
199 assert( i < size_t(pLast - pFirst) );
204 struct extract_functor2
208 template <typename Q>
209 void operator()( Q&, pair_type& v )
219 void test_with( Map& m )
221 std::pair<bool, bool> ensureResult;
224 CPPUNIT_ASSERT( m.empty() );
225 CPPUNIT_ASSERT( check_size( m, 0 ));
226 CPPUNIT_ASSERT( !m.find(25) );
227 CPPUNIT_ASSERT( m.insert( 25 ) ) ; // value = 0
228 CPPUNIT_ASSERT( m.find(25) );
229 CPPUNIT_ASSERT( !m.empty() );
230 CPPUNIT_ASSERT( check_size( m, 1 ));
231 CPPUNIT_ASSERT( m.find(25) );
233 CPPUNIT_ASSERT( !m.insert( 25 ) );
234 CPPUNIT_ASSERT( !m.empty() );
235 CPPUNIT_ASSERT( check_size( m, 1 ));
237 CPPUNIT_ASSERT( !m.find_with(10, less()) );
238 CPPUNIT_ASSERT( m.insert( 10, 10 ) );
239 CPPUNIT_ASSERT( !m.empty() );
240 CPPUNIT_ASSERT( check_size( m, 2 ));
241 CPPUNIT_ASSERT( m.find_with(10, less()) );
243 CPPUNIT_ASSERT( !m.insert( 10, 20 ) );
244 CPPUNIT_ASSERT( !m.empty() );
245 CPPUNIT_ASSERT( check_size( m, 2 ));
247 CPPUNIT_ASSERT( !m.find(30) );
248 CPPUNIT_ASSERT( m.insert_key( 30, insert_functor<Map>() ) ) ; // value = 90
249 CPPUNIT_ASSERT( !m.empty() );
250 CPPUNIT_ASSERT( check_size( m, 3 ));
251 CPPUNIT_ASSERT( m.find(30) );
253 CPPUNIT_ASSERT( !m.insert_key( 10, insert_functor<Map>() ) );
254 CPPUNIT_ASSERT( !m.insert_key( 25, insert_functor<Map>() ) );
255 CPPUNIT_ASSERT( !m.insert_key( 30, insert_functor<Map>() ) );
258 CPPUNIT_ASSERT( !m.find(27) );
259 ensureResult = m.ensure( 27, insert_functor<Map>() ) ; // value = 54
260 CPPUNIT_ASSERT( ensureResult.first );
261 CPPUNIT_ASSERT( ensureResult.second );
262 CPPUNIT_ASSERT( m.find(27) );
266 CPPUNIT_ASSERT( m.find( 10, std::ref(chk) ));
268 CPPUNIT_ASSERT( m.find_with( 25, less(), std::ref( chk ) ) );
269 chk.m_nExpected = 90;
270 CPPUNIT_ASSERT( m.find( 30, std::ref( chk ) ) );
271 chk.m_nExpected = 54;
272 CPPUNIT_ASSERT( m.find( 27, std::ref( chk ) ) );
274 ensureResult = m.ensure( 10, insert_functor<Map>() ) ; // value = 50
275 CPPUNIT_ASSERT( ensureResult.first );
276 CPPUNIT_ASSERT( !ensureResult.second );
277 chk.m_nExpected = 50;
278 CPPUNIT_ASSERT( m.find( 10, std::ref( chk ) ) );
281 CPPUNIT_ASSERT( !m.find(100) );
282 CPPUNIT_ASSERT( !m.erase( 100 )) ; // not found
284 CPPUNIT_ASSERT( m.find(25) );
285 CPPUNIT_ASSERT( check_size( m, 4 ));
286 CPPUNIT_ASSERT( m.erase( 25 ));
287 CPPUNIT_ASSERT( !m.empty() );
288 CPPUNIT_ASSERT( check_size( m, 3 ));
289 CPPUNIT_ASSERT( !m.find(25) );
290 CPPUNIT_ASSERT( !m.erase( 25 ));
292 CPPUNIT_ASSERT( !m.find(258) );
293 CPPUNIT_ASSERT( m.insert(258))
294 CPPUNIT_ASSERT( check_size( m, 4 ));
295 CPPUNIT_ASSERT( m.find_with(258, less()) );
296 CPPUNIT_ASSERT( m.erase_with( 258, less() ));
297 CPPUNIT_ASSERT( !m.empty() );
298 CPPUNIT_ASSERT( check_size( m, 3 ));
299 CPPUNIT_ASSERT( !m.find(258) );
300 CPPUNIT_ASSERT( !m.erase_with( 258, less() ));
306 CPPUNIT_ASSERT( !m.find(29) );
307 CPPUNIT_ASSERT( m.insert(29, 290));
308 CPPUNIT_ASSERT( check_size( m, 4 ));
309 CPPUNIT_ASSERT( m.erase_with( 29, less(), std::ref( ext ) ) );
310 CPPUNIT_ASSERT( !m.empty() );
311 CPPUNIT_ASSERT( check_size( m, 3 ));
312 CPPUNIT_ASSERT( nVal == 290 );
314 CPPUNIT_ASSERT( !m.erase_with( 29, less(), std::ref( ext ) ) );
315 CPPUNIT_ASSERT( nVal == -1 );
317 CPPUNIT_ASSERT( m.erase( 30, std::ref( ext ) ) );
318 CPPUNIT_ASSERT( !m.empty() );
319 CPPUNIT_ASSERT( check_size( m, 2 ));
320 CPPUNIT_ASSERT( nVal == 90 );
322 CPPUNIT_ASSERT( !m.erase( 30, std::ref( ext ) ) );
323 CPPUNIT_ASSERT( nVal == -1 );
326 CPPUNIT_ASSERT( m.empty() );
327 CPPUNIT_ASSERT( check_size( m, 0 ));
330 CPPUNIT_ASSERT( m.emplace(126) ) ; // key = 126, val = 0
331 CPPUNIT_ASSERT( m.emplace(137, 731)) ; // key = 137, val = 731
332 CPPUNIT_ASSERT( m.emplace( 149, value_type(941) )) ; // key = 149, val = 941
334 CPPUNIT_ASSERT( !m.empty() );
335 CPPUNIT_ASSERT( check_size( m, 3 ));
338 CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
339 chk.m_nExpected = 731;
340 CPPUNIT_ASSERT( m.find_with( 137, less(), std::ref(chk) ));
341 chk.m_nExpected = 941;
342 CPPUNIT_ASSERT( m.find( 149, std::ref(chk) ));
344 CPPUNIT_ASSERT( !m.emplace(126, 621)) ; // already in map
346 CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
347 CPPUNIT_ASSERT( !m.empty() );
348 CPPUNIT_ASSERT( check_size( m, 3 ));
351 CPPUNIT_ASSERT( m.empty() );
352 CPPUNIT_ASSERT( check_size( m, 0 ));
355 template <typename Map>
356 void fill_map( Map& s, data_array& a )
358 CPPUNIT_ASSERT( s.empty() );
359 for ( size_t i = 0; i < c_nItemCount; ++i ) {
360 CPPUNIT_ASSERT( s.insert( a[i] ));
362 CPPUNIT_ASSERT( !s.empty() );
363 CPPUNIT_ASSERT( check_size( s, c_nItemCount ));
366 template <class Map, class PrintStat>
369 typedef Map map_type;
376 CPPUNIT_ASSERT( m.empty() );
377 CPPUNIT_ASSERT( check_size( m, 0 ));
381 typename map_type::guarded_ptr gp;
387 std::pair<key_type, value_type> v;
388 while ( !m.empty() ) {
389 CPPUNIT_ASSERT( m.extract_min( gp ) );
390 CPPUNIT_ASSERT( !gp.empty());
391 CPPUNIT_ASSERT( gp->first == i );
395 CPPUNIT_ASSERT( m.empty() );
396 CPPUNIT_ASSERT( check_size( m, 0 ));
400 i = (int) c_nItemCount - 1;
401 while ( !m.empty() ) {
402 CPPUNIT_ASSERT( m.extract_max( gp ) );
403 CPPUNIT_ASSERT( !gp.empty());
404 CPPUNIT_ASSERT( gp->first == i );
408 CPPUNIT_ASSERT( m.empty() );
409 CPPUNIT_ASSERT( check_size( m, 0 ));
412 for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
414 CPPUNIT_ASSERT( m.get( gp, nKey ));
415 CPPUNIT_ASSERT( !gp.empty());
416 CPPUNIT_CHECK( gp->first == nKey );
419 CPPUNIT_ASSERT( m.extract( gp, nKey ));
420 CPPUNIT_ASSERT( !gp.empty());
421 CPPUNIT_CHECK( gp->first == nKey );
424 CPPUNIT_CHECK( !m.get( gp, nKey ));
425 CPPUNIT_CHECK( gp.empty());
426 CPPUNIT_CHECK( !m.extract( gp, nKey ));
427 CPPUNIT_CHECK( gp.empty());
429 CPPUNIT_ASSERT( m.empty() );
430 CPPUNIT_ASSERT( check_size( m, 0 ));
433 for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
435 CPPUNIT_ASSERT( m.get_with( gp, wrapped_int(nKey), wrapped_less() ));
436 CPPUNIT_ASSERT( !gp.empty());
437 CPPUNIT_CHECK( gp->first == nKey );
440 CPPUNIT_ASSERT( m.extract_with( gp, wrapped_int(nKey), wrapped_less() ));
441 CPPUNIT_ASSERT( !gp.empty());
442 CPPUNIT_CHECK( gp->first == nKey );
445 CPPUNIT_CHECK( !m.get_with( gp, wrapped_int(nKey), wrapped_less() ));
446 CPPUNIT_CHECK( gp.empty());
447 CPPUNIT_CHECK( !m.extract_with( gp, wrapped_int(nKey), wrapped_less() ));
448 CPPUNIT_CHECK( gp.empty());
451 CPPUNIT_ASSERT( m.empty() );
452 CPPUNIT_ASSERT( check_size( m, 0 ));
458 template <class Map, class PrintStat>
461 typedef Map map_type;
468 CPPUNIT_ASSERT( m.empty() );
469 CPPUNIT_ASSERT( check_size( m, 0 ));
473 typename map_type::exempt_ptr ep;
478 while ( !m.empty() ) {
479 CPPUNIT_ASSERT( m.extract_min( ep ) );
480 CPPUNIT_ASSERT( !ep.empty());
481 CPPUNIT_ASSERT(ep->first == i );
485 CPPUNIT_ASSERT( m.empty() );
486 CPPUNIT_ASSERT( check_size( m, 0 ));
487 CPPUNIT_ASSERT( !m.extract_min( ep ) );
488 CPPUNIT_ASSERT( ep.empty());
491 i = (int) c_nItemCount - 1;
492 while ( !m.empty() ) {
493 CPPUNIT_ASSERT( m.extract_max( ep ) );
494 CPPUNIT_ASSERT( !ep.empty());
495 CPPUNIT_ASSERT( ep->first == i );
499 CPPUNIT_ASSERT( m.empty() );
500 CPPUNIT_ASSERT( check_size( m, 0 ));
501 CPPUNIT_ASSERT( !m.extract_max( ep ) );
502 CPPUNIT_ASSERT( ep.empty());
505 for ( size_t i = 0; i < c_nItemCount; ++i ) {
508 typename map_type::rcu_lock l;
509 typename map_type::value_type * pVal = m.get(nKey);
510 CPPUNIT_ASSERT( pVal != nullptr );
511 CPPUNIT_CHECK( pVal->first == nKey);
513 CPPUNIT_ASSERT( m.extract( ep, nKey ));
514 CPPUNIT_ASSERT( !ep.empty());
515 CPPUNIT_CHECK( ep->first == nKey);
518 CPPUNIT_ASSERT( !m.extract( ep, nKey ));
519 CPPUNIT_ASSERT( ep.empty());
521 typename map_type::rcu_lock l;
522 CPPUNIT_CHECK( !m.get(nKey));
525 CPPUNIT_ASSERT( m.empty() );
526 CPPUNIT_ASSERT( check_size( m, 0 ));
529 for ( size_t i = 0; i < c_nItemCount; ++i ) {
532 typename map_type::rcu_lock l;
533 typename map_type::value_type * pVal = m.get_with(wrapped_int(nKey), wrapped_less());
534 CPPUNIT_ASSERT( pVal != nullptr );
535 CPPUNIT_CHECK( pVal->first == nKey);
537 CPPUNIT_ASSERT( m.extract_with( ep, wrapped_int(nKey), wrapped_less() ));
538 CPPUNIT_ASSERT( !ep.empty());
539 CPPUNIT_CHECK( ep->first == nKey);
542 CPPUNIT_ASSERT( !m.extract_with( ep, wrapped_int(nKey), wrapped_less() ));
543 CPPUNIT_ASSERT( ep.empty());
545 typename map_type::rcu_lock l;
546 CPPUNIT_CHECK( !m.get_with(wrapped_int(nKey), wrapped_less()));
549 CPPUNIT_ASSERT( m.empty() );
550 CPPUNIT_ASSERT( check_size( m, 0 ));
556 void EllenBinTree_rcu_gpi_less();
557 void EllenBinTree_rcu_gpi_cmp();
558 void EllenBinTree_rcu_gpi_cmpless();
559 void EllenBinTree_rcu_gpi_less_ic();
560 void EllenBinTree_rcu_gpi_cmp_ic();
561 void EllenBinTree_rcu_gpi_less_stat();
562 void EllenBinTree_rcu_gpi_cmp_ic_stat();
563 void EllenBinTree_rcu_gpi_less_pool();
564 void EllenBinTree_rcu_gpi_less_pool_ic_stat();
566 void EllenBinTree_hp_less();
567 void EllenBinTree_hp_cmp();
568 void EllenBinTree_hp_cmpless();
569 void EllenBinTree_hp_less_ic();
570 void EllenBinTree_hp_cmp_ic();
571 void EllenBinTree_hp_less_stat();
572 void EllenBinTree_hp_cmp_ic_stat();
573 void EllenBinTree_hp_less_pool();
574 void EllenBinTree_hp_less_pool_ic_stat();
576 void EllenBinTree_ptb_less();
577 void EllenBinTree_ptb_cmp();
578 void EllenBinTree_ptb_cmpless();
579 void EllenBinTree_ptb_less_ic();
580 void EllenBinTree_ptb_cmp_ic();
581 void EllenBinTree_ptb_less_stat();
582 void EllenBinTree_ptb_cmp_ic_stat();
583 void EllenBinTree_ptb_less_pool();
584 void EllenBinTree_ptb_less_pool_ic_stat();
586 void EllenBinTree_rcu_gpb_less();
587 void EllenBinTree_rcu_gpb_cmp();
588 void EllenBinTree_rcu_gpb_cmpless();
589 void EllenBinTree_rcu_gpb_less_ic();
590 void EllenBinTree_rcu_gpb_cmp_ic();
591 void EllenBinTree_rcu_gpb_less_stat();
592 void EllenBinTree_rcu_gpb_cmp_ic_stat();
593 void EllenBinTree_rcu_gpb_less_pool();
594 void EllenBinTree_rcu_gpb_less_pool_ic_stat();
596 void EllenBinTree_rcu_gpt_less();
597 void EllenBinTree_rcu_gpt_cmp();
598 void EllenBinTree_rcu_gpt_cmpless();
599 void EllenBinTree_rcu_gpt_less_ic();
600 void EllenBinTree_rcu_gpt_cmp_ic();
601 void EllenBinTree_rcu_gpt_less_stat();
602 void EllenBinTree_rcu_gpt_cmp_ic_stat();
603 void EllenBinTree_rcu_gpt_less_pool();
604 void EllenBinTree_rcu_gpt_less_pool_ic_stat();
606 void EllenBinTree_rcu_shb_less();
607 void EllenBinTree_rcu_shb_cmp();
608 void EllenBinTree_rcu_shb_cmpless();
609 void EllenBinTree_rcu_shb_less_ic();
610 void EllenBinTree_rcu_shb_cmp_ic();
611 void EllenBinTree_rcu_shb_less_stat();
612 void EllenBinTree_rcu_shb_cmp_ic_stat();
613 void EllenBinTree_rcu_shb_less_pool();
614 void EllenBinTree_rcu_shb_less_pool_ic_stat();
616 void EllenBinTree_rcu_sht_less();
617 void EllenBinTree_rcu_sht_cmp();
618 void EllenBinTree_rcu_sht_cmpless();
619 void EllenBinTree_rcu_sht_less_ic();
620 void EllenBinTree_rcu_sht_cmp_ic();
621 void EllenBinTree_rcu_sht_less_stat();
622 void EllenBinTree_rcu_sht_cmp_ic_stat();
623 void EllenBinTree_rcu_sht_less_pool();
624 void EllenBinTree_rcu_sht_less_pool_ic_stat();
626 CPPUNIT_TEST_SUITE(EllenBinTreeMapHdrTest)
627 CPPUNIT_TEST(EllenBinTree_hp_less)
628 CPPUNIT_TEST(EllenBinTree_hp_cmp)
629 CPPUNIT_TEST(EllenBinTree_hp_less_stat)
630 CPPUNIT_TEST(EllenBinTree_hp_cmpless)
631 CPPUNIT_TEST(EllenBinTree_hp_less_ic)
632 CPPUNIT_TEST(EllenBinTree_hp_cmp_ic)
633 CPPUNIT_TEST(EllenBinTree_hp_cmp_ic_stat)
634 CPPUNIT_TEST(EllenBinTree_hp_less_pool)
635 CPPUNIT_TEST(EllenBinTree_hp_less_pool_ic_stat)
637 CPPUNIT_TEST(EllenBinTree_ptb_less)
638 CPPUNIT_TEST(EllenBinTree_ptb_cmp)
639 CPPUNIT_TEST(EllenBinTree_ptb_less_stat)
640 CPPUNIT_TEST(EllenBinTree_ptb_cmpless)
641 CPPUNIT_TEST(EllenBinTree_ptb_less_ic)
642 CPPUNIT_TEST(EllenBinTree_ptb_cmp_ic)
643 CPPUNIT_TEST(EllenBinTree_ptb_cmp_ic_stat)
644 CPPUNIT_TEST(EllenBinTree_ptb_less_pool)
645 CPPUNIT_TEST(EllenBinTree_ptb_less_pool_ic_stat)
647 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less)
648 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp)
649 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_stat)
650 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmpless)
651 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_ic)
652 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic)
653 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic_stat)
654 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool)
655 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool_ic_stat)
657 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less)
658 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp)
659 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_stat)
660 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmpless)
661 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_ic)
662 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic)
663 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic_stat)
664 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool)
665 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool_ic_stat)
667 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less)
668 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp)
669 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_stat)
670 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmpless)
671 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_ic)
672 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic)
673 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic_stat)
674 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool)
675 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool_ic_stat)
677 CPPUNIT_TEST(EllenBinTree_rcu_shb_less)
678 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp)
679 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_stat)
680 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmpless)
681 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_ic)
682 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic)
683 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic_stat)
684 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool)
685 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool_ic_stat)
687 CPPUNIT_TEST(EllenBinTree_rcu_sht_less)
688 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp)
689 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_stat)
690 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmpless)
691 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_ic)
692 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic)
693 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic_stat)
694 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool)
695 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool_ic_stat)
697 CPPUNIT_TEST_SUITE_END()
702 #endif // #ifndef CDSHDRTEST_ELLENBINTREE_MAP_H