3 #ifndef CDSTEST_HDR_INTRUSIVE_SET_H
4 #define CDSTEST_HDR_INTRUSIVE_SET_H
6 #include "cppunit/cppunit_proxy.h"
7 #include "size_check.h"
9 #include <cds/opt/hash.h>
10 #include <functional> // ref
12 // forward declaration
13 namespace cds { namespace intrusive {} }
16 using misc::check_size;
18 namespace ci = cds::intrusive;
19 namespace co = cds::opt;
21 class IntrusiveHashSetHdrTest: public CppUnitMini::TestCase
26 unsigned int nDisposeCount ; // count of disposer calling
27 unsigned int nFindCount ; // count of find-functor calling
28 unsigned int nEnsureNewCount;
29 unsigned int nEnsureCount;
30 mutable unsigned int nEraseCount;
34 memset( this, 0, sizeof(*this));
38 template <typename Node>
50 base_int_item(int key, int val)
55 base_int_item(const base_int_item& v )
68 template <typename Node>
69 struct member_int_item: public stat
81 member_int_item(int key, int val)
86 member_int_item(const member_int_item& v )
99 size_t operator()( int i ) const
101 return co::v::hash<int>()( i );
103 template <typename Item>
104 size_t operator()( const Item& i ) const
106 return (*this)( i.key() );
110 struct simple_item_counter {
113 simple_item_counter()
132 operator size_t() const
140 template <typename T>
143 bool operator ()(const T& v1, const T& v2 ) const
145 return v1.key() < v2.key();
148 template <typename Q>
149 bool operator ()(const T& v1, const Q& v2 ) const
151 return v1.key() < v2;
154 template <typename Q>
155 bool operator ()(const Q& v1, const T& v2 ) const
157 return v1 < v2.key();
161 template <typename T>
163 int operator ()(const T& v1, const T& v2 ) const
165 if ( v1.key() < v2.key() )
167 return v1.key() > v2.key() ? 1 : 0;
170 template <typename Q>
171 int operator ()(const T& v1, const Q& v2 ) const
175 return v1.key() > v2 ? 1 : 0;
178 template <typename Q>
179 int operator ()(const Q& v1, const T& v2 ) const
183 return v1 > v2.key() ? 1 : 0;
187 struct faked_disposer
189 template <typename T>
190 void operator ()( T * p )
198 template <typename Item, typename T>
199 void operator()( Item& item, T& /*val*/ )
205 struct insert_functor
207 template <typename Item>
208 void operator()(Item& item )
210 item.nVal = item.nKey * 100;
214 struct ensure_functor
216 template <typename Item>
217 void operator()( bool bNew, Item& item, Item& /*val*/ )
220 ++item.nEnsureNewCount;
228 template <typename Item>
229 void operator()( Item const& item )
236 void test_int_with( Set& s )
238 typedef typename Set::value_type value_type;
240 value_type v1( 10, 50 );
241 value_type v2( 5, 25 );
242 value_type v3( 20, 100 );
245 CPPUNIT_ASSERT( s.empty() );
246 CPPUNIT_ASSERT( check_size( s, 0 ));
249 CPPUNIT_ASSERT( !s.find( v1.key() ));
250 CPPUNIT_ASSERT( s.insert( v1 ));
251 CPPUNIT_ASSERT( s.find( v1.key() ));
252 CPPUNIT_ASSERT( check_size( s, 1 ));
253 CPPUNIT_ASSERT( !s.empty() );
255 CPPUNIT_ASSERT( !s.find_with( v2.key(), less<value_type>() ));
256 CPPUNIT_ASSERT( s.insert( v2 ));
257 CPPUNIT_ASSERT( v2.nFindCount == 0 );
258 CPPUNIT_ASSERT( s.find_with( key = v2.key(), less<value_type>(), find_functor() ));
259 CPPUNIT_ASSERT( v2.nFindCount == 1 );
261 CPPUNIT_ASSERT( check_size( s, 2 ));
262 CPPUNIT_ASSERT( !s.empty() );
267 CPPUNIT_ASSERT( !s.find( v3 ));
268 CPPUNIT_ASSERT( v3.nVal != v3.nKey * 100 );
269 CPPUNIT_ASSERT( s.insert( v3, std::ref(fi) ));
270 CPPUNIT_ASSERT( v3.nVal == v3.nKey * 100 );
271 CPPUNIT_ASSERT( v3.nFindCount == 0 );
272 CPPUNIT_ASSERT( s.find( v3, std::ref(ff) ));
273 CPPUNIT_ASSERT( v3.nFindCount == 1 );
275 CPPUNIT_ASSERT( check_size( s, 3 ));
276 CPPUNIT_ASSERT( !s.empty() );
280 CPPUNIT_ASSERT( s.unlink( v1 ));
281 CPPUNIT_ASSERT( !s.find( v1 ));
282 CPPUNIT_ASSERT( s.find( v2 ));
283 CPPUNIT_ASSERT( s.find( v3 ));
284 CPPUNIT_ASSERT( check_size( s, 2 ));
286 CPPUNIT_ASSERT( !s.unlink( v1 ));
287 CPPUNIT_ASSERT( !s.find( v1 ));
288 CPPUNIT_ASSERT( check_size( s, 2 ));
290 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>() ));
291 CPPUNIT_ASSERT( s.unlink( v3 ));
292 CPPUNIT_ASSERT( !s.find_with( v3, less<value_type>() ));
293 CPPUNIT_ASSERT( check_size( s, 1 ));
295 CPPUNIT_ASSERT( s.find( v2 ));
296 CPPUNIT_ASSERT( s.unlink( v2 ));
297 CPPUNIT_ASSERT( !s.find( v1 ));
298 CPPUNIT_ASSERT( !s.find( v2 ));
299 CPPUNIT_ASSERT( !s.find( v3 ));
300 CPPUNIT_ASSERT( check_size( s, 0 ));
301 CPPUNIT_ASSERT( s.empty() );
303 Set::gc::force_dispose();
304 // unlink function calls disposer
305 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
306 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
307 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
312 std::pair<bool, bool> ret = s.ensure( v1, f );
313 CPPUNIT_ASSERT( ret.first );
314 CPPUNIT_ASSERT( ret.second );
315 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
316 CPPUNIT_ASSERT( v1.nEnsureCount == 0 );
317 CPPUNIT_ASSERT( check_size( s, 1 ));
319 ret = s.ensure( v2, f );
320 CPPUNIT_ASSERT( ret.first );
321 CPPUNIT_ASSERT( ret.second );
322 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
323 CPPUNIT_ASSERT( v2.nEnsureCount == 0 );
324 CPPUNIT_ASSERT( check_size( s, 2 ));
326 ret = s.ensure( v3, f );
327 CPPUNIT_ASSERT( ret.first );
328 CPPUNIT_ASSERT( ret.second );
329 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
330 CPPUNIT_ASSERT( v3.nEnsureCount == 0 );
331 CPPUNIT_ASSERT( check_size( s, 3 ));
333 CPPUNIT_ASSERT( s.find( v1 ));
334 CPPUNIT_ASSERT( s.find( v2 ));
335 CPPUNIT_ASSERT( s.find( v3 ));
337 ret = s.ensure( v1, f );
338 CPPUNIT_ASSERT( ret.first );
339 CPPUNIT_ASSERT( !ret.second );
340 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
341 CPPUNIT_ASSERT( v1.nEnsureCount == 1 );
342 CPPUNIT_ASSERT( check_size( s, 3 ));
344 ret = s.ensure( v2, f );
345 CPPUNIT_ASSERT( ret.first );
346 CPPUNIT_ASSERT( !ret.second );
347 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
348 CPPUNIT_ASSERT( v2.nEnsureCount == 1 );
349 CPPUNIT_ASSERT( check_size( s, 3 ));
351 ret = s.ensure( v3, f );
352 CPPUNIT_ASSERT( ret.first );
353 CPPUNIT_ASSERT( !ret.second );
354 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
355 CPPUNIT_ASSERT( v3.nEnsureCount == 1 );
356 CPPUNIT_ASSERT( check_size( s, 3 ));
358 CPPUNIT_ASSERT( s.find( v1 ));
359 CPPUNIT_ASSERT( s.find( v2 ));
360 CPPUNIT_ASSERT( s.find( v3 ));
364 CPPUNIT_ASSERT( s.find( v1 ));
365 CPPUNIT_ASSERT( s.find_with( v2, less<value_type>() ));
366 CPPUNIT_ASSERT( s.find( v3 ));
367 CPPUNIT_ASSERT( check_size( s, 3 ));
368 CPPUNIT_ASSERT( !s.empty() );
370 CPPUNIT_ASSERT( s.erase( v1 ));
371 CPPUNIT_ASSERT( !s.find( v1 ));
372 CPPUNIT_ASSERT( s.find( v2 ));
373 CPPUNIT_ASSERT( s.find( v3 ));
374 CPPUNIT_ASSERT( check_size( s, 2 ));
375 CPPUNIT_ASSERT( !s.empty() );
377 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
378 CPPUNIT_ASSERT( !s.erase( v1, erase_functor() ));
379 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
380 CPPUNIT_ASSERT( !s.find( v1 ));
381 CPPUNIT_ASSERT( s.find( v2 ));
382 CPPUNIT_ASSERT( s.find( v3 ));
383 CPPUNIT_ASSERT( check_size( s, 2 ));
384 CPPUNIT_ASSERT( !s.empty() );
386 CPPUNIT_ASSERT( v2.nEraseCount == 0 );
387 CPPUNIT_ASSERT( s.erase_with( v2.key(), less<value_type>(), erase_functor() ));
388 CPPUNIT_ASSERT( v2.nEraseCount == 1 );
389 CPPUNIT_ASSERT( !s.find( v1 ));
390 CPPUNIT_ASSERT( !s.find( v2 ));
391 CPPUNIT_ASSERT( s.find( v3 ));
392 CPPUNIT_ASSERT( check_size( s, 1 ));
393 CPPUNIT_ASSERT( !s.empty() );
395 CPPUNIT_ASSERT( !s.erase( v2.key() ));
396 CPPUNIT_ASSERT( !s.find( v1 ));
397 CPPUNIT_ASSERT( !s.find( v2 ));
398 CPPUNIT_ASSERT( s.find( v3 ));
399 CPPUNIT_ASSERT( check_size( s, 1 ));
400 CPPUNIT_ASSERT( !s.empty() );
402 CPPUNIT_ASSERT( s.erase( v3 ));
403 CPPUNIT_ASSERT( !s.find( v1 ));
404 CPPUNIT_ASSERT( !s.find( v2 ));
405 CPPUNIT_ASSERT( !s.find( v3 ));
406 CPPUNIT_ASSERT( check_size( s, 0 ));
407 CPPUNIT_ASSERT( s.empty() );
410 Set::gc::force_dispose();
411 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
412 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
413 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
415 CPPUNIT_ASSERT( s.empty() );
416 CPPUNIT_ASSERT( s.insert( v1 ));
417 CPPUNIT_ASSERT( s.insert( v3 ));
418 CPPUNIT_ASSERT( check_size( s, 2 ));
419 CPPUNIT_ASSERT( !s.empty() );
423 CPPUNIT_ASSERT( !s.unlink( v ) );
426 CPPUNIT_ASSERT( s.unlink( v3 ) );
427 CPPUNIT_ASSERT( s.find( v1 ));
428 CPPUNIT_ASSERT( !s.find( v2 ));
429 CPPUNIT_ASSERT( !s.find( v3 ));
430 CPPUNIT_ASSERT( check_size( s, 1 ));
431 CPPUNIT_ASSERT( !s.empty() );
433 CPPUNIT_ASSERT( !s.unlink( v3 ));
434 CPPUNIT_ASSERT( s.find( v1 ));
435 CPPUNIT_ASSERT( !s.find( v2 ));
436 CPPUNIT_ASSERT( !s.find( v3 ));
437 CPPUNIT_ASSERT( check_size( s, 1 ));
438 CPPUNIT_ASSERT( !s.empty() );
440 CPPUNIT_ASSERT( s.unlink( v1 ));
441 CPPUNIT_ASSERT( !s.find( v1 ));
442 CPPUNIT_ASSERT( !s.find( v2 ));
443 CPPUNIT_ASSERT( !s.find( v3 ));
444 CPPUNIT_ASSERT( check_size( s, 0 ));
445 CPPUNIT_ASSERT( s.empty() );
447 CPPUNIT_ASSERT( !s.unlink( v2 ));
448 CPPUNIT_ASSERT( !s.find( v1 ));
449 CPPUNIT_ASSERT( !s.find( v2 ));
450 CPPUNIT_ASSERT( !s.find( v3 ));
451 CPPUNIT_ASSERT( check_size( s, 0 ));
452 CPPUNIT_ASSERT( s.empty() );
454 Set::gc::force_dispose();
455 CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
456 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
457 CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
460 CPPUNIT_ASSERT( s.insert( v1 ));
461 CPPUNIT_ASSERT( s.insert( v3 ));
462 CPPUNIT_ASSERT( s.insert( v2 ));
465 CPPUNIT_ASSERT( s.empty() );
466 CPPUNIT_ASSERT( check_size( s, 0 ));
467 Set::gc::force_dispose();
468 CPPUNIT_CHECK( v1.nDisposeCount == 4 );
469 CPPUNIT_CHECK( v2.nDisposeCount == 3 );
470 CPPUNIT_CHECK( v3.nDisposeCount == 4 );
487 typedef typename Set::value_type value_type;
488 typedef typename Set::guarded_ptr guarded_ptr;
490 static size_t const nLimit = 1024;
491 value_type arrItems[nLimit];
493 for ( size_t i = 0; i < nLimit; ++i )
495 shuffle( arr, arr + nLimit );
497 for ( size_t i = 0; i < nLimit; ++i ) {
498 arrItems[i].nKey = arr[i];
499 arrItems[i].nVal = arr[i] * 2;
503 for ( size_t i = 0; i < nLimit; ++i )
504 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
507 for ( size_t i = 0; i < nLimit; i += 2 ) {
510 CPPUNIT_ASSERT( gp );
511 CPPUNIT_ASSERT( !gp.empty());
512 CPPUNIT_CHECK( gp->nKey == nKey );
513 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
516 gp = s.extract( nKey );
517 CPPUNIT_ASSERT( gp );
518 CPPUNIT_ASSERT( !gp.empty() );
519 CPPUNIT_CHECK( gp->nKey == nKey );
520 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
524 CPPUNIT_CHECK( !gp );
525 CPPUNIT_ASSERT( gp.empty() );
526 CPPUNIT_CHECK( !s.extract( nKey ));
527 CPPUNIT_CHECK( gp.empty() );
530 gp = s.get_with( nKey, less<value_type>() );
531 CPPUNIT_ASSERT( gp );
532 CPPUNIT_CHECK( gp->nKey == nKey );
533 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
536 gp = s.extract_with( nKey, less<value_type>() );
537 CPPUNIT_ASSERT( gp );
538 CPPUNIT_ASSERT( !gp.empty() );
539 CPPUNIT_CHECK( gp->nKey == nKey );
540 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
543 gp = s.get_with( nKey, less<value_type>() );
544 CPPUNIT_CHECK( !gp );
545 CPPUNIT_CHECK( gp.empty());
546 CPPUNIT_CHECK( !s.extract_with( nKey, less<value_type>() ));
547 CPPUNIT_CHECK( gp.empty());
549 CPPUNIT_CHECK( s.empty() );
550 CPPUNIT_CHECK( check_size( s, 0 ));
552 CPPUNIT_CHECK( !s.get( 100 ));
553 CPPUNIT_CHECK( !s.extract( 100 ));
554 CPPUNIT_CHECK( gp.empty() );
556 Set::gc::force_dispose();
563 typedef typename Set::value_type value_type;
564 typedef typename Set::iterator set_iterator;
565 typedef typename Set::iterator const_set_iterator;
571 for ( int i = 0; unsigned(i) < sizeof(v)/sizeof(v[0]); ++i ) {
575 CPPUNIT_ASSERT( s.insert( v[i] ));
579 typename Set::iterator it( s.begin() );
580 typename Set::const_iterator cit( s.cbegin() );
581 CPPUNIT_CHECK( it == cit );
582 CPPUNIT_CHECK( it != s.end() );
583 CPPUNIT_CHECK( it != s.cend() );
584 CPPUNIT_CHECK( cit != s.end() );
585 CPPUNIT_CHECK( cit != s.cend() );
587 CPPUNIT_CHECK( it != cit );
588 CPPUNIT_CHECK( it != s.end() );
589 CPPUNIT_CHECK( it != s.cend() );
590 CPPUNIT_CHECK( cit != s.end() );
591 CPPUNIT_CHECK( cit != s.cend() );
593 CPPUNIT_CHECK( it == cit );
594 CPPUNIT_CHECK( it != s.end() );
595 CPPUNIT_CHECK( it != s.cend() );
596 CPPUNIT_CHECK( cit != s.end() );
597 CPPUNIT_CHECK( cit != s.cend() );
601 for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
602 set_iterator it2 = it;
603 CPPUNIT_CHECK( it == it2 );
604 CPPUNIT_CHECK( it2 != itEnd );
605 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
606 it->nVal = (*it).nKey;
609 CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
612 for ( const_set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
613 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
616 CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
618 for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
619 CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
623 Set::gc::force_dispose();
625 for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
626 CPPUNIT_ASSERT( v[i].nDisposeCount == 1 );
633 typedef typename Set::value_type value_type;
635 value_type v1( 10, 50 );
636 value_type v2( 5, 25 );
637 value_type v3( 20, 100 );
645 CPPUNIT_ASSERT( s.empty() );
646 CPPUNIT_ASSERT( check_size( s, 0 ));
649 CPPUNIT_ASSERT( s.find( v1.key() ) == nullptr );
650 CPPUNIT_ASSERT( s.insert( v1 ));
651 CPPUNIT_ASSERT( s.find_with( v1.key(), less<value_type>() ) == &v1 );
652 CPPUNIT_ASSERT( check_size( s, 1 ));
653 CPPUNIT_ASSERT( !s.empty() );
655 CPPUNIT_ASSERT( s.find( v2.key() ) == nullptr );
656 CPPUNIT_ASSERT( s.insert( v2 ));
657 CPPUNIT_ASSERT( v2.nFindCount == 0 );
658 CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
659 CPPUNIT_ASSERT( v2.nFindCount == 1 );
661 CPPUNIT_ASSERT( check_size( s, 2 ));
662 CPPUNIT_ASSERT( !s.empty() );
666 CPPUNIT_ASSERT( s.find( v3 ) == nullptr );
667 CPPUNIT_ASSERT( s.insert( v3 ));
668 CPPUNIT_ASSERT( v3.nFindCount == 0 );
669 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
670 CPPUNIT_ASSERT( v3.nFindCount == 1 );
672 CPPUNIT_ASSERT( check_size( s, 3 ));
673 CPPUNIT_ASSERT( !s.empty() );
677 // s.clear() ; // not all set supports clear() method
678 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
679 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
680 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
688 std::pair<bool, bool> ret = s.ensure( v1, f );
689 CPPUNIT_ASSERT( ret.first );
690 CPPUNIT_ASSERT( ret.second );
691 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
692 CPPUNIT_ASSERT( v1.nEnsureCount == 0 );
693 CPPUNIT_ASSERT( check_size( s, 1 ));
695 ret = s.ensure( v2, f );
696 CPPUNIT_ASSERT( ret.first );
697 CPPUNIT_ASSERT( ret.second );
698 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
699 CPPUNIT_ASSERT( v2.nEnsureCount == 0 );
700 CPPUNIT_ASSERT( check_size( s, 2 ));
702 ret = s.ensure( v3, f );
703 CPPUNIT_ASSERT( ret.first );
704 CPPUNIT_ASSERT( ret.second );
705 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
706 CPPUNIT_ASSERT( v3.nEnsureCount == 0 );
707 CPPUNIT_ASSERT( check_size( s, 3 ));
709 CPPUNIT_ASSERT( s.find( v1 ) == &v1 );
710 CPPUNIT_ASSERT( s.find( v2 ) == &v2 );
711 CPPUNIT_ASSERT( s.find( v3 ) == &v3 );
713 ret = s.ensure( v1, f );
714 CPPUNIT_ASSERT( ret.first );
715 CPPUNIT_ASSERT( !ret.second );
716 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
717 CPPUNIT_ASSERT( v1.nEnsureCount == 1 );
718 CPPUNIT_ASSERT( check_size( s, 3 ));
720 ret = s.ensure( v2, f );
721 CPPUNIT_ASSERT( ret.first );
722 CPPUNIT_ASSERT( !ret.second );
723 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
724 CPPUNIT_ASSERT( v2.nEnsureCount == 1 );
725 CPPUNIT_ASSERT( check_size( s, 3 ));
727 ret = s.ensure( v3, f );
728 CPPUNIT_ASSERT( ret.first );
729 CPPUNIT_ASSERT( !ret.second );
730 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
731 CPPUNIT_ASSERT( v3.nEnsureCount == 1 );
732 CPPUNIT_ASSERT( check_size( s, 3 ));
734 CPPUNIT_ASSERT( s.find( v1 ) == &v1 );
735 CPPUNIT_ASSERT( s.find( v2 ) == &v2 );
736 CPPUNIT_ASSERT( s.find( v3 ) == &v3 );
740 // dispose on destruct test
741 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
742 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
743 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
750 #define ASSERT_RCU_FIND( _expr ) { rcu_lock rl; CPPUNIT_ASSERT( _expr ); }
752 void test_rcu_int_with( Set& s )
754 typedef typename Set::value_type value_type;
755 typedef typename Set::gc::scoped_lock rcu_lock;
757 value_type v1( 10, 50 );
758 value_type v2( 5, 25 );
759 value_type v3( 20, 100 );
760 value_type v4( 40, 400 );
763 CPPUNIT_ASSERT( s.empty() );
764 CPPUNIT_ASSERT( check_size( s, 0 ));
768 ASSERT_RCU_FIND( !s.find_with( v1.key(), less<value_type>() ));
769 CPPUNIT_ASSERT( s.insert( v1 ));
770 ASSERT_RCU_FIND( s.find_with( v1.key(), less<value_type>()) );
771 CPPUNIT_ASSERT( check_size( s, 1 ));
772 CPPUNIT_ASSERT( !s.empty() );
774 ASSERT_RCU_FIND( !s.find( v2.key() ));
775 CPPUNIT_ASSERT( s.insert( v2 ));
776 CPPUNIT_ASSERT( v2.nFindCount == 0 );
777 CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
778 CPPUNIT_ASSERT( v2.nFindCount == 1 );
780 CPPUNIT_ASSERT( check_size( s, 2 ));
781 CPPUNIT_ASSERT( !s.empty() );
786 ASSERT_RCU_FIND( !s.find( v3 ));
787 CPPUNIT_ASSERT( v3.nVal != v3.nKey * 100 );
788 CPPUNIT_ASSERT( s.insert( v3, std::ref(fi) ));
789 CPPUNIT_ASSERT( v3.nVal == v3.nKey * 100 );
790 CPPUNIT_ASSERT( v3.nFindCount == 0 );
791 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
792 CPPUNIT_ASSERT( v3.nFindCount == 1 );
794 CPPUNIT_ASSERT( check_size( s, 3 ));
795 CPPUNIT_ASSERT( !s.empty() );
799 CPPUNIT_ASSERT( s.unlink( v1 ));
800 ASSERT_RCU_FIND( !s.find( v1 ));
801 ASSERT_RCU_FIND( s.find( v2 ));
802 ASSERT_RCU_FIND( s.find( v3 ));
803 CPPUNIT_ASSERT( check_size( s, 2 ));
805 CPPUNIT_ASSERT( !s.unlink( v1 ));
806 ASSERT_RCU_FIND( !s.find( v1 ));
807 CPPUNIT_ASSERT( check_size( s, 2 ));
809 ASSERT_RCU_FIND( s.find( v3 ) );
810 CPPUNIT_ASSERT( s.unlink( v3 ));
811 ASSERT_RCU_FIND( !s.find( v3 ));
812 CPPUNIT_ASSERT( check_size( s, 1 ));
814 ASSERT_RCU_FIND( s.find( v2 ));
815 CPPUNIT_ASSERT( s.unlink( v2 ));
816 ASSERT_RCU_FIND( !s.find( v1 ));
817 ASSERT_RCU_FIND( !s.find( v2 ));
818 ASSERT_RCU_FIND( !s.find( v3 ));
819 CPPUNIT_ASSERT( check_size( s, 0 ));
820 CPPUNIT_ASSERT( s.empty() );
822 Set::gc::force_dispose();
823 // unlink function calls disposer
824 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
825 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
826 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
831 std::pair<bool, bool> ret = s.ensure( v1, f );
832 CPPUNIT_ASSERT( ret.first );
833 CPPUNIT_ASSERT( ret.second );
834 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
835 CPPUNIT_ASSERT( v1.nEnsureCount == 0 );
836 CPPUNIT_ASSERT( check_size( s, 1 ));
838 ret = s.ensure( v2, f );
839 CPPUNIT_ASSERT( ret.first );
840 CPPUNIT_ASSERT( ret.second );
841 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
842 CPPUNIT_ASSERT( v2.nEnsureCount == 0 );
843 CPPUNIT_ASSERT( check_size( s, 2 ));
845 ret = s.ensure( v3, f );
846 CPPUNIT_ASSERT( ret.first );
847 CPPUNIT_ASSERT( ret.second );
848 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
849 CPPUNIT_ASSERT( v3.nEnsureCount == 0 );
850 CPPUNIT_ASSERT( check_size( s, 3 ));
852 ASSERT_RCU_FIND( s.find( v1 ));
853 ASSERT_RCU_FIND( s.find( v2 ));
854 ASSERT_RCU_FIND( s.find( v3 ));
856 ret = s.ensure( v1, f );
857 CPPUNIT_ASSERT( ret.first );
858 CPPUNIT_ASSERT( !ret.second );
859 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
860 CPPUNIT_ASSERT( v1.nEnsureCount == 1 );
861 CPPUNIT_ASSERT( check_size( s, 3 ));
863 ret = s.ensure( v2, f );
864 CPPUNIT_ASSERT( ret.first );
865 CPPUNIT_ASSERT( !ret.second );
866 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
867 CPPUNIT_ASSERT( v2.nEnsureCount == 1 );
868 CPPUNIT_ASSERT( check_size( s, 3 ));
870 ret = s.ensure( v3, f );
871 CPPUNIT_ASSERT( ret.first );
872 CPPUNIT_ASSERT( !ret.second );
873 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
874 CPPUNIT_ASSERT( v3.nEnsureCount == 1 );
875 CPPUNIT_ASSERT( check_size( s, 3 ));
877 ASSERT_RCU_FIND( s.find( v1 ) );
878 ASSERT_RCU_FIND( s.find( v2 ));
879 ASSERT_RCU_FIND( s.find( v3 ));
883 ASSERT_RCU_FIND( s.find( v1 ));
884 ASSERT_RCU_FIND( s.find_with( v2, less<value_type>() ));
885 ASSERT_RCU_FIND( s.find( v3 ));
886 CPPUNIT_ASSERT( check_size( s, 3 ));
887 CPPUNIT_ASSERT( !s.empty() );
889 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
890 CPPUNIT_ASSERT( s.erase_with( v1, less<value_type>(), erase_functor() ));
891 CPPUNIT_ASSERT( v1.nEraseCount == 1 );
892 ASSERT_RCU_FIND( !s.find( v1 ));
893 ASSERT_RCU_FIND( s.find( v2 ) );
894 ASSERT_RCU_FIND( s.find( v3 ) );
895 CPPUNIT_ASSERT( check_size( s, 2 ));
896 CPPUNIT_ASSERT( !s.empty() );
898 CPPUNIT_ASSERT( !s.erase( v1 ));
899 ASSERT_RCU_FIND( !s.find( v1 ));
900 ASSERT_RCU_FIND( s.find( v2 ));
901 ASSERT_RCU_FIND( s.find( v3 ) );
902 CPPUNIT_ASSERT( check_size( s, 2 ));
903 CPPUNIT_ASSERT( !s.empty() );
905 ASSERT_RCU_FIND( !s.find( v4 ));
906 CPPUNIT_ASSERT( s.insert(v4));
907 ASSERT_RCU_FIND( s.find( v4.key() ));
908 CPPUNIT_ASSERT( s.erase_with( v4.key(), less<value_type>() ));
909 ASSERT_RCU_FIND( !s.find( v4.key() ));
911 CPPUNIT_ASSERT( s.erase( v2.key() ));
912 ASSERT_RCU_FIND( !s.find( v1 ));
913 ASSERT_RCU_FIND( !s.find( v2 ));
914 ASSERT_RCU_FIND( s.find( v3 ) );
915 CPPUNIT_ASSERT( check_size( s, 1 ));
916 CPPUNIT_ASSERT( !s.empty() );
918 CPPUNIT_ASSERT( !s.erase( v2.key() ));
919 ASSERT_RCU_FIND( !s.find( v1 ));
920 ASSERT_RCU_FIND( !s.find( v2 ));
921 ASSERT_RCU_FIND( s.find( v3 ) );
922 CPPUNIT_ASSERT( check_size( s, 1 ));
923 CPPUNIT_ASSERT( !s.empty() );
925 CPPUNIT_ASSERT( v3.nEraseCount == 0 );
926 CPPUNIT_ASSERT( s.erase( v3, erase_functor() ));
927 CPPUNIT_ASSERT( v3.nEraseCount == 1 );
928 ASSERT_RCU_FIND( !s.find( v1 ));
929 ASSERT_RCU_FIND( !s.find( v2 ));
930 ASSERT_RCU_FIND( !s.find( v3 ));
931 CPPUNIT_ASSERT( check_size( s, 0 ));
932 CPPUNIT_ASSERT( s.empty() );
935 Set::gc::force_dispose();
936 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
937 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
938 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
939 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
941 CPPUNIT_ASSERT( s.empty() );
942 CPPUNIT_ASSERT( s.insert( v1 ));
943 CPPUNIT_ASSERT( s.insert( v3 ));
944 CPPUNIT_ASSERT( check_size( s, 2 ));
945 CPPUNIT_ASSERT( !s.empty() );
949 CPPUNIT_ASSERT( !s.unlink( v ) );
952 CPPUNIT_ASSERT( s.unlink( v3 ) );
953 ASSERT_RCU_FIND( s.find( v1 ));
954 ASSERT_RCU_FIND( !s.find( v2 ));
955 ASSERT_RCU_FIND( !s.find( v3 ));
956 CPPUNIT_ASSERT( check_size( s, 1 ));
957 CPPUNIT_ASSERT( !s.empty() );
959 CPPUNIT_ASSERT( !s.unlink( v3 ));
960 ASSERT_RCU_FIND( s.find( v1 ));
961 ASSERT_RCU_FIND( !s.find( v2 ));
962 ASSERT_RCU_FIND( !s.find( v3 ));
963 CPPUNIT_ASSERT( check_size( s, 1 ));
964 CPPUNIT_ASSERT( !s.empty() );
966 CPPUNIT_ASSERT( s.unlink( v1 ));
967 ASSERT_RCU_FIND( !s.find( v1 ));
968 ASSERT_RCU_FIND( !s.find( v2 ));
969 ASSERT_RCU_FIND( !s.find( v3 ));
970 CPPUNIT_ASSERT( check_size( s, 0 ));
971 CPPUNIT_ASSERT( s.empty() );
973 CPPUNIT_ASSERT( !s.unlink( v2 ));
974 ASSERT_RCU_FIND( !s.find( v1 ));
975 ASSERT_RCU_FIND( !s.find( v2 ));
976 ASSERT_RCU_FIND( !s.find( v3 ));
977 CPPUNIT_ASSERT( check_size( s, 0 ));
978 CPPUNIT_ASSERT( s.empty() );
980 Set::gc::force_dispose();
981 CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
982 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
983 CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
984 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
987 CPPUNIT_ASSERT( s.insert( v1 ));
988 CPPUNIT_ASSERT( s.insert( v3 ));
989 CPPUNIT_ASSERT( s.insert( v2 ));
992 Set::gc::force_dispose();
993 CPPUNIT_ASSERT( v1.nDisposeCount == 4 );
994 CPPUNIT_ASSERT( v2.nDisposeCount == 3 );
995 CPPUNIT_ASSERT( v3.nDisposeCount == 4 );
996 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
998 #undef ASSERT_RCU_FIND
1000 template <class Set>
1005 test_rcu_int_with( s );
1012 typedef typename Set::gc rcu;
1013 typedef typename Set::value_type value_type;
1014 typedef typename Set::rcu_lock rcu_lock;
1016 typename Set::exempt_ptr ep;
1019 static size_t const nLimit = 1024;
1020 value_type arrItems[nLimit];
1022 for ( size_t i = 0; i < nLimit; ++i )
1024 shuffle( arr, arr + nLimit );
1026 for ( size_t i = 0; i < nLimit; ++i ) {
1027 arrItems[i].nKey = arr[i];
1028 arrItems[i].nVal = arr[i] * 2;
1032 for ( size_t i = 0; i < nLimit; ++i )
1033 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
1035 for ( size_t i = 0; i < nLimit; i += 2 ) {
1040 pVal = s.get( nKey );
1041 CPPUNIT_ASSERT( pVal != nullptr );
1042 CPPUNIT_CHECK( pVal->nKey == nKey );
1043 CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
1045 ep = s.extract( nKey );
1046 CPPUNIT_ASSERT( ep );
1047 CPPUNIT_ASSERT( !ep.empty() );
1048 CPPUNIT_CHECK( pVal->nKey == ep->nKey );
1049 CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
1054 CPPUNIT_CHECK( s.get( nKey ) == nullptr );
1055 CPPUNIT_CHECK( !s.extract( nKey ));
1056 CPPUNIT_CHECK( ep.empty() );
1059 pVal = s.get_with( nKey, less<value_type>() );
1060 CPPUNIT_ASSERT( pVal != nullptr );
1061 CPPUNIT_CHECK( pVal->nKey == nKey );
1062 CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
1064 ep = s.extract_with( nKey, less<value_type>() );
1065 CPPUNIT_ASSERT( ep );
1066 CPPUNIT_ASSERT( !ep.empty() );
1067 CPPUNIT_CHECK( pVal->nKey == ep->nKey );
1068 CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
1073 CPPUNIT_CHECK( s.get_with( nKey, less<value_type>() ) == nullptr );
1074 ep = s.extract_with( nKey, less<value_type>() );
1075 CPPUNIT_CHECK( !ep );
1076 CPPUNIT_CHECK( ep.empty() );
1079 CPPUNIT_CHECK( s.empty() );
1080 CPPUNIT_CHECK( check_size( s, 0 ));
1083 CPPUNIT_CHECK( s.get( 100 ) == nullptr );
1084 ep = s.extract( 100 );
1085 CPPUNIT_CHECK( !ep );
1086 CPPUNIT_CHECK( ep.empty() );
1089 Set::gc::force_dispose();
1093 template <class Set>
1094 void test_rcu_int_michael_list()
1098 test_rcu_int_with( s );
1105 typedef typename Set::gc rcu;
1106 typedef typename Set::value_type value_type;
1107 typedef typename Set::rcu_lock rcu_lock;
1109 typename Set::exempt_ptr ep;
1110 typename Set::raw_ptr gp;
1113 static size_t const nLimit = 1024;
1114 value_type arrItems[nLimit];
1116 for ( size_t i = 0; i < nLimit; ++i )
1118 shuffle( arr, arr + nLimit );
1120 for ( size_t i = 0; i < nLimit; ++i ) {
1121 arrItems[i].nKey = arr[i];
1122 arrItems[i].nVal = arr[i] * 2;
1126 for ( size_t i = 0; i < nLimit; ++i )
1127 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
1129 for ( size_t i = 0; i < nLimit; i += 2 ) {
1134 CPPUNIT_ASSERT( gp );
1135 CPPUNIT_CHECK( gp->nKey == nKey );
1136 CPPUNIT_CHECK( (*gp).nVal == nKey * 2 );
1140 ep = s.extract( nKey );
1141 CPPUNIT_ASSERT( ep );
1142 CPPUNIT_ASSERT( !ep.empty() );
1143 CPPUNIT_CHECK( nKey == ep->nKey );
1144 CPPUNIT_CHECK( nKey * 2 == (*ep).nVal );
1148 CPPUNIT_CHECK( !s.get( nKey ));
1150 CPPUNIT_CHECK( !s.extract( nKey ));
1151 CPPUNIT_CHECK( ep.empty() );
1156 gp = s.get_with( nKey, less<value_type>() );
1157 CPPUNIT_ASSERT( gp );
1158 CPPUNIT_CHECK( gp->nKey == nKey );
1159 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
1163 ep = s.extract_with( nKey, less<value_type>() );
1164 CPPUNIT_ASSERT( ep );
1165 CPPUNIT_ASSERT( !ep.empty() );
1166 CPPUNIT_CHECK( nKey == ep->nKey );
1167 CPPUNIT_CHECK( nKey * 2 == (*ep).nVal );
1172 CPPUNIT_CHECK( !s.get_with( nKey, less<value_type>()));
1174 ep = s.extract_with( nKey, less<value_type>() );
1175 CPPUNIT_CHECK( !ep );
1176 CPPUNIT_CHECK( ep.empty() );
1178 CPPUNIT_CHECK( s.empty() );
1179 CPPUNIT_CHECK( check_size( s, 0 ));
1182 CPPUNIT_CHECK( !s.get( 100 ));
1184 ep = s.extract( 100 );
1185 CPPUNIT_CHECK( !ep );
1186 CPPUNIT_CHECK( ep.empty() );
1188 Set::gc::force_dispose();
1192 // MichaelHashSet + MichaelList
1194 void HP_base_less();
1195 void HP_base_cmpmix();
1196 void HP_member_cmp();
1197 void HP_member_less();
1198 void HP_member_cmpmix();
1200 void DHP_base_cmp();
1201 void DHP_base_less();
1202 void DHP_base_cmpmix();
1203 void DHP_member_cmp();
1204 void DHP_member_less();
1205 void DHP_member_cmpmix();
1207 void RCU_GPI_base_cmp();
1208 void RCU_GPI_base_less();
1209 void RCU_GPI_base_cmpmix();
1210 void RCU_GPI_member_cmp();
1211 void RCU_GPI_member_less();
1212 void RCU_GPI_member_cmpmix();
1214 void RCU_GPB_base_cmp();
1215 void RCU_GPB_base_less();
1216 void RCU_GPB_base_cmpmix();
1217 void RCU_GPB_member_cmp();
1218 void RCU_GPB_member_less();
1219 void RCU_GPB_member_cmpmix();
1221 void RCU_GPT_base_cmp();
1222 void RCU_GPT_base_less();
1223 void RCU_GPT_base_cmpmix();
1224 void RCU_GPT_member_cmp();
1225 void RCU_GPT_member_less();
1226 void RCU_GPT_member_cmpmix();
1228 void RCU_SHB_base_cmp();
1229 void RCU_SHB_base_less();
1230 void RCU_SHB_base_cmpmix();
1231 void RCU_SHB_member_cmp();
1232 void RCU_SHB_member_less();
1233 void RCU_SHB_member_cmpmix();
1235 void RCU_SHT_base_cmp();
1236 void RCU_SHT_base_less();
1237 void RCU_SHT_base_cmpmix();
1238 void RCU_SHT_member_cmp();
1239 void RCU_SHT_member_less();
1240 void RCU_SHT_member_cmpmix();
1242 void nogc_base_cmp();
1243 void nogc_base_less();
1244 void nogc_base_cmpmix();
1245 void nogc_member_cmp();
1246 void nogc_member_less();
1247 void nogc_member_cmpmix();
1249 // MichaelHashSet + LazyList
1250 void HP_base_cmp_lazy();
1251 void HP_base_less_lazy();
1252 void HP_base_cmpmix_lazy();
1253 void HP_member_cmp_lazy();
1254 void HP_member_less_lazy();
1255 void HP_member_cmpmix_lazy();
1257 void DHP_base_cmp_lazy();
1258 void DHP_base_less_lazy();
1259 void DHP_base_cmpmix_lazy();
1260 void DHP_member_cmp_lazy();
1261 void DHP_member_less_lazy();
1262 void DHP_member_cmpmix_lazy();
1264 void RCU_GPI_base_cmp_lazy();
1265 void RCU_GPI_base_less_lazy();
1266 void RCU_GPI_base_cmpmix_lazy();
1267 void RCU_GPI_member_cmp_lazy();
1268 void RCU_GPI_member_less_lazy();
1269 void RCU_GPI_member_cmpmix_lazy();
1271 void RCU_GPB_base_cmp_lazy();
1272 void RCU_GPB_base_less_lazy();
1273 void RCU_GPB_base_cmpmix_lazy();
1274 void RCU_GPB_member_cmp_lazy();
1275 void RCU_GPB_member_less_lazy();
1276 void RCU_GPB_member_cmpmix_lazy();
1278 void RCU_GPT_base_cmp_lazy();
1279 void RCU_GPT_base_less_lazy();
1280 void RCU_GPT_base_cmpmix_lazy();
1281 void RCU_GPT_member_cmp_lazy();
1282 void RCU_GPT_member_less_lazy();
1283 void RCU_GPT_member_cmpmix_lazy();
1285 void RCU_SHB_base_cmp_lazy();
1286 void RCU_SHB_base_less_lazy();
1287 void RCU_SHB_base_cmpmix_lazy();
1288 void RCU_SHB_member_cmp_lazy();
1289 void RCU_SHB_member_less_lazy();
1290 void RCU_SHB_member_cmpmix_lazy();
1292 void RCU_SHT_base_cmp_lazy();
1293 void RCU_SHT_base_less_lazy();
1294 void RCU_SHT_base_cmpmix_lazy();
1295 void RCU_SHT_member_cmp_lazy();
1296 void RCU_SHT_member_less_lazy();
1297 void RCU_SHT_member_cmpmix_lazy();
1299 void nogc_base_cmp_lazy();
1300 void nogc_base_less_lazy();
1301 void nogc_base_cmpmix_lazy();
1302 void nogc_member_cmp_lazy();
1303 void nogc_member_less_lazy();
1304 void nogc_member_cmpmix_lazy();
1306 // SplitListSet + MichaelList [dyn - dynamic bucket table, st - static bucket table]
1307 void split_dyn_HP_base_cmp();
1308 void split_dyn_HP_base_less();
1309 void split_dyn_HP_base_cmpmix();
1310 void split_dyn_HP_base_cmpmix_stat();
1311 void split_dyn_HP_member_cmp();
1312 void split_dyn_HP_member_less();
1313 void split_dyn_HP_member_cmpmix();
1314 void split_dyn_HP_member_cmpmix_stat();
1315 void split_st_HP_base_cmp();
1316 void split_st_HP_base_less();
1317 void split_st_HP_base_cmpmix();
1318 void split_st_HP_base_cmpmix_stat();
1319 void split_st_HP_member_cmp();
1320 void split_st_HP_member_less();
1321 void split_st_HP_member_cmpmix();
1322 void split_st_HP_member_cmpmix_stat();
1324 void split_dyn_DHP_base_cmp();
1325 void split_dyn_DHP_base_less();
1326 void split_dyn_DHP_base_cmpmix();
1327 void split_dyn_DHP_base_cmpmix_stat();
1328 void split_dyn_DHP_member_cmp();
1329 void split_dyn_DHP_member_less();
1330 void split_dyn_DHP_member_cmpmix();
1331 void split_dyn_DHP_member_cmpmix_stat();
1332 void split_st_DHP_base_cmp();
1333 void split_st_DHP_base_less();
1334 void split_st_DHP_base_cmpmix();
1335 void split_st_DHP_base_cmpmix_stat();
1336 void split_st_DHP_member_cmp();
1337 void split_st_DHP_member_less();
1338 void split_st_DHP_member_cmpmix();
1339 void split_st_DHP_member_cmpmix_stat();
1341 void split_dyn_RCU_GPI_base_cmp();
1342 void split_dyn_RCU_GPI_base_less();
1343 void split_dyn_RCU_GPI_base_cmpmix();
1344 void split_dyn_RCU_GPI_base_cmpmix_stat();
1345 void split_dyn_RCU_GPI_member_cmp();
1346 void split_dyn_RCU_GPI_member_less();
1347 void split_dyn_RCU_GPI_member_cmpmix();
1348 void split_dyn_RCU_GPI_member_cmpmix_stat();
1349 void split_st_RCU_GPI_base_cmp();
1350 void split_st_RCU_GPI_base_less();
1351 void split_st_RCU_GPI_base_cmpmix();
1352 void split_st_RCU_GPI_base_cmpmix_stat();
1353 void split_st_RCU_GPI_member_cmp();
1354 void split_st_RCU_GPI_member_less();
1355 void split_st_RCU_GPI_member_cmpmix();
1356 void split_st_RCU_GPI_member_cmpmix_stat();
1358 void split_dyn_RCU_GPB_base_cmp();
1359 void split_dyn_RCU_GPB_base_less();
1360 void split_dyn_RCU_GPB_base_cmpmix();
1361 void split_dyn_RCU_GPB_base_cmpmix_stat();
1362 void split_dyn_RCU_GPB_member_cmp();
1363 void split_dyn_RCU_GPB_member_less();
1364 void split_dyn_RCU_GPB_member_cmpmix();
1365 void split_dyn_RCU_GPB_member_cmpmix_stat();
1366 void split_st_RCU_GPB_base_cmp();
1367 void split_st_RCU_GPB_base_less();
1368 void split_st_RCU_GPB_base_cmpmix();
1369 void split_st_RCU_GPB_base_cmpmix_stat();
1370 void split_st_RCU_GPB_member_cmp();
1371 void split_st_RCU_GPB_member_less();
1372 void split_st_RCU_GPB_member_cmpmix();
1373 void split_st_RCU_GPB_member_cmpmix_stat();
1375 void split_dyn_RCU_GPT_base_cmp();
1376 void split_dyn_RCU_GPT_base_less();
1377 void split_dyn_RCU_GPT_base_cmpmix();
1378 void split_dyn_RCU_GPT_base_cmpmix_stat();
1379 void split_dyn_RCU_GPT_member_cmp();
1380 void split_dyn_RCU_GPT_member_less();
1381 void split_dyn_RCU_GPT_member_cmpmix();
1382 void split_dyn_RCU_GPT_member_cmpmix_stat();
1383 void split_st_RCU_GPT_base_cmp();
1384 void split_st_RCU_GPT_base_less();
1385 void split_st_RCU_GPT_base_cmpmix();
1386 void split_st_RCU_GPT_base_cmpmix_stat();
1387 void split_st_RCU_GPT_member_cmp();
1388 void split_st_RCU_GPT_member_less();
1389 void split_st_RCU_GPT_member_cmpmix();
1390 void split_st_RCU_GPT_member_cmpmix_stat();
1392 void split_dyn_RCU_SHB_base_cmp();
1393 void split_dyn_RCU_SHB_base_less();
1394 void split_dyn_RCU_SHB_base_cmpmix();
1395 void split_dyn_RCU_SHB_base_cmpmix_stat();
1396 void split_dyn_RCU_SHB_member_cmp();
1397 void split_dyn_RCU_SHB_member_less();
1398 void split_dyn_RCU_SHB_member_cmpmix();
1399 void split_dyn_RCU_SHB_member_cmpmix_stat();
1400 void split_st_RCU_SHB_base_cmp();
1401 void split_st_RCU_SHB_base_less();
1402 void split_st_RCU_SHB_base_cmpmix();
1403 void split_st_RCU_SHB_base_cmpmix_stat();
1404 void split_st_RCU_SHB_member_cmp();
1405 void split_st_RCU_SHB_member_less();
1406 void split_st_RCU_SHB_member_cmpmix();
1407 void split_st_RCU_SHB_member_cmpmix_stat();
1409 void split_dyn_RCU_SHT_base_cmp();
1410 void split_dyn_RCU_SHT_base_less();
1411 void split_dyn_RCU_SHT_base_cmpmix();
1412 void split_dyn_RCU_SHT_base_cmpmix_stat();
1413 void split_dyn_RCU_SHT_member_cmp();
1414 void split_dyn_RCU_SHT_member_less();
1415 void split_dyn_RCU_SHT_member_cmpmix();
1416 void split_dyn_RCU_SHT_member_cmpmix_stat();
1417 void split_st_RCU_SHT_base_cmp();
1418 void split_st_RCU_SHT_base_less();
1419 void split_st_RCU_SHT_base_cmpmix();
1420 void split_st_RCU_SHT_base_cmpmix_stat();
1421 void split_st_RCU_SHT_member_cmp();
1422 void split_st_RCU_SHT_member_less();
1423 void split_st_RCU_SHT_member_cmpmix();
1424 void split_st_RCU_SHT_member_cmpmix_stat();
1426 void split_dyn_nogc_base_cmp();
1427 void split_dyn_nogc_base_less();
1428 void split_dyn_nogc_base_cmpmix();
1429 void split_dyn_nogc_base_cmpmix_stat();
1430 void split_dyn_nogc_member_cmp();
1431 void split_dyn_nogc_member_less();
1432 void split_dyn_nogc_member_cmpmix();
1433 void split_dyn_nogc_member_cmpmix_stat();
1434 void split_st_nogc_base_cmp();
1435 void split_st_nogc_base_less();
1436 void split_st_nogc_base_cmpmix();
1437 void split_st_nogc_base_cmpmix_stat();
1438 void split_st_nogc_member_cmp();
1439 void split_st_nogc_member_less();
1440 void split_st_nogc_member_cmpmix();
1441 void split_st_nogc_member_cmpmix_stat();
1444 // SplitListSet + LazyList [dyn - dynamic bucket table, st - static bucket table]
1445 void split_dyn_HP_base_cmp_lazy();
1446 void split_dyn_HP_base_less_lazy();
1447 void split_dyn_HP_base_cmpmix_lazy();
1448 void split_dyn_HP_base_cmpmix_stat_lazy();
1449 void split_dyn_HP_member_cmp_lazy();
1450 void split_dyn_HP_member_less_lazy();
1451 void split_dyn_HP_member_cmpmix_lazy();
1452 void split_dyn_HP_member_cmpmix_stat_lazy();
1453 void split_st_HP_base_cmp_lazy();
1454 void split_st_HP_base_less_lazy();
1455 void split_st_HP_base_cmpmix_lazy();
1456 void split_st_HP_base_cmpmix_stat_lazy();
1457 void split_st_HP_member_cmp_lazy();
1458 void split_st_HP_member_less_lazy();
1459 void split_st_HP_member_cmpmix_lazy();
1460 void split_st_HP_member_cmpmix_stat_lazy();
1462 void split_dyn_DHP_base_cmp_lazy();
1463 void split_dyn_DHP_base_less_lazy();
1464 void split_dyn_DHP_base_cmpmix_lazy();
1465 void split_dyn_DHP_base_cmpmix_stat_lazy();
1466 void split_dyn_DHP_member_cmp_lazy();
1467 void split_dyn_DHP_member_less_lazy();
1468 void split_dyn_DHP_member_cmpmix_lazy();
1469 void split_dyn_DHP_member_cmpmix_stat_lazy();
1470 void split_st_DHP_base_cmp_lazy();
1471 void split_st_DHP_base_less_lazy();
1472 void split_st_DHP_base_cmpmix_lazy();
1473 void split_st_DHP_base_cmpmix_stat_lazy();
1474 void split_st_DHP_member_cmp_lazy();
1475 void split_st_DHP_member_less_lazy();
1476 void split_st_DHP_member_cmpmix_lazy();
1477 void split_st_DHP_member_cmpmix_stat_lazy();
1479 void split_dyn_RCU_GPI_base_cmp_lazy();
1480 void split_dyn_RCU_GPI_base_less_lazy();
1481 void split_dyn_RCU_GPI_base_cmpmix_lazy();
1482 void split_dyn_RCU_GPI_base_cmpmix_stat_lazy();
1483 void split_dyn_RCU_GPI_member_cmp_lazy();
1484 void split_dyn_RCU_GPI_member_less_lazy();
1485 void split_dyn_RCU_GPI_member_cmpmix_lazy();
1486 void split_dyn_RCU_GPI_member_cmpmix_stat_lazy();
1487 void split_st_RCU_GPI_base_cmp_lazy();
1488 void split_st_RCU_GPI_base_less_lazy();
1489 void split_st_RCU_GPI_base_cmpmix_lazy();
1490 void split_st_RCU_GPI_base_cmpmix_stat_lazy();
1491 void split_st_RCU_GPI_member_cmp_lazy();
1492 void split_st_RCU_GPI_member_less_lazy();
1493 void split_st_RCU_GPI_member_cmpmix_lazy();
1494 void split_st_RCU_GPI_member_cmpmix_stat_lazy();
1496 void split_dyn_RCU_GPB_base_cmp_lazy();
1497 void split_dyn_RCU_GPB_base_less_lazy();
1498 void split_dyn_RCU_GPB_base_cmpmix_lazy();
1499 void split_dyn_RCU_GPB_base_cmpmix_stat_lazy();
1500 void split_dyn_RCU_GPB_member_cmp_lazy();
1501 void split_dyn_RCU_GPB_member_less_lazy();
1502 void split_dyn_RCU_GPB_member_cmpmix_lazy();
1503 void split_dyn_RCU_GPB_member_cmpmix_stat_lazy();
1504 void split_st_RCU_GPB_base_cmp_lazy();
1505 void split_st_RCU_GPB_base_less_lazy();
1506 void split_st_RCU_GPB_base_cmpmix_lazy();
1507 void split_st_RCU_GPB_base_cmpmix_stat_lazy();
1508 void split_st_RCU_GPB_member_cmp_lazy();
1509 void split_st_RCU_GPB_member_less_lazy();
1510 void split_st_RCU_GPB_member_cmpmix_lazy();
1511 void split_st_RCU_GPB_member_cmpmix_stat_lazy();
1513 void split_dyn_RCU_GPT_base_cmp_lazy();
1514 void split_dyn_RCU_GPT_base_less_lazy();
1515 void split_dyn_RCU_GPT_base_cmpmix_lazy();
1516 void split_dyn_RCU_GPT_base_cmpmix_stat_lazy();
1517 void split_dyn_RCU_GPT_member_cmp_lazy();
1518 void split_dyn_RCU_GPT_member_less_lazy();
1519 void split_dyn_RCU_GPT_member_cmpmix_lazy();
1520 void split_dyn_RCU_GPT_member_cmpmix_stat_lazy();
1521 void split_st_RCU_GPT_base_cmp_lazy();
1522 void split_st_RCU_GPT_base_less_lazy();
1523 void split_st_RCU_GPT_base_cmpmix_lazy();
1524 void split_st_RCU_GPT_base_cmpmix_stat_lazy();
1525 void split_st_RCU_GPT_member_cmp_lazy();
1526 void split_st_RCU_GPT_member_less_lazy();
1527 void split_st_RCU_GPT_member_cmpmix_lazy();
1528 void split_st_RCU_GPT_member_cmpmix_stat_lazy();
1530 void split_dyn_RCU_SHB_base_cmp_lazy();
1531 void split_dyn_RCU_SHB_base_less_lazy();
1532 void split_dyn_RCU_SHB_base_cmpmix_lazy();
1533 void split_dyn_RCU_SHB_base_cmpmix_stat_lazy();
1534 void split_dyn_RCU_SHB_member_cmp_lazy();
1535 void split_dyn_RCU_SHB_member_less_lazy();
1536 void split_dyn_RCU_SHB_member_cmpmix_lazy();
1537 void split_dyn_RCU_SHB_member_cmpmix_stat_lazy();
1538 void split_st_RCU_SHB_base_cmp_lazy();
1539 void split_st_RCU_SHB_base_less_lazy();
1540 void split_st_RCU_SHB_base_cmpmix_lazy();
1541 void split_st_RCU_SHB_base_cmpmix_stat_lazy();
1542 void split_st_RCU_SHB_member_cmp_lazy();
1543 void split_st_RCU_SHB_member_less_lazy();
1544 void split_st_RCU_SHB_member_cmpmix_lazy();
1545 void split_st_RCU_SHB_member_cmpmix_stat_lazy();
1547 void split_dyn_RCU_SHT_base_cmp_lazy();
1548 void split_dyn_RCU_SHT_base_less_lazy();
1549 void split_dyn_RCU_SHT_base_cmpmix_lazy();
1550 void split_dyn_RCU_SHT_base_cmpmix_stat_lazy();
1551 void split_dyn_RCU_SHT_member_cmp_lazy();
1552 void split_dyn_RCU_SHT_member_less_lazy();
1553 void split_dyn_RCU_SHT_member_cmpmix_lazy();
1554 void split_dyn_RCU_SHT_member_cmpmix_stat_lazy();
1555 void split_st_RCU_SHT_base_cmp_lazy();
1556 void split_st_RCU_SHT_base_less_lazy();
1557 void split_st_RCU_SHT_base_cmpmix_lazy();
1558 void split_st_RCU_SHT_base_cmpmix_stat_lazy();
1559 void split_st_RCU_SHT_member_cmp_lazy();
1560 void split_st_RCU_SHT_member_less_lazy();
1561 void split_st_RCU_SHT_member_cmpmix_lazy();
1562 void split_st_RCU_SHT_member_cmpmix_stat_lazy();
1564 void split_dyn_nogc_base_cmp_lazy();
1565 void split_dyn_nogc_base_less_lazy();
1566 void split_dyn_nogc_base_cmpmix_lazy();
1567 void split_dyn_nogc_base_cmpmix_stat_lazy();
1568 void split_dyn_nogc_member_cmp_lazy();
1569 void split_dyn_nogc_member_less_lazy();
1570 void split_dyn_nogc_member_cmpmix_lazy();
1571 void split_dyn_nogc_member_cmpmix_stat_lazy();
1572 void split_st_nogc_base_cmp_lazy();
1573 void split_st_nogc_base_less_lazy();
1574 void split_st_nogc_base_cmpmix_lazy();
1575 void split_st_nogc_base_cmpmix_stat_lazy();
1576 void split_st_nogc_member_cmp_lazy();
1577 void split_st_nogc_member_less_lazy();
1578 void split_st_nogc_member_cmpmix_lazy();
1579 void split_st_nogc_member_cmpmix_stat_lazy();
1581 CPPUNIT_TEST_SUITE(IntrusiveHashSetHdrTest)
1582 CPPUNIT_TEST(HP_base_cmp)
1583 CPPUNIT_TEST(HP_base_less)
1584 CPPUNIT_TEST(HP_base_cmpmix)
1585 CPPUNIT_TEST(HP_member_cmp)
1586 CPPUNIT_TEST(HP_member_less)
1587 CPPUNIT_TEST(HP_member_cmpmix)
1589 CPPUNIT_TEST(DHP_base_cmp)
1590 CPPUNIT_TEST(DHP_base_less)
1591 CPPUNIT_TEST(DHP_base_cmpmix)
1592 CPPUNIT_TEST(DHP_member_cmp)
1593 CPPUNIT_TEST(DHP_member_less)
1594 CPPUNIT_TEST(DHP_member_cmpmix)
1596 CPPUNIT_TEST(RCU_GPI_base_cmp)
1597 CPPUNIT_TEST(RCU_GPI_base_less)
1598 CPPUNIT_TEST(RCU_GPI_base_cmpmix)
1599 CPPUNIT_TEST(RCU_GPI_member_cmp)
1600 CPPUNIT_TEST(RCU_GPI_member_less)
1601 CPPUNIT_TEST(RCU_GPI_member_cmpmix)
1603 CPPUNIT_TEST(RCU_GPB_base_cmp)
1604 CPPUNIT_TEST(RCU_GPB_base_less)
1605 CPPUNIT_TEST(RCU_GPB_base_cmpmix)
1606 CPPUNIT_TEST(RCU_GPB_member_cmp)
1607 CPPUNIT_TEST(RCU_GPB_member_less)
1608 CPPUNIT_TEST(RCU_GPB_member_cmpmix)
1610 CPPUNIT_TEST(RCU_GPT_base_cmp)
1611 CPPUNIT_TEST(RCU_GPT_base_less)
1612 CPPUNIT_TEST(RCU_GPT_base_cmpmix)
1613 CPPUNIT_TEST(RCU_GPT_member_cmp)
1614 CPPUNIT_TEST(RCU_GPT_member_less)
1615 CPPUNIT_TEST(RCU_GPT_member_cmpmix)
1617 CPPUNIT_TEST(RCU_SHB_base_cmp)
1618 CPPUNIT_TEST(RCU_SHB_base_less)
1619 CPPUNIT_TEST(RCU_SHB_base_cmpmix)
1620 CPPUNIT_TEST(RCU_SHB_member_cmp)
1621 CPPUNIT_TEST(RCU_SHB_member_less)
1622 CPPUNIT_TEST(RCU_SHB_member_cmpmix)
1624 CPPUNIT_TEST(RCU_SHT_base_cmp)
1625 CPPUNIT_TEST(RCU_SHT_base_less)
1626 CPPUNIT_TEST(RCU_SHT_base_cmpmix)
1627 CPPUNIT_TEST(RCU_SHT_member_cmp)
1628 CPPUNIT_TEST(RCU_SHT_member_less)
1629 CPPUNIT_TEST(RCU_SHT_member_cmpmix)
1631 CPPUNIT_TEST(nogc_base_cmp)
1632 CPPUNIT_TEST(nogc_base_less)
1633 CPPUNIT_TEST(nogc_base_cmpmix)
1634 CPPUNIT_TEST(nogc_member_cmp)
1635 CPPUNIT_TEST(nogc_member_less)
1636 CPPUNIT_TEST(nogc_member_cmpmix)
1638 CPPUNIT_TEST(HP_base_cmp_lazy)
1639 CPPUNIT_TEST(HP_base_less_lazy)
1640 CPPUNIT_TEST(HP_base_cmpmix_lazy)
1641 CPPUNIT_TEST(HP_member_cmp_lazy)
1642 CPPUNIT_TEST(HP_member_less_lazy)
1643 CPPUNIT_TEST(HP_member_cmpmix_lazy)
1645 CPPUNIT_TEST(DHP_base_cmp_lazy)
1646 CPPUNIT_TEST(DHP_base_less_lazy)
1647 CPPUNIT_TEST(DHP_base_cmpmix_lazy)
1648 CPPUNIT_TEST(DHP_member_cmp_lazy)
1649 CPPUNIT_TEST(DHP_member_less_lazy)
1650 CPPUNIT_TEST(DHP_member_cmpmix_lazy)
1652 CPPUNIT_TEST(RCU_GPI_base_cmp_lazy)
1653 CPPUNIT_TEST(RCU_GPI_base_less_lazy)
1654 CPPUNIT_TEST(RCU_GPI_base_cmpmix_lazy)
1655 CPPUNIT_TEST(RCU_GPI_member_cmp_lazy)
1656 CPPUNIT_TEST(RCU_GPI_member_less_lazy)
1657 CPPUNIT_TEST(RCU_GPI_member_cmpmix_lazy)
1659 CPPUNIT_TEST(RCU_GPB_base_cmp_lazy)
1660 CPPUNIT_TEST(RCU_GPB_base_less_lazy)
1661 CPPUNIT_TEST(RCU_GPB_base_cmpmix_lazy)
1662 CPPUNIT_TEST(RCU_GPB_member_cmp_lazy)
1663 CPPUNIT_TEST(RCU_GPB_member_less_lazy)
1664 CPPUNIT_TEST(RCU_GPB_member_cmpmix_lazy)
1666 CPPUNIT_TEST(RCU_GPT_base_cmp_lazy)
1667 CPPUNIT_TEST(RCU_GPT_base_less_lazy)
1668 CPPUNIT_TEST(RCU_GPT_base_cmpmix_lazy)
1669 CPPUNIT_TEST(RCU_GPT_member_cmp_lazy)
1670 CPPUNIT_TEST(RCU_GPT_member_less_lazy)
1671 CPPUNIT_TEST(RCU_GPT_member_cmpmix_lazy)
1673 CPPUNIT_TEST(RCU_SHB_base_cmp_lazy)
1674 CPPUNIT_TEST(RCU_SHB_base_less_lazy)
1675 CPPUNIT_TEST(RCU_SHB_base_cmpmix_lazy)
1676 CPPUNIT_TEST(RCU_SHB_member_cmp_lazy)
1677 CPPUNIT_TEST(RCU_SHB_member_less_lazy)
1678 CPPUNIT_TEST(RCU_SHB_member_cmpmix_lazy)
1680 CPPUNIT_TEST(RCU_SHT_base_cmp_lazy)
1681 CPPUNIT_TEST(RCU_SHT_base_less_lazy)
1682 CPPUNIT_TEST(RCU_SHT_base_cmpmix_lazy)
1683 CPPUNIT_TEST(RCU_SHT_member_cmp_lazy)
1684 CPPUNIT_TEST(RCU_SHT_member_less_lazy)
1685 CPPUNIT_TEST(RCU_SHT_member_cmpmix_lazy)
1687 CPPUNIT_TEST(nogc_base_cmp_lazy)
1688 CPPUNIT_TEST(nogc_base_less_lazy)
1689 CPPUNIT_TEST(nogc_base_cmpmix_lazy)
1690 CPPUNIT_TEST(nogc_member_cmp_lazy)
1691 CPPUNIT_TEST(nogc_member_less_lazy)
1692 CPPUNIT_TEST(nogc_member_cmpmix_lazy)
1694 CPPUNIT_TEST(split_dyn_HP_base_cmp)
1695 CPPUNIT_TEST(split_dyn_HP_base_less)
1696 CPPUNIT_TEST(split_dyn_HP_base_cmpmix)
1697 CPPUNIT_TEST( split_dyn_HP_base_cmpmix_stat )
1698 CPPUNIT_TEST( split_dyn_HP_member_cmp )
1699 CPPUNIT_TEST(split_dyn_HP_member_less)
1700 CPPUNIT_TEST(split_dyn_HP_member_cmpmix)
1701 CPPUNIT_TEST( split_dyn_HP_member_cmpmix_stat )
1702 CPPUNIT_TEST( split_st_HP_base_cmp )
1703 CPPUNIT_TEST(split_st_HP_base_less)
1704 CPPUNIT_TEST(split_st_HP_base_cmpmix)
1705 CPPUNIT_TEST( split_st_HP_base_cmpmix_stat )
1706 CPPUNIT_TEST( split_st_HP_member_cmp )
1707 CPPUNIT_TEST(split_st_HP_member_less)
1708 CPPUNIT_TEST(split_st_HP_member_cmpmix)
1709 CPPUNIT_TEST( split_st_HP_member_cmpmix_stat )
1711 CPPUNIT_TEST(split_dyn_DHP_base_cmp)
1712 CPPUNIT_TEST(split_dyn_DHP_base_less)
1713 CPPUNIT_TEST(split_dyn_DHP_base_cmpmix)
1714 CPPUNIT_TEST( split_dyn_DHP_base_cmpmix_stat )
1715 CPPUNIT_TEST( split_dyn_DHP_member_cmp )
1716 CPPUNIT_TEST(split_dyn_DHP_member_less)
1717 CPPUNIT_TEST(split_dyn_DHP_member_cmpmix)
1718 CPPUNIT_TEST( split_dyn_DHP_member_cmpmix_stat )
1719 CPPUNIT_TEST( split_st_DHP_base_cmp )
1720 CPPUNIT_TEST(split_st_DHP_base_less)
1721 CPPUNIT_TEST(split_st_DHP_base_cmpmix)
1722 CPPUNIT_TEST( split_st_DHP_base_cmpmix_stat )
1723 CPPUNIT_TEST( split_st_DHP_member_cmp )
1724 CPPUNIT_TEST(split_st_DHP_member_less)
1725 CPPUNIT_TEST(split_st_DHP_member_cmpmix)
1726 CPPUNIT_TEST( split_st_DHP_member_cmpmix_stat )
1728 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp)
1729 CPPUNIT_TEST(split_dyn_RCU_GPI_base_less)
1730 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix)
1731 CPPUNIT_TEST( split_dyn_RCU_GPI_base_cmpmix_stat )
1732 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmp )
1733 CPPUNIT_TEST(split_dyn_RCU_GPI_member_less)
1734 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix)
1735 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmpmix_stat )
1736 CPPUNIT_TEST( split_st_RCU_GPI_base_cmp )
1737 CPPUNIT_TEST(split_st_RCU_GPI_base_less)
1738 CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix)
1739 CPPUNIT_TEST( split_st_RCU_GPI_base_cmpmix_stat )
1740 CPPUNIT_TEST( split_st_RCU_GPI_member_cmp )
1741 CPPUNIT_TEST(split_st_RCU_GPI_member_less)
1742 CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix)
1743 CPPUNIT_TEST( split_st_RCU_GPI_member_cmpmix_stat )
1745 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp)
1746 CPPUNIT_TEST(split_dyn_RCU_GPB_base_less)
1747 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix)
1748 CPPUNIT_TEST( split_dyn_RCU_GPB_base_cmpmix_stat )
1749 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmp )
1750 CPPUNIT_TEST(split_dyn_RCU_GPB_member_less)
1751 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix)
1752 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmpmix_stat )
1753 CPPUNIT_TEST( split_st_RCU_GPB_base_cmp )
1754 CPPUNIT_TEST(split_st_RCU_GPB_base_less)
1755 CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix)
1756 CPPUNIT_TEST( split_st_RCU_GPB_base_cmpmix_stat )
1757 CPPUNIT_TEST( split_st_RCU_GPB_member_cmp )
1758 CPPUNIT_TEST(split_st_RCU_GPB_member_less)
1759 CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix)
1760 CPPUNIT_TEST( split_st_RCU_GPB_member_cmpmix_stat )
1762 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp)
1763 CPPUNIT_TEST(split_dyn_RCU_GPT_base_less)
1764 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix)
1765 CPPUNIT_TEST( split_dyn_RCU_GPT_base_cmpmix_stat )
1766 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmp )
1767 CPPUNIT_TEST(split_dyn_RCU_GPT_member_less)
1768 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix)
1769 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmpmix_stat )
1770 CPPUNIT_TEST( split_st_RCU_GPT_base_cmp )
1771 CPPUNIT_TEST(split_st_RCU_GPT_base_less)
1772 CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix)
1773 CPPUNIT_TEST( split_st_RCU_GPT_base_cmpmix_stat )
1774 CPPUNIT_TEST( split_st_RCU_GPT_member_cmp )
1775 CPPUNIT_TEST(split_st_RCU_GPT_member_less)
1776 CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix)
1777 CPPUNIT_TEST( split_st_RCU_GPT_member_cmpmix_stat )
1779 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp)
1780 CPPUNIT_TEST(split_dyn_RCU_SHB_base_less)
1781 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix)
1782 CPPUNIT_TEST( split_dyn_RCU_SHB_base_cmpmix_stat )
1783 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmp )
1784 CPPUNIT_TEST(split_dyn_RCU_SHB_member_less)
1785 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix)
1786 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmpmix_stat )
1787 CPPUNIT_TEST( split_st_RCU_SHB_base_cmp )
1788 CPPUNIT_TEST(split_st_RCU_SHB_base_less)
1789 CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix)
1790 CPPUNIT_TEST( split_st_RCU_SHB_base_cmpmix_stat )
1791 CPPUNIT_TEST( split_st_RCU_SHB_member_cmp )
1792 CPPUNIT_TEST(split_st_RCU_SHB_member_less)
1793 CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix)
1794 CPPUNIT_TEST( split_st_RCU_SHB_member_cmpmix_stat )
1796 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp)
1797 CPPUNIT_TEST(split_dyn_RCU_SHT_base_less)
1798 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix)
1799 CPPUNIT_TEST( split_dyn_RCU_SHT_base_cmpmix_stat )
1800 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmp )
1801 CPPUNIT_TEST(split_dyn_RCU_SHT_member_less)
1802 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix)
1803 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmpmix_stat )
1804 CPPUNIT_TEST( split_st_RCU_SHT_base_cmp )
1805 CPPUNIT_TEST(split_st_RCU_SHT_base_less)
1806 CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix)
1807 CPPUNIT_TEST( split_st_RCU_SHT_base_cmpmix_stat )
1808 CPPUNIT_TEST( split_st_RCU_SHT_member_cmp )
1809 CPPUNIT_TEST(split_st_RCU_SHT_member_less)
1810 CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix)
1811 CPPUNIT_TEST( split_st_RCU_SHT_member_cmpmix_stat )
1813 CPPUNIT_TEST(split_dyn_nogc_base_cmp)
1814 CPPUNIT_TEST(split_dyn_nogc_base_less)
1815 CPPUNIT_TEST(split_dyn_nogc_base_cmpmix)
1816 CPPUNIT_TEST( split_dyn_nogc_base_cmpmix_stat )
1817 CPPUNIT_TEST( split_dyn_nogc_member_cmp )
1818 CPPUNIT_TEST(split_dyn_nogc_member_less)
1819 CPPUNIT_TEST(split_dyn_nogc_member_cmpmix)
1820 CPPUNIT_TEST( split_dyn_nogc_member_cmpmix_stat )
1821 CPPUNIT_TEST( split_st_nogc_base_cmp )
1822 CPPUNIT_TEST(split_st_nogc_base_less)
1823 CPPUNIT_TEST(split_st_nogc_base_cmpmix)
1824 CPPUNIT_TEST( split_st_nogc_base_cmpmix_stat )
1825 CPPUNIT_TEST( split_st_nogc_member_cmp )
1826 CPPUNIT_TEST(split_st_nogc_member_less)
1827 CPPUNIT_TEST(split_st_nogc_member_cmpmix)
1828 CPPUNIT_TEST( split_st_nogc_member_cmpmix_stat )
1830 CPPUNIT_TEST(split_dyn_HP_base_cmp_lazy)
1831 CPPUNIT_TEST(split_dyn_HP_base_less_lazy)
1832 CPPUNIT_TEST(split_dyn_HP_base_cmpmix_lazy)
1833 CPPUNIT_TEST( split_dyn_HP_base_cmpmix_stat_lazy )
1834 CPPUNIT_TEST( split_dyn_HP_member_cmp_lazy )
1835 CPPUNIT_TEST(split_dyn_HP_member_less_lazy)
1836 CPPUNIT_TEST(split_dyn_HP_member_cmpmix_lazy)
1837 CPPUNIT_TEST( split_dyn_HP_member_cmpmix_stat_lazy )
1838 CPPUNIT_TEST( split_st_HP_base_cmp_lazy )
1839 CPPUNIT_TEST(split_st_HP_base_less_lazy)
1840 CPPUNIT_TEST(split_st_HP_base_cmpmix_lazy)
1841 CPPUNIT_TEST( split_st_HP_base_cmpmix_stat_lazy )
1842 CPPUNIT_TEST( split_st_HP_member_cmp_lazy )
1843 CPPUNIT_TEST(split_st_HP_member_less_lazy)
1844 CPPUNIT_TEST(split_st_HP_member_cmpmix_lazy)
1845 CPPUNIT_TEST( split_st_HP_member_cmpmix_stat_lazy )
1847 CPPUNIT_TEST(split_dyn_DHP_base_cmp_lazy)
1848 CPPUNIT_TEST(split_dyn_DHP_base_less_lazy)
1849 CPPUNIT_TEST(split_dyn_DHP_base_cmpmix_lazy)
1850 CPPUNIT_TEST( split_dyn_DHP_base_cmpmix_stat_lazy )
1851 CPPUNIT_TEST( split_dyn_DHP_member_cmp_lazy )
1852 CPPUNIT_TEST(split_dyn_DHP_member_less_lazy)
1853 CPPUNIT_TEST(split_dyn_DHP_member_cmpmix_lazy)
1854 CPPUNIT_TEST( split_dyn_DHP_member_cmpmix_stat_lazy )
1855 CPPUNIT_TEST( split_st_DHP_base_cmp_lazy )
1856 CPPUNIT_TEST(split_st_DHP_base_less_lazy)
1857 CPPUNIT_TEST(split_st_DHP_base_cmpmix_lazy)
1858 CPPUNIT_TEST( split_st_DHP_base_cmpmix_stat_lazy )
1859 CPPUNIT_TEST( split_st_DHP_member_cmp_lazy )
1860 CPPUNIT_TEST(split_st_DHP_member_less_lazy)
1861 CPPUNIT_TEST(split_st_DHP_member_cmpmix_lazy)
1862 CPPUNIT_TEST( split_st_DHP_member_cmpmix_stat_lazy )
1864 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp_lazy)
1865 CPPUNIT_TEST(split_dyn_RCU_GPI_base_less_lazy)
1866 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix_lazy)
1867 CPPUNIT_TEST( split_dyn_RCU_GPI_base_cmpmix_stat_lazy )
1868 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmp_lazy )
1869 CPPUNIT_TEST(split_dyn_RCU_GPI_member_less_lazy)
1870 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix_lazy)
1871 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmpmix_stat_lazy )
1872 CPPUNIT_TEST( split_st_RCU_GPI_base_cmp_lazy )
1873 CPPUNIT_TEST(split_st_RCU_GPI_base_less_lazy)
1874 CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix_lazy)
1875 CPPUNIT_TEST( split_st_RCU_GPI_base_cmpmix_stat_lazy )
1876 CPPUNIT_TEST( split_st_RCU_GPI_member_cmp_lazy )
1877 CPPUNIT_TEST(split_st_RCU_GPI_member_less_lazy)
1878 CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix_lazy)
1879 CPPUNIT_TEST( split_st_RCU_GPI_member_cmpmix_stat_lazy )
1881 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp_lazy)
1882 CPPUNIT_TEST(split_dyn_RCU_GPB_base_less_lazy)
1883 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix_lazy)
1884 CPPUNIT_TEST( split_dyn_RCU_GPB_base_cmpmix_stat_lazy )
1885 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmp_lazy )
1886 CPPUNIT_TEST(split_dyn_RCU_GPB_member_less_lazy)
1887 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix_lazy)
1888 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmpmix_stat_lazy )
1889 CPPUNIT_TEST( split_st_RCU_GPB_base_cmp_lazy )
1890 CPPUNIT_TEST(split_st_RCU_GPB_base_less_lazy)
1891 CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix_lazy)
1892 CPPUNIT_TEST( split_st_RCU_GPB_base_cmpmix_stat_lazy )
1893 CPPUNIT_TEST( split_st_RCU_GPB_member_cmp_lazy )
1894 CPPUNIT_TEST(split_st_RCU_GPB_member_less_lazy)
1895 CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix_lazy)
1896 CPPUNIT_TEST( split_st_RCU_GPB_member_cmpmix_stat_lazy )
1898 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp_lazy)
1899 CPPUNIT_TEST(split_dyn_RCU_GPT_base_less_lazy)
1900 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix_lazy)
1901 CPPUNIT_TEST( split_dyn_RCU_GPT_base_cmpmix_stat_lazy )
1902 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmp_lazy )
1903 CPPUNIT_TEST(split_dyn_RCU_GPT_member_less_lazy)
1904 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix_lazy)
1905 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmpmix_stat_lazy )
1906 CPPUNIT_TEST( split_st_RCU_GPT_base_cmp_lazy )
1907 CPPUNIT_TEST(split_st_RCU_GPT_base_less_lazy)
1908 CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix_lazy)
1909 CPPUNIT_TEST( split_st_RCU_GPT_base_cmpmix_stat_lazy )
1910 CPPUNIT_TEST( split_st_RCU_GPT_member_cmp_lazy )
1911 CPPUNIT_TEST(split_st_RCU_GPT_member_less_lazy)
1912 CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix_lazy)
1913 CPPUNIT_TEST( split_st_RCU_GPT_member_cmpmix_stat_lazy )
1915 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp_lazy)
1916 CPPUNIT_TEST(split_dyn_RCU_SHB_base_less_lazy)
1917 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix_lazy)
1918 CPPUNIT_TEST( split_dyn_RCU_SHB_base_cmpmix_stat_lazy )
1919 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmp_lazy )
1920 CPPUNIT_TEST(split_dyn_RCU_SHB_member_less_lazy)
1921 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix_lazy)
1922 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmpmix_stat_lazy )
1923 CPPUNIT_TEST( split_st_RCU_SHB_base_cmp_lazy )
1924 CPPUNIT_TEST(split_st_RCU_SHB_base_less_lazy)
1925 CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix_lazy)
1926 CPPUNIT_TEST( split_st_RCU_SHB_base_cmpmix_stat_lazy )
1927 CPPUNIT_TEST( split_st_RCU_SHB_member_cmp_lazy )
1928 CPPUNIT_TEST(split_st_RCU_SHB_member_less_lazy)
1929 CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix_lazy)
1930 CPPUNIT_TEST( split_st_RCU_SHB_member_cmpmix_stat_lazy )
1932 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp_lazy)
1933 CPPUNIT_TEST(split_dyn_RCU_SHT_base_less_lazy)
1934 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix_lazy)
1935 CPPUNIT_TEST( split_dyn_RCU_SHT_base_cmpmix_stat_lazy )
1936 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmp_lazy )
1937 CPPUNIT_TEST(split_dyn_RCU_SHT_member_less_lazy)
1938 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix_lazy)
1939 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmpmix_stat_lazy )
1940 CPPUNIT_TEST( split_st_RCU_SHT_base_cmp_lazy )
1941 CPPUNIT_TEST(split_st_RCU_SHT_base_less_lazy)
1942 CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix_lazy)
1943 CPPUNIT_TEST( split_st_RCU_SHT_base_cmpmix_stat_lazy )
1944 CPPUNIT_TEST( split_st_RCU_SHT_member_cmp_lazy )
1945 CPPUNIT_TEST(split_st_RCU_SHT_member_less_lazy)
1946 CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix_lazy)
1947 CPPUNIT_TEST( split_st_RCU_SHT_member_cmpmix_stat_lazy )
1949 CPPUNIT_TEST(split_dyn_nogc_base_cmp_lazy)
1950 CPPUNIT_TEST(split_dyn_nogc_base_less_lazy)
1951 CPPUNIT_TEST(split_dyn_nogc_base_cmpmix_lazy)
1952 CPPUNIT_TEST( split_dyn_nogc_base_cmpmix_stat_lazy )
1953 CPPUNIT_TEST( split_dyn_nogc_member_cmp_lazy )
1954 CPPUNIT_TEST(split_dyn_nogc_member_less_lazy)
1955 CPPUNIT_TEST(split_dyn_nogc_member_cmpmix_lazy)
1956 CPPUNIT_TEST( split_dyn_nogc_member_cmpmix_stat_lazy )
1957 CPPUNIT_TEST( split_st_nogc_base_cmp_lazy )
1958 CPPUNIT_TEST(split_st_nogc_base_less_lazy)
1959 CPPUNIT_TEST(split_st_nogc_base_cmpmix_lazy)
1960 CPPUNIT_TEST( split_st_nogc_base_cmpmix_stat_lazy )
1961 CPPUNIT_TEST( split_st_nogc_member_cmp_lazy )
1962 CPPUNIT_TEST(split_st_nogc_member_less_lazy)
1963 CPPUNIT_TEST(split_st_nogc_member_cmpmix_lazy)
1964 CPPUNIT_TEST( split_st_nogc_member_cmpmix_stat_lazy )
1965 CPPUNIT_TEST_SUITE_END()
1971 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_SET_H