3 #ifndef CDSHDRTEST_ELLENBINTREE_MAP_H
4 #define CDSHDRTEST_ELLENBINTREE_MAP_H
6 #include "cppunit/cppunit_proxy.h"
7 #include "size_check.h"
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 #ifdef CDS_MOVE_SEMANTICS_SUPPORT
54 value_type( value_type&& v )
59 value_type& operator=( int n )
65 value_type& operator=( value_type const& v )
72 typedef std::pair<key_type const, value_type> pair_type;
75 bool operator()( int k1, int k2 ) const
82 int cmp( int k1, int k2 ) const
84 return k1 < k2 ? -1 : (k1 > k2 ? 1 : 0);
86 int operator()( int k1, int k2 ) const
102 bool operator()( wrapped_int const& w, int n ) const
106 bool operator()( int n, wrapped_int const& w ) const
111 template <typename T>
112 bool operator()( wrapped_int const& w, T const& v ) const
114 return w.nKey < v.nKey;
116 template <typename T>
117 bool operator()( T const& v, wrapped_int const& w ) const
119 return v.nKey < w.nKey;
125 template <typename Map>
126 struct insert_functor
128 typedef typename Map::value_type pair_type;
131 void operator()( pair_type& item )
133 item.second.nVal = item.first * 3;
137 void operator()( bool bNew, pair_type& item )
140 item.second.nVal = item.first * 2;
142 item.second.nVal = item.first * 5;
149 check_value( int nExpected )
150 : m_nExpected( nExpected )
153 template <typename T>
154 void operator ()( T& pair )
156 CPPUNIT_ASSERT_CURRENT( pair.second.nVal == m_nExpected );
158 template <typename T, typename Q>
159 void operator ()( T& pair, Q )
161 CPPUNIT_ASSERT_CURRENT( pair.second.nVal == m_nExpected );
165 struct extract_functor
168 void operator()( pair_type const& val )
170 *m_pVal = val.second.nVal;
175 static const size_t c_nItemCount = 10000;
184 : pFirst( new int[c_nItemCount] )
185 , pLast( pFirst + c_nItemCount )
188 for ( int * p = pFirst; p != pLast; ++p, ++i )
191 std::random_shuffle( pFirst, pLast );
199 int operator[]( size_t i ) const
201 assert( i < size_t(pLast - pFirst) );
206 struct extract_functor2
210 template <typename Q>
211 void operator()( Q&, pair_type& v )
221 void test_with( Map& m )
223 std::pair<bool, bool> ensureResult;
226 CPPUNIT_ASSERT( m.empty() );
227 CPPUNIT_ASSERT( check_size( m, 0 ));
228 CPPUNIT_ASSERT( !m.find(25) );
229 CPPUNIT_ASSERT( m.insert( 25 ) ) ; // value = 0
230 CPPUNIT_ASSERT( m.find(25) );
231 CPPUNIT_ASSERT( !m.empty() );
232 CPPUNIT_ASSERT( check_size( m, 1 ));
233 CPPUNIT_ASSERT( m.find(25) );
235 CPPUNIT_ASSERT( !m.insert( 25 ) );
236 CPPUNIT_ASSERT( !m.empty() );
237 CPPUNIT_ASSERT( check_size( m, 1 ));
239 CPPUNIT_ASSERT( !m.find_with(10, less()) );
240 CPPUNIT_ASSERT( m.insert( 10, 10 ) );
241 CPPUNIT_ASSERT( !m.empty() );
242 CPPUNIT_ASSERT( check_size( m, 2 ));
243 CPPUNIT_ASSERT( m.find_with(10, less()) );
245 CPPUNIT_ASSERT( !m.insert( 10, 20 ) );
246 CPPUNIT_ASSERT( !m.empty() );
247 CPPUNIT_ASSERT( check_size( m, 2 ));
249 CPPUNIT_ASSERT( !m.find(30) );
250 CPPUNIT_ASSERT( m.insert_key( 30, insert_functor<Map>() ) ) ; // value = 90
251 CPPUNIT_ASSERT( !m.empty() );
252 CPPUNIT_ASSERT( check_size( m, 3 ));
253 CPPUNIT_ASSERT( m.find(30) );
255 CPPUNIT_ASSERT( !m.insert_key( 10, insert_functor<Map>() ) );
256 CPPUNIT_ASSERT( !m.insert_key( 25, insert_functor<Map>() ) );
257 CPPUNIT_ASSERT( !m.insert_key( 30, insert_functor<Map>() ) );
260 CPPUNIT_ASSERT( !m.find(27) );
261 ensureResult = m.ensure( 27, insert_functor<Map>() ) ; // value = 54
262 CPPUNIT_ASSERT( ensureResult.first );
263 CPPUNIT_ASSERT( ensureResult.second );
264 CPPUNIT_ASSERT( m.find(27) );
268 CPPUNIT_ASSERT( m.find( 10, cds::ref(chk) ));
270 CPPUNIT_ASSERT( m.find_with( 25, less(), boost::ref(chk) ));
271 chk.m_nExpected = 90;
272 CPPUNIT_ASSERT( m.find( 30, boost::ref(chk) ));
273 chk.m_nExpected = 54;
274 CPPUNIT_ASSERT( m.find( 27, boost::ref(chk) ));
276 ensureResult = m.ensure( 10, insert_functor<Map>() ) ; // value = 50
277 CPPUNIT_ASSERT( ensureResult.first );
278 CPPUNIT_ASSERT( !ensureResult.second );
279 chk.m_nExpected = 50;
280 CPPUNIT_ASSERT( m.find( 10, boost::ref(chk) ));
283 CPPUNIT_ASSERT( !m.find(100) );
284 CPPUNIT_ASSERT( !m.erase( 100 )) ; // not found
286 CPPUNIT_ASSERT( m.find(25) );
287 CPPUNIT_ASSERT( check_size( m, 4 ));
288 CPPUNIT_ASSERT( m.erase( 25 ));
289 CPPUNIT_ASSERT( !m.empty() );
290 CPPUNIT_ASSERT( check_size( m, 3 ));
291 CPPUNIT_ASSERT( !m.find(25) );
292 CPPUNIT_ASSERT( !m.erase( 25 ));
294 CPPUNIT_ASSERT( !m.find(258) );
295 CPPUNIT_ASSERT( m.insert(258))
296 CPPUNIT_ASSERT( check_size( m, 4 ));
297 CPPUNIT_ASSERT( m.find_with(258, less()) );
298 CPPUNIT_ASSERT( m.erase_with( 258, less() ));
299 CPPUNIT_ASSERT( !m.empty() );
300 CPPUNIT_ASSERT( check_size( m, 3 ));
301 CPPUNIT_ASSERT( !m.find(258) );
302 CPPUNIT_ASSERT( !m.erase_with( 258, less() ));
308 CPPUNIT_ASSERT( !m.find(29) );
309 CPPUNIT_ASSERT( m.insert(29, 290));
310 CPPUNIT_ASSERT( check_size( m, 4 ));
311 CPPUNIT_ASSERT( m.erase_with( 29, less(), boost::ref(ext)));
312 CPPUNIT_ASSERT( !m.empty() );
313 CPPUNIT_ASSERT( check_size( m, 3 ));
314 CPPUNIT_ASSERT( nVal == 290 );
316 CPPUNIT_ASSERT( !m.erase_with( 29, less(), boost::ref(ext)));
317 CPPUNIT_ASSERT( nVal == -1 );
319 CPPUNIT_ASSERT( m.erase( 30, boost::ref(ext)));
320 CPPUNIT_ASSERT( !m.empty() );
321 CPPUNIT_ASSERT( check_size( m, 2 ));
322 CPPUNIT_ASSERT( nVal == 90 );
324 CPPUNIT_ASSERT( !m.erase( 30, boost::ref(ext)));
325 CPPUNIT_ASSERT( nVal == -1 );
328 CPPUNIT_ASSERT( m.empty() );
329 CPPUNIT_ASSERT( check_size( m, 0 ));
331 # ifdef CDS_EMPLACE_SUPPORT
333 CPPUNIT_ASSERT( m.emplace(126) ) ; // key = 126, val = 0
334 CPPUNIT_ASSERT( m.emplace(137, 731)) ; // key = 137, val = 731
335 CPPUNIT_ASSERT( m.emplace( 149, value_type(941) )) ; // key = 149, val = 941
337 CPPUNIT_ASSERT( !m.empty() );
338 CPPUNIT_ASSERT( check_size( m, 3 ));
341 CPPUNIT_ASSERT( m.find( 126, cds::ref(chk) ));
342 chk.m_nExpected = 731;
343 CPPUNIT_ASSERT( m.find_with( 137, less(), cds::ref(chk) ));
344 chk.m_nExpected = 941;
345 CPPUNIT_ASSERT( m.find( 149, cds::ref(chk) ));
347 CPPUNIT_ASSERT( !m.emplace(126, 621)) ; // already in map
349 CPPUNIT_ASSERT( m.find( 126, cds::ref(chk) ));
350 CPPUNIT_ASSERT( !m.empty() );
351 CPPUNIT_ASSERT( check_size( m, 3 ));
354 CPPUNIT_ASSERT( m.empty() );
355 CPPUNIT_ASSERT( check_size( m, 0 ));
359 template <typename Map>
360 void fill_map( Map& s, data_array& a )
362 CPPUNIT_ASSERT( s.empty() );
363 for ( size_t i = 0; i < c_nItemCount; ++i ) {
364 CPPUNIT_ASSERT( s.insert( a[i] ));
366 CPPUNIT_ASSERT( !s.empty() );
367 CPPUNIT_ASSERT( check_size( s, c_nItemCount ));
370 template <class Map, class PrintStat>
373 typedef Map map_type;
380 CPPUNIT_ASSERT( m.empty() );
381 CPPUNIT_ASSERT( check_size( m, 0 ));
385 typename map_type::guarded_ptr gp;
391 std::pair<key_type, value_type> v;
392 while ( !m.empty() ) {
393 CPPUNIT_ASSERT( m.extract_min( gp ) );
394 CPPUNIT_ASSERT( !gp.empty());
395 CPPUNIT_ASSERT( gp->first == i );
399 CPPUNIT_ASSERT( m.empty() );
400 CPPUNIT_ASSERT( check_size( m, 0 ));
404 i = (int) c_nItemCount - 1;
405 while ( !m.empty() ) {
406 CPPUNIT_ASSERT( m.extract_max( gp ) );
407 CPPUNIT_ASSERT( !gp.empty());
408 CPPUNIT_ASSERT( gp->first == i );
412 CPPUNIT_ASSERT( m.empty() );
413 CPPUNIT_ASSERT( check_size( m, 0 ));
416 for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
418 CPPUNIT_ASSERT( m.get( gp, nKey ));
419 CPPUNIT_ASSERT( !gp.empty());
420 CPPUNIT_CHECK( gp->first == nKey );
423 CPPUNIT_ASSERT( m.extract( gp, nKey ));
424 CPPUNIT_ASSERT( !gp.empty());
425 CPPUNIT_CHECK( gp->first == nKey );
428 CPPUNIT_CHECK( !m.get( gp, nKey ));
429 CPPUNIT_CHECK( gp.empty());
430 CPPUNIT_CHECK( !m.extract( gp, nKey ));
431 CPPUNIT_CHECK( gp.empty());
433 CPPUNIT_ASSERT( m.empty() );
434 CPPUNIT_ASSERT( check_size( m, 0 ));
437 for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
439 CPPUNIT_ASSERT( m.get_with( gp, wrapped_int(nKey), wrapped_less() ));
440 CPPUNIT_ASSERT( !gp.empty());
441 CPPUNIT_CHECK( gp->first == nKey );
444 CPPUNIT_ASSERT( m.extract_with( gp, wrapped_int(nKey), wrapped_less() ));
445 CPPUNIT_ASSERT( !gp.empty());
446 CPPUNIT_CHECK( gp->first == nKey );
449 CPPUNIT_CHECK( !m.get_with( gp, wrapped_int(nKey), wrapped_less() ));
450 CPPUNIT_CHECK( gp.empty());
451 CPPUNIT_CHECK( !m.extract_with( gp, wrapped_int(nKey), wrapped_less() ));
452 CPPUNIT_CHECK( gp.empty());
455 CPPUNIT_ASSERT( m.empty() );
456 CPPUNIT_ASSERT( check_size( m, 0 ));
462 template <class Map, class PrintStat>
465 typedef Map map_type;
472 CPPUNIT_ASSERT( m.empty() );
473 CPPUNIT_ASSERT( check_size( m, 0 ));
477 typename map_type::exempt_ptr ep;
482 while ( !m.empty() ) {
483 CPPUNIT_ASSERT( m.extract_min( ep ) );
484 CPPUNIT_ASSERT( !ep.empty());
485 CPPUNIT_ASSERT(ep->first == i );
489 CPPUNIT_ASSERT( m.empty() );
490 CPPUNIT_ASSERT( check_size( m, 0 ));
491 CPPUNIT_ASSERT( !m.extract_min( ep ) );
492 CPPUNIT_ASSERT( ep.empty());
495 i = (int) c_nItemCount - 1;
496 while ( !m.empty() ) {
497 CPPUNIT_ASSERT( m.extract_max( ep ) );
498 CPPUNIT_ASSERT( !ep.empty());
499 CPPUNIT_ASSERT( ep->first == i );
503 CPPUNIT_ASSERT( m.empty() );
504 CPPUNIT_ASSERT( check_size( m, 0 ));
505 CPPUNIT_ASSERT( !m.extract_max( ep ) );
506 CPPUNIT_ASSERT( ep.empty());
509 for ( size_t i = 0; i < c_nItemCount; ++i ) {
512 typename map_type::rcu_lock l;
513 typename map_type::value_type * pVal = m.get(nKey);
514 CPPUNIT_ASSERT( pVal != NULL );
515 CPPUNIT_CHECK( pVal->first == nKey);
517 CPPUNIT_ASSERT( m.extract( ep, nKey ));
518 CPPUNIT_ASSERT( !ep.empty());
519 CPPUNIT_CHECK( ep->first == nKey);
522 CPPUNIT_ASSERT( !m.extract( ep, nKey ));
523 CPPUNIT_ASSERT( ep.empty());
525 typename map_type::rcu_lock l;
526 CPPUNIT_CHECK( !m.get(nKey));
529 CPPUNIT_ASSERT( m.empty() );
530 CPPUNIT_ASSERT( check_size( m, 0 ));
533 for ( size_t i = 0; i < c_nItemCount; ++i ) {
536 typename map_type::rcu_lock l;
537 typename map_type::value_type * pVal = m.get_with(wrapped_int(nKey), wrapped_less());
538 CPPUNIT_ASSERT( pVal != NULL );
539 CPPUNIT_CHECK( pVal->first == nKey);
541 CPPUNIT_ASSERT( m.extract_with( ep, wrapped_int(nKey), wrapped_less() ));
542 CPPUNIT_ASSERT( !ep.empty());
543 CPPUNIT_CHECK( ep->first == nKey);
546 CPPUNIT_ASSERT( !m.extract_with( ep, wrapped_int(nKey), wrapped_less() ));
547 CPPUNIT_ASSERT( ep.empty());
549 typename map_type::rcu_lock l;
550 CPPUNIT_CHECK( !m.get_with(wrapped_int(nKey), wrapped_less()));
553 CPPUNIT_ASSERT( m.empty() );
554 CPPUNIT_ASSERT( check_size( m, 0 ));
560 void EllenBinTree_rcu_gpi_less();
561 void EllenBinTree_rcu_gpi_cmp();
562 void EllenBinTree_rcu_gpi_cmpless();
563 void EllenBinTree_rcu_gpi_less_ic();
564 void EllenBinTree_rcu_gpi_cmp_ic();
565 void EllenBinTree_rcu_gpi_less_stat();
566 void EllenBinTree_rcu_gpi_cmp_ic_stat();
567 void EllenBinTree_rcu_gpi_less_pool();
568 void EllenBinTree_rcu_gpi_less_pool_ic_stat();
570 void EllenBinTree_hp_less();
571 void EllenBinTree_hp_cmp();
572 void EllenBinTree_hp_cmpless();
573 void EllenBinTree_hp_less_ic();
574 void EllenBinTree_hp_cmp_ic();
575 void EllenBinTree_hp_less_stat();
576 void EllenBinTree_hp_cmp_ic_stat();
577 void EllenBinTree_hp_less_pool();
578 void EllenBinTree_hp_less_pool_ic_stat();
580 void EllenBinTree_ptb_less();
581 void EllenBinTree_ptb_cmp();
582 void EllenBinTree_ptb_cmpless();
583 void EllenBinTree_ptb_less_ic();
584 void EllenBinTree_ptb_cmp_ic();
585 void EllenBinTree_ptb_less_stat();
586 void EllenBinTree_ptb_cmp_ic_stat();
587 void EllenBinTree_ptb_less_pool();
588 void EllenBinTree_ptb_less_pool_ic_stat();
590 void EllenBinTree_rcu_gpb_less();
591 void EllenBinTree_rcu_gpb_cmp();
592 void EllenBinTree_rcu_gpb_cmpless();
593 void EllenBinTree_rcu_gpb_less_ic();
594 void EllenBinTree_rcu_gpb_cmp_ic();
595 void EllenBinTree_rcu_gpb_less_stat();
596 void EllenBinTree_rcu_gpb_cmp_ic_stat();
597 void EllenBinTree_rcu_gpb_less_pool();
598 void EllenBinTree_rcu_gpb_less_pool_ic_stat();
600 void EllenBinTree_rcu_gpt_less();
601 void EllenBinTree_rcu_gpt_cmp();
602 void EllenBinTree_rcu_gpt_cmpless();
603 void EllenBinTree_rcu_gpt_less_ic();
604 void EllenBinTree_rcu_gpt_cmp_ic();
605 void EllenBinTree_rcu_gpt_less_stat();
606 void EllenBinTree_rcu_gpt_cmp_ic_stat();
607 void EllenBinTree_rcu_gpt_less_pool();
608 void EllenBinTree_rcu_gpt_less_pool_ic_stat();
610 void EllenBinTree_rcu_shb_less();
611 void EllenBinTree_rcu_shb_cmp();
612 void EllenBinTree_rcu_shb_cmpless();
613 void EllenBinTree_rcu_shb_less_ic();
614 void EllenBinTree_rcu_shb_cmp_ic();
615 void EllenBinTree_rcu_shb_less_stat();
616 void EllenBinTree_rcu_shb_cmp_ic_stat();
617 void EllenBinTree_rcu_shb_less_pool();
618 void EllenBinTree_rcu_shb_less_pool_ic_stat();
620 void EllenBinTree_rcu_sht_less();
621 void EllenBinTree_rcu_sht_cmp();
622 void EllenBinTree_rcu_sht_cmpless();
623 void EllenBinTree_rcu_sht_less_ic();
624 void EllenBinTree_rcu_sht_cmp_ic();
625 void EllenBinTree_rcu_sht_less_stat();
626 void EllenBinTree_rcu_sht_cmp_ic_stat();
627 void EllenBinTree_rcu_sht_less_pool();
628 void EllenBinTree_rcu_sht_less_pool_ic_stat();
630 CPPUNIT_TEST_SUITE(EllenBinTreeMapHdrTest)
631 CPPUNIT_TEST(EllenBinTree_hp_less)
632 CPPUNIT_TEST(EllenBinTree_hp_cmp)
633 CPPUNIT_TEST(EllenBinTree_hp_less_stat)
634 CPPUNIT_TEST(EllenBinTree_hp_cmpless)
635 CPPUNIT_TEST(EllenBinTree_hp_less_ic)
636 CPPUNIT_TEST(EllenBinTree_hp_cmp_ic)
637 CPPUNIT_TEST(EllenBinTree_hp_cmp_ic_stat)
638 CPPUNIT_TEST(EllenBinTree_hp_less_pool)
639 CPPUNIT_TEST(EllenBinTree_hp_less_pool_ic_stat)
641 CPPUNIT_TEST(EllenBinTree_ptb_less)
642 CPPUNIT_TEST(EllenBinTree_ptb_cmp)
643 CPPUNIT_TEST(EllenBinTree_ptb_less_stat)
644 CPPUNIT_TEST(EllenBinTree_ptb_cmpless)
645 CPPUNIT_TEST(EllenBinTree_ptb_less_ic)
646 CPPUNIT_TEST(EllenBinTree_ptb_cmp_ic)
647 CPPUNIT_TEST(EllenBinTree_ptb_cmp_ic_stat)
648 CPPUNIT_TEST(EllenBinTree_ptb_less_pool)
649 CPPUNIT_TEST(EllenBinTree_ptb_less_pool_ic_stat)
651 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less)
652 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp)
653 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_stat)
654 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmpless)
655 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_ic)
656 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic)
657 CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic_stat)
658 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool)
659 CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool_ic_stat)
661 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less)
662 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp)
663 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_stat)
664 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmpless)
665 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_ic)
666 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic)
667 CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic_stat)
668 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool)
669 CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool_ic_stat)
671 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less)
672 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp)
673 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_stat)
674 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmpless)
675 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_ic)
676 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic)
677 CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic_stat)
678 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool)
679 CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool_ic_stat)
681 CPPUNIT_TEST(EllenBinTree_rcu_shb_less)
682 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp)
683 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_stat)
684 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmpless)
685 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_ic)
686 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic)
687 CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic_stat)
688 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool)
689 CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool_ic_stat)
691 CPPUNIT_TEST(EllenBinTree_rcu_sht_less)
692 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp)
693 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_stat)
694 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmpless)
695 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_ic)
696 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic)
697 CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic_stat)
698 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool)
699 CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool_ic_stat)
701 CPPUNIT_TEST_SUITE_END()
706 #endif // #ifndef CDSHDRTEST_ELLENBINTREE_MAP_H