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 nUpdateNewCount;
29 unsigned int nUpdateCount;
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 update_functor
216 template <typename Item>
217 void operator()( bool bNew, Item& item, Item& /*val*/ )
220 ++item.nUpdateNewCount;
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.contains( v1.key() ));
250 CPPUNIT_ASSERT( s.insert( v1 ));
251 CPPUNIT_ASSERT( s.contains( v1.key() ));
252 CPPUNIT_ASSERT( check_size( s, 1 ));
253 CPPUNIT_ASSERT( !s.empty() );
255 CPPUNIT_ASSERT( !s.contains( 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.contains( 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.contains( v1 ));
282 CPPUNIT_ASSERT( s.contains( v2 ));
283 CPPUNIT_ASSERT( s.contains( v3 ));
284 CPPUNIT_ASSERT( check_size( s, 2 ));
286 CPPUNIT_ASSERT( !s.unlink( v1 ));
287 CPPUNIT_ASSERT( !s.contains( v1 ));
288 CPPUNIT_ASSERT( check_size( s, 2 ));
290 CPPUNIT_ASSERT( s.contains( v3, less<value_type>() ));
291 CPPUNIT_ASSERT( s.unlink( v3 ));
292 CPPUNIT_ASSERT( !s.contains( v3, less<value_type>() ));
293 CPPUNIT_ASSERT( check_size( s, 1 ));
295 CPPUNIT_ASSERT( s.contains( v2 ));
296 CPPUNIT_ASSERT( s.unlink( v2 ));
297 CPPUNIT_ASSERT( !s.contains( v1 ));
298 CPPUNIT_ASSERT( !s.contains( v2 ));
299 CPPUNIT_ASSERT( !s.contains( 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.update(v1, f, false);
313 CPPUNIT_ASSERT(!ret.first);
314 CPPUNIT_ASSERT(!ret.second);
315 CPPUNIT_ASSERT(v1.nUpdateNewCount == 0);
316 CPPUNIT_ASSERT(v1.nUpdateCount == 0);
317 CPPUNIT_ASSERT(check_size(s, 0));
319 ret = s.update( v1, f );
320 CPPUNIT_ASSERT( ret.first );
321 CPPUNIT_ASSERT( ret.second );
322 CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
323 CPPUNIT_ASSERT( v1.nUpdateCount == 0 );
324 CPPUNIT_ASSERT( check_size( s, 1 ));
326 ret = s.update(v1, f, false);
327 CPPUNIT_ASSERT(ret.first);
328 CPPUNIT_ASSERT(!ret.second);
329 CPPUNIT_ASSERT(v1.nUpdateNewCount == 1);
330 CPPUNIT_ASSERT(v1.nUpdateCount == 1);
331 CPPUNIT_ASSERT(check_size(s, 1));
333 ret = s.update( v2, f );
334 CPPUNIT_ASSERT( ret.first );
335 CPPUNIT_ASSERT( ret.second );
336 CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
337 CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
338 CPPUNIT_ASSERT( check_size( s, 2 ));
340 ret = s.update( v3, f );
341 CPPUNIT_ASSERT( ret.first );
342 CPPUNIT_ASSERT( ret.second );
343 CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
344 CPPUNIT_ASSERT( v3.nUpdateCount == 0 );
345 CPPUNIT_ASSERT( check_size( s, 3 ));
347 CPPUNIT_ASSERT( s.contains( v1 ));
348 CPPUNIT_ASSERT( s.contains( v2 ));
349 CPPUNIT_ASSERT( s.contains( v3 ));
351 ret = s.update( v1, f );
352 CPPUNIT_ASSERT( ret.first );
353 CPPUNIT_ASSERT( !ret.second );
354 CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
355 CPPUNIT_ASSERT( v1.nUpdateCount == 2 );
356 CPPUNIT_ASSERT( check_size( s, 3 ));
358 ret = s.update( v2, f );
359 CPPUNIT_ASSERT( ret.first );
360 CPPUNIT_ASSERT( !ret.second );
361 CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
362 CPPUNIT_ASSERT( v2.nUpdateCount == 1 );
363 CPPUNIT_ASSERT( check_size( s, 3 ));
365 ret = s.update( v3, f );
366 CPPUNIT_ASSERT( ret.first );
367 CPPUNIT_ASSERT( !ret.second );
368 CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
369 CPPUNIT_ASSERT( v3.nUpdateCount == 1 );
370 CPPUNIT_ASSERT( check_size( s, 3 ));
372 CPPUNIT_ASSERT( s.contains( v1 ));
373 CPPUNIT_ASSERT( s.contains( v2 ));
374 CPPUNIT_ASSERT( s.contains( v3 ));
378 CPPUNIT_ASSERT( s.contains( v1 ));
379 CPPUNIT_ASSERT( s.contains( v2, less<value_type>() ));
380 CPPUNIT_ASSERT( s.contains( v3 ));
381 CPPUNIT_ASSERT( check_size( s, 3 ));
382 CPPUNIT_ASSERT( !s.empty() );
384 CPPUNIT_ASSERT( s.erase( v1 ));
385 CPPUNIT_ASSERT( !s.contains( v1 ));
386 CPPUNIT_ASSERT( s.contains( v2 ));
387 CPPUNIT_ASSERT( s.contains( v3 ));
388 CPPUNIT_ASSERT( check_size( s, 2 ));
389 CPPUNIT_ASSERT( !s.empty() );
391 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
392 CPPUNIT_ASSERT( !s.erase( v1, erase_functor() ));
393 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
394 CPPUNIT_ASSERT( !s.contains( v1 ));
395 CPPUNIT_ASSERT( s.contains( v2 ));
396 CPPUNIT_ASSERT( s.contains( v3 ));
397 CPPUNIT_ASSERT( check_size( s, 2 ));
398 CPPUNIT_ASSERT( !s.empty() );
400 CPPUNIT_ASSERT( v2.nEraseCount == 0 );
401 CPPUNIT_ASSERT( s.erase_with( v2.key(), less<value_type>(), erase_functor() ));
402 CPPUNIT_ASSERT( v2.nEraseCount == 1 );
403 CPPUNIT_ASSERT( !s.contains( v1 ));
404 CPPUNIT_ASSERT( !s.contains( v2 ));
405 CPPUNIT_ASSERT( s.contains( v3 ));
406 CPPUNIT_ASSERT( check_size( s, 1 ));
407 CPPUNIT_ASSERT( !s.empty() );
409 CPPUNIT_ASSERT( !s.erase( v2.key() ));
410 CPPUNIT_ASSERT( !s.contains( v1 ));
411 CPPUNIT_ASSERT( !s.contains( v2 ));
412 CPPUNIT_ASSERT( s.contains( v3 ));
413 CPPUNIT_ASSERT( check_size( s, 1 ));
414 CPPUNIT_ASSERT( !s.empty() );
416 CPPUNIT_ASSERT( s.erase( v3 ));
417 CPPUNIT_ASSERT( !s.contains( v1 ));
418 CPPUNIT_ASSERT( !s.contains( v2 ));
419 CPPUNIT_ASSERT( !s.contains( v3 ));
420 CPPUNIT_ASSERT( check_size( s, 0 ));
421 CPPUNIT_ASSERT( s.empty() );
424 Set::gc::force_dispose();
425 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
426 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
427 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
429 CPPUNIT_ASSERT( s.empty() );
430 CPPUNIT_ASSERT( s.insert( v1 ));
431 CPPUNIT_ASSERT( s.insert( v3 ));
432 CPPUNIT_ASSERT( check_size( s, 2 ));
433 CPPUNIT_ASSERT( !s.empty() );
437 CPPUNIT_ASSERT( !s.unlink( v ) );
440 CPPUNIT_ASSERT( s.unlink( v3 ) );
441 CPPUNIT_ASSERT( s.contains( v1 ));
442 CPPUNIT_ASSERT( !s.contains( v2 ));
443 CPPUNIT_ASSERT( !s.contains( v3 ));
444 CPPUNIT_ASSERT( check_size( s, 1 ));
445 CPPUNIT_ASSERT( !s.empty() );
447 CPPUNIT_ASSERT( !s.unlink( v3 ));
448 CPPUNIT_ASSERT( s.contains( v1 ));
449 CPPUNIT_ASSERT( !s.contains( v2 ));
450 CPPUNIT_ASSERT( !s.contains( v3 ));
451 CPPUNIT_ASSERT( check_size( s, 1 ));
452 CPPUNIT_ASSERT( !s.empty() );
454 CPPUNIT_ASSERT( s.unlink( v1 ));
455 CPPUNIT_ASSERT( !s.contains( v1 ));
456 CPPUNIT_ASSERT( !s.contains( v2 ));
457 CPPUNIT_ASSERT( !s.contains( v3 ));
458 CPPUNIT_ASSERT( check_size( s, 0 ));
459 CPPUNIT_ASSERT( s.empty() );
461 CPPUNIT_ASSERT( !s.unlink( v2 ));
462 CPPUNIT_ASSERT( !s.contains( v1 ));
463 CPPUNIT_ASSERT( !s.contains( v2 ));
464 CPPUNIT_ASSERT( !s.contains( v3 ));
465 CPPUNIT_ASSERT( check_size( s, 0 ));
466 CPPUNIT_ASSERT( s.empty() );
468 Set::gc::force_dispose();
469 CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
470 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
471 CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
474 CPPUNIT_ASSERT( s.insert( v1 ));
475 CPPUNIT_ASSERT( s.insert( v3 ));
476 CPPUNIT_ASSERT( s.insert( v2 ));
479 CPPUNIT_ASSERT( s.empty() );
480 CPPUNIT_ASSERT( check_size( s, 0 ));
481 Set::gc::force_dispose();
482 CPPUNIT_CHECK( v1.nDisposeCount == 4 );
483 CPPUNIT_CHECK( v2.nDisposeCount == 3 );
484 CPPUNIT_CHECK( v3.nDisposeCount == 4 );
501 typedef typename Set::value_type value_type;
502 typedef typename Set::guarded_ptr guarded_ptr;
504 static size_t const nLimit = 1024;
505 value_type arrItems[nLimit];
507 for ( size_t i = 0; i < nLimit; ++i )
509 shuffle( arr, arr + nLimit );
511 for ( size_t i = 0; i < nLimit; ++i ) {
512 arrItems[i].nKey = arr[i];
513 arrItems[i].nVal = arr[i] * 2;
517 for ( size_t i = 0; i < nLimit; ++i )
518 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
521 for ( size_t i = 0; i < nLimit; i += 2 ) {
524 CPPUNIT_ASSERT( gp );
525 CPPUNIT_ASSERT( !gp.empty());
526 CPPUNIT_CHECK( gp->nKey == nKey );
527 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
530 gp = s.extract( nKey );
531 CPPUNIT_ASSERT( gp );
532 CPPUNIT_ASSERT( !gp.empty() );
533 CPPUNIT_CHECK( gp->nKey == nKey );
534 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
538 CPPUNIT_CHECK( !gp );
539 CPPUNIT_ASSERT( gp.empty() );
540 CPPUNIT_CHECK( !s.extract( nKey ));
541 CPPUNIT_CHECK( gp.empty() );
544 gp = s.get_with( nKey, less<value_type>() );
545 CPPUNIT_ASSERT( gp );
546 CPPUNIT_CHECK( gp->nKey == nKey );
547 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
550 gp = s.extract_with( nKey, less<value_type>() );
551 CPPUNIT_ASSERT( gp );
552 CPPUNIT_ASSERT( !gp.empty() );
553 CPPUNIT_CHECK( gp->nKey == nKey );
554 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
557 gp = s.get_with( nKey, less<value_type>() );
558 CPPUNIT_CHECK( !gp );
559 CPPUNIT_CHECK( gp.empty());
560 CPPUNIT_CHECK( !s.extract_with( nKey, less<value_type>() ));
561 CPPUNIT_CHECK( gp.empty());
563 CPPUNIT_CHECK( s.empty() );
564 CPPUNIT_CHECK( check_size( s, 0 ));
566 CPPUNIT_CHECK( !s.get( 100 ));
567 CPPUNIT_CHECK( !s.extract( 100 ));
568 CPPUNIT_CHECK( gp.empty() );
570 Set::gc::force_dispose();
577 typedef typename Set::value_type value_type;
578 typedef typename Set::iterator set_iterator;
579 typedef typename Set::iterator const_set_iterator;
585 for ( int i = 0; unsigned(i) < sizeof(v)/sizeof(v[0]); ++i ) {
589 CPPUNIT_ASSERT( s.insert( v[i] ));
593 typename Set::iterator it( s.begin() );
594 typename Set::const_iterator cit( s.cbegin() );
595 CPPUNIT_CHECK( it == cit );
596 CPPUNIT_CHECK( it != s.end() );
597 CPPUNIT_CHECK( it != s.cend() );
598 CPPUNIT_CHECK( cit != s.end() );
599 CPPUNIT_CHECK( cit != s.cend() );
601 CPPUNIT_CHECK( it != cit );
602 CPPUNIT_CHECK( it != s.end() );
603 CPPUNIT_CHECK( it != s.cend() );
604 CPPUNIT_CHECK( cit != s.end() );
605 CPPUNIT_CHECK( cit != s.cend() );
607 CPPUNIT_CHECK( it == cit );
608 CPPUNIT_CHECK( it != s.end() );
609 CPPUNIT_CHECK( it != s.cend() );
610 CPPUNIT_CHECK( cit != s.end() );
611 CPPUNIT_CHECK( cit != s.cend() );
615 for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
616 set_iterator it2 = it;
617 CPPUNIT_CHECK( it == it2 );
618 CPPUNIT_CHECK( it2 != itEnd );
619 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
620 it->nVal = (*it).nKey;
623 CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
626 for ( const_set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
627 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
630 CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
632 for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
633 CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
637 Set::gc::force_dispose();
639 for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
640 CPPUNIT_ASSERT( v[i].nDisposeCount == 1 );
647 typedef typename Set::value_type value_type;
649 value_type v1( 10, 50 );
650 value_type v2( 5, 25 );
651 value_type v3( 20, 100 );
659 CPPUNIT_ASSERT( s.empty() );
660 CPPUNIT_ASSERT( check_size( s, 0 ));
663 CPPUNIT_ASSERT( s.contains( v1.key() ) == nullptr );
664 CPPUNIT_ASSERT( s.insert( v1 ));
665 CPPUNIT_ASSERT( s.contains( v1.key(), less<value_type>() ) == &v1 );
666 CPPUNIT_ASSERT( check_size( s, 1 ));
667 CPPUNIT_ASSERT( !s.empty() );
669 CPPUNIT_ASSERT( s.contains( v2.key() ) == nullptr );
670 CPPUNIT_ASSERT( s.insert( v2 ));
671 CPPUNIT_ASSERT( v2.nFindCount == 0 );
672 CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
673 CPPUNIT_ASSERT( v2.nFindCount == 1 );
675 CPPUNIT_ASSERT( check_size( s, 2 ));
676 CPPUNIT_ASSERT( !s.empty() );
680 CPPUNIT_ASSERT( s.contains( v3 ) == nullptr );
681 CPPUNIT_ASSERT( s.insert( v3 ));
682 CPPUNIT_ASSERT( v3.nFindCount == 0 );
683 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
684 CPPUNIT_ASSERT( v3.nFindCount == 1 );
686 CPPUNIT_ASSERT( check_size( s, 3 ));
687 CPPUNIT_ASSERT( !s.empty() );
691 // s.clear() ; // not all set supports clear() method
692 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
693 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
694 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
703 std::pair<bool, bool> ret = s.update(v1, f, false);
704 CPPUNIT_ASSERT(!ret.first);
705 CPPUNIT_ASSERT(!ret.second);
706 CPPUNIT_ASSERT(v1.nUpdateNewCount == 0);
707 CPPUNIT_ASSERT(v1.nUpdateCount == 0);
708 CPPUNIT_ASSERT(check_size(s, 0));
710 ret = s.update( v1, f );
711 CPPUNIT_ASSERT( ret.first );
712 CPPUNIT_ASSERT( ret.second );
713 CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
714 CPPUNIT_ASSERT( v1.nUpdateCount == 0 );
715 CPPUNIT_ASSERT( check_size( s, 1 ));
717 ret = s.update(v1, f, false);
718 CPPUNIT_ASSERT(ret.first);
719 CPPUNIT_ASSERT(!ret.second);
720 CPPUNIT_ASSERT(v1.nUpdateNewCount == 1);
721 CPPUNIT_ASSERT(v1.nUpdateCount == 1);
722 CPPUNIT_ASSERT(check_size(s, 1));
724 ret = s.update( v2, f );
725 CPPUNIT_ASSERT( ret.first );
726 CPPUNIT_ASSERT( ret.second );
727 CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
728 CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
729 CPPUNIT_ASSERT( check_size( s, 2 ));
731 ret = s.update( v3, f );
732 CPPUNIT_ASSERT( ret.first );
733 CPPUNIT_ASSERT( ret.second );
734 CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
735 CPPUNIT_ASSERT( v3.nUpdateCount == 0 );
736 CPPUNIT_ASSERT( check_size( s, 3 ));
738 CPPUNIT_ASSERT( s.contains( v1 ) == &v1 );
739 CPPUNIT_ASSERT( s.contains( v2 ) == &v2 );
740 CPPUNIT_ASSERT( s.contains( v3 ) == &v3 );
742 ret = s.update( v1, f );
743 CPPUNIT_ASSERT( ret.first );
744 CPPUNIT_ASSERT( !ret.second );
745 CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
746 CPPUNIT_ASSERT( v1.nUpdateCount == 2 );
747 CPPUNIT_ASSERT( check_size( s, 3 ));
749 ret = s.update( v2, f );
750 CPPUNIT_ASSERT( ret.first );
751 CPPUNIT_ASSERT( !ret.second );
752 CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
753 CPPUNIT_ASSERT( v2.nUpdateCount == 1 );
754 CPPUNIT_ASSERT( check_size( s, 3 ));
756 ret = s.update( v3, f );
757 CPPUNIT_ASSERT( ret.first );
758 CPPUNIT_ASSERT( !ret.second );
759 CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
760 CPPUNIT_ASSERT( v3.nUpdateCount == 1 );
761 CPPUNIT_ASSERT( check_size( s, 3 ));
763 CPPUNIT_ASSERT( s.contains( v1 ) == &v1 );
764 CPPUNIT_ASSERT( s.contains( v2 ) == &v2 );
765 CPPUNIT_ASSERT( s.contains( v3 ) == &v3 );
769 // dispose on destruct test
770 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
771 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
772 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
779 #define ASSERT_RCU_FIND( _expr ) { rcu_lock rl; CPPUNIT_ASSERT( _expr ); }
781 void test_rcu_int_with( Set& s )
783 typedef typename Set::value_type value_type;
784 typedef typename Set::gc::scoped_lock rcu_lock;
786 value_type v1( 10, 50 );
787 value_type v2( 5, 25 );
788 value_type v3( 20, 100 );
789 value_type v4( 40, 400 );
792 CPPUNIT_ASSERT( s.empty() );
793 CPPUNIT_ASSERT( check_size( s, 0 ));
797 ASSERT_RCU_FIND( !s.contains( v1.key(), less<value_type>() ));
798 CPPUNIT_ASSERT( s.insert( v1 ));
799 ASSERT_RCU_FIND( s.contains( v1.key(), less<value_type>()) );
800 CPPUNIT_ASSERT( check_size( s, 1 ));
801 CPPUNIT_ASSERT( !s.empty() );
803 ASSERT_RCU_FIND( !s.contains( v2.key() ));
804 CPPUNIT_ASSERT( s.insert( v2 ));
805 CPPUNIT_ASSERT( v2.nFindCount == 0 );
806 CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
807 CPPUNIT_ASSERT( v2.nFindCount == 1 );
809 CPPUNIT_ASSERT( check_size( s, 2 ));
810 CPPUNIT_ASSERT( !s.empty() );
815 ASSERT_RCU_FIND( !s.contains( v3 ));
816 CPPUNIT_ASSERT( v3.nVal != v3.nKey * 100 );
817 CPPUNIT_ASSERT( s.insert( v3, std::ref(fi) ));
818 CPPUNIT_ASSERT( v3.nVal == v3.nKey * 100 );
819 CPPUNIT_ASSERT( v3.nFindCount == 0 );
820 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
821 CPPUNIT_ASSERT( v3.nFindCount == 1 );
823 CPPUNIT_ASSERT( check_size( s, 3 ));
824 CPPUNIT_ASSERT( !s.empty() );
828 CPPUNIT_ASSERT( s.unlink( v1 ));
829 ASSERT_RCU_FIND( !s.contains( v1 ));
830 ASSERT_RCU_FIND( s.contains( v2 ));
831 ASSERT_RCU_FIND( s.contains( v3 ));
832 CPPUNIT_ASSERT( check_size( s, 2 ));
834 CPPUNIT_ASSERT( !s.unlink( v1 ));
835 ASSERT_RCU_FIND( !s.contains( v1 ));
836 CPPUNIT_ASSERT( check_size( s, 2 ));
838 ASSERT_RCU_FIND( s.contains( v3 ) );
839 CPPUNIT_ASSERT( s.unlink( v3 ));
840 ASSERT_RCU_FIND( !s.contains( v3 ));
841 CPPUNIT_ASSERT( check_size( s, 1 ));
843 ASSERT_RCU_FIND( s.contains( v2 ));
844 CPPUNIT_ASSERT( s.unlink( v2 ));
845 ASSERT_RCU_FIND( !s.contains( v1 ));
846 ASSERT_RCU_FIND( !s.contains( v2 ));
847 ASSERT_RCU_FIND( !s.contains( v3 ));
848 CPPUNIT_ASSERT( check_size( s, 0 ));
849 CPPUNIT_ASSERT( s.empty() );
851 Set::gc::force_dispose();
852 // unlink function calls disposer
853 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
854 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
855 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
861 std::pair<bool, bool> ret = s.update(v1, f, false);
862 CPPUNIT_ASSERT(!ret.first);
863 CPPUNIT_ASSERT(!ret.second);
864 CPPUNIT_ASSERT(v1.nUpdateNewCount == 0);
865 CPPUNIT_ASSERT(v1.nUpdateCount == 0);
866 CPPUNIT_ASSERT(check_size(s, 0));
868 ret = s.update( v1, f );
869 CPPUNIT_ASSERT( ret.first );
870 CPPUNIT_ASSERT( ret.second );
871 CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
872 CPPUNIT_ASSERT( v1.nUpdateCount == 0 );
873 CPPUNIT_ASSERT( check_size( s, 1 ));
875 ret = s.update(v1, f, false);
876 CPPUNIT_ASSERT(ret.first);
877 CPPUNIT_ASSERT(!ret.second);
878 CPPUNIT_ASSERT(v1.nUpdateNewCount == 1);
879 CPPUNIT_ASSERT(v1.nUpdateCount == 1);
880 CPPUNIT_ASSERT(check_size(s, 1));
882 ret = s.update( v2, f );
883 CPPUNIT_ASSERT( ret.first );
884 CPPUNIT_ASSERT( ret.second );
885 CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
886 CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
887 CPPUNIT_ASSERT( check_size( s, 2 ));
889 ret = s.update( v3, f );
890 CPPUNIT_ASSERT( ret.first );
891 CPPUNIT_ASSERT( ret.second );
892 CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
893 CPPUNIT_ASSERT( v3.nUpdateCount == 0 );
894 CPPUNIT_ASSERT( check_size( s, 3 ));
896 ASSERT_RCU_FIND( s.contains( v1 ));
897 ASSERT_RCU_FIND( s.contains( v2 ));
898 ASSERT_RCU_FIND( s.contains( v3 ));
900 ret = s.update( v1, f );
901 CPPUNIT_ASSERT( ret.first );
902 CPPUNIT_ASSERT( !ret.second );
903 CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
904 CPPUNIT_ASSERT( v1.nUpdateCount == 2 );
905 CPPUNIT_ASSERT( check_size( s, 3 ));
907 ret = s.update( v2, f );
908 CPPUNIT_ASSERT( ret.first );
909 CPPUNIT_ASSERT( !ret.second );
910 CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
911 CPPUNIT_ASSERT( v2.nUpdateCount == 1 );
912 CPPUNIT_ASSERT( check_size( s, 3 ));
914 ret = s.update( v3, f );
915 CPPUNIT_ASSERT( ret.first );
916 CPPUNIT_ASSERT( !ret.second );
917 CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
918 CPPUNIT_ASSERT( v3.nUpdateCount == 1 );
919 CPPUNIT_ASSERT( check_size( s, 3 ));
921 ASSERT_RCU_FIND( s.contains( v1 ) );
922 ASSERT_RCU_FIND( s.contains( v2 ));
923 ASSERT_RCU_FIND( s.contains( v3 ));
927 ASSERT_RCU_FIND( s.contains( v1 ));
928 ASSERT_RCU_FIND( s.contains( v2, less<value_type>() ));
929 ASSERT_RCU_FIND( s.contains( v3 ));
930 CPPUNIT_ASSERT( check_size( s, 3 ));
931 CPPUNIT_ASSERT( !s.empty() );
933 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
934 CPPUNIT_ASSERT( s.erase_with( v1, less<value_type>(), erase_functor() ));
935 CPPUNIT_ASSERT( v1.nEraseCount == 1 );
936 ASSERT_RCU_FIND( !s.contains( v1 ));
937 ASSERT_RCU_FIND( s.contains( v2 ) );
938 ASSERT_RCU_FIND( s.contains( v3 ) );
939 CPPUNIT_ASSERT( check_size( s, 2 ));
940 CPPUNIT_ASSERT( !s.empty() );
942 CPPUNIT_ASSERT( !s.erase( v1 ));
943 ASSERT_RCU_FIND( !s.contains( v1 ));
944 ASSERT_RCU_FIND( s.contains( v2 ));
945 ASSERT_RCU_FIND( s.contains( v3 ) );
946 CPPUNIT_ASSERT( check_size( s, 2 ));
947 CPPUNIT_ASSERT( !s.empty() );
949 ASSERT_RCU_FIND( !s.contains( v4 ));
950 CPPUNIT_ASSERT( s.insert(v4));
951 ASSERT_RCU_FIND( s.contains( v4.key() ));
952 CPPUNIT_ASSERT( s.erase_with( v4.key(), less<value_type>() ));
953 ASSERT_RCU_FIND( !s.contains( v4.key() ));
955 CPPUNIT_ASSERT( s.erase( v2.key() ));
956 ASSERT_RCU_FIND( !s.contains( v1 ));
957 ASSERT_RCU_FIND( !s.contains( v2 ));
958 ASSERT_RCU_FIND( s.contains( v3 ) );
959 CPPUNIT_ASSERT( check_size( s, 1 ));
960 CPPUNIT_ASSERT( !s.empty() );
962 CPPUNIT_ASSERT( !s.erase( v2.key() ));
963 ASSERT_RCU_FIND( !s.contains( v1 ));
964 ASSERT_RCU_FIND( !s.contains( v2 ));
965 ASSERT_RCU_FIND( s.contains( v3 ) );
966 CPPUNIT_ASSERT( check_size( s, 1 ));
967 CPPUNIT_ASSERT( !s.empty() );
969 CPPUNIT_ASSERT( v3.nEraseCount == 0 );
970 CPPUNIT_ASSERT( s.erase( v3, erase_functor() ));
971 CPPUNIT_ASSERT( v3.nEraseCount == 1 );
972 ASSERT_RCU_FIND( !s.contains( v1 ));
973 ASSERT_RCU_FIND( !s.contains( v2 ));
974 ASSERT_RCU_FIND( !s.contains( v3 ));
975 CPPUNIT_ASSERT( check_size( s, 0 ));
976 CPPUNIT_ASSERT( s.empty() );
979 Set::gc::force_dispose();
980 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
981 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
982 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
983 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
985 CPPUNIT_ASSERT( s.empty() );
986 CPPUNIT_ASSERT( s.insert( v1 ));
987 CPPUNIT_ASSERT( s.insert( v3 ));
988 CPPUNIT_ASSERT( check_size( s, 2 ));
989 CPPUNIT_ASSERT( !s.empty() );
993 CPPUNIT_ASSERT( !s.unlink( v ) );
996 CPPUNIT_ASSERT( s.unlink( v3 ) );
997 ASSERT_RCU_FIND( s.contains( v1 ));
998 ASSERT_RCU_FIND( !s.contains( v2 ));
999 ASSERT_RCU_FIND( !s.contains( v3 ));
1000 CPPUNIT_ASSERT( check_size( s, 1 ));
1001 CPPUNIT_ASSERT( !s.empty() );
1003 CPPUNIT_ASSERT( !s.unlink( v3 ));
1004 ASSERT_RCU_FIND( s.contains( v1 ));
1005 ASSERT_RCU_FIND( !s.contains( v2 ));
1006 ASSERT_RCU_FIND( !s.contains( v3 ));
1007 CPPUNIT_ASSERT( check_size( s, 1 ));
1008 CPPUNIT_ASSERT( !s.empty() );
1010 CPPUNIT_ASSERT( s.unlink( v1 ));
1011 ASSERT_RCU_FIND( !s.contains( v1 ));
1012 ASSERT_RCU_FIND( !s.contains( v2 ));
1013 ASSERT_RCU_FIND( !s.contains( v3 ));
1014 CPPUNIT_ASSERT( check_size( s, 0 ));
1015 CPPUNIT_ASSERT( s.empty() );
1017 CPPUNIT_ASSERT( !s.unlink( v2 ));
1018 ASSERT_RCU_FIND( !s.contains( v1 ));
1019 ASSERT_RCU_FIND( !s.contains( v2 ));
1020 ASSERT_RCU_FIND( !s.contains( v3 ));
1021 CPPUNIT_ASSERT( check_size( s, 0 ));
1022 CPPUNIT_ASSERT( s.empty() );
1024 Set::gc::force_dispose();
1025 CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
1026 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
1027 CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
1028 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
1031 CPPUNIT_ASSERT( s.insert( v1 ));
1032 CPPUNIT_ASSERT( s.insert( v3 ));
1033 CPPUNIT_ASSERT( s.insert( v2 ));
1036 Set::gc::force_dispose();
1037 CPPUNIT_ASSERT( v1.nDisposeCount == 4 );
1038 CPPUNIT_ASSERT( v2.nDisposeCount == 3 );
1039 CPPUNIT_ASSERT( v3.nDisposeCount == 4 );
1040 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
1042 #undef ASSERT_RCU_FIND
1044 template <class Set>
1049 test_rcu_int_with( s );
1056 typedef typename Set::gc rcu;
1057 typedef typename Set::value_type value_type;
1058 typedef typename Set::rcu_lock rcu_lock;
1060 typename Set::exempt_ptr ep;
1063 static size_t const nLimit = 1024;
1064 value_type arrItems[nLimit];
1066 for ( size_t i = 0; i < nLimit; ++i )
1068 shuffle( arr, arr + nLimit );
1070 for ( size_t i = 0; i < nLimit; ++i ) {
1071 arrItems[i].nKey = arr[i];
1072 arrItems[i].nVal = arr[i] * 2;
1076 for ( size_t i = 0; i < nLimit; ++i )
1077 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
1079 for ( size_t i = 0; i < nLimit; i += 2 ) {
1084 pVal = s.get( nKey );
1085 CPPUNIT_ASSERT( pVal != nullptr );
1086 CPPUNIT_CHECK( pVal->nKey == nKey );
1087 CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
1089 ep = s.extract( nKey );
1090 CPPUNIT_ASSERT( ep );
1091 CPPUNIT_ASSERT( !ep.empty() );
1092 CPPUNIT_CHECK( pVal->nKey == ep->nKey );
1093 CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
1098 CPPUNIT_CHECK( s.get( nKey ) == nullptr );
1099 CPPUNIT_CHECK( !s.extract( nKey ));
1100 CPPUNIT_CHECK( ep.empty() );
1103 pVal = s.get_with( nKey, less<value_type>() );
1104 CPPUNIT_ASSERT( pVal != nullptr );
1105 CPPUNIT_CHECK( pVal->nKey == nKey );
1106 CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
1108 ep = s.extract_with( nKey, less<value_type>() );
1109 CPPUNIT_ASSERT( ep );
1110 CPPUNIT_ASSERT( !ep.empty() );
1111 CPPUNIT_CHECK( pVal->nKey == ep->nKey );
1112 CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
1117 CPPUNIT_CHECK( s.get_with( nKey, less<value_type>() ) == nullptr );
1118 ep = s.extract_with( nKey, less<value_type>() );
1119 CPPUNIT_CHECK( !ep );
1120 CPPUNIT_CHECK( ep.empty() );
1123 CPPUNIT_CHECK( s.empty() );
1124 CPPUNIT_CHECK( check_size( s, 0 ));
1127 CPPUNIT_CHECK( s.get( 100 ) == nullptr );
1128 ep = s.extract( 100 );
1129 CPPUNIT_CHECK( !ep );
1130 CPPUNIT_CHECK( ep.empty() );
1133 Set::gc::force_dispose();
1137 template <class Set>
1138 void test_rcu_int_michael_list()
1142 test_rcu_int_with( s );
1149 typedef typename Set::gc rcu;
1150 typedef typename Set::value_type value_type;
1151 typedef typename Set::rcu_lock rcu_lock;
1153 typename Set::exempt_ptr ep;
1154 typename Set::raw_ptr gp;
1157 static size_t const nLimit = 1024;
1158 value_type arrItems[nLimit];
1160 for ( size_t i = 0; i < nLimit; ++i )
1162 shuffle( arr, arr + nLimit );
1164 for ( size_t i = 0; i < nLimit; ++i ) {
1165 arrItems[i].nKey = arr[i];
1166 arrItems[i].nVal = arr[i] * 2;
1170 for ( size_t i = 0; i < nLimit; ++i )
1171 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
1173 for ( size_t i = 0; i < nLimit; i += 2 ) {
1178 CPPUNIT_ASSERT( gp );
1179 CPPUNIT_CHECK( gp->nKey == nKey );
1180 CPPUNIT_CHECK( (*gp).nVal == nKey * 2 );
1184 ep = s.extract( nKey );
1185 CPPUNIT_ASSERT( ep );
1186 CPPUNIT_ASSERT( !ep.empty() );
1187 CPPUNIT_CHECK( nKey == ep->nKey );
1188 CPPUNIT_CHECK( nKey * 2 == (*ep).nVal );
1192 CPPUNIT_CHECK( !s.get( nKey ));
1194 CPPUNIT_CHECK( !s.extract( nKey ));
1195 CPPUNIT_CHECK( ep.empty() );
1200 gp = s.get_with( nKey, less<value_type>() );
1201 CPPUNIT_ASSERT( gp );
1202 CPPUNIT_CHECK( gp->nKey == nKey );
1203 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
1207 ep = s.extract_with( nKey, less<value_type>() );
1208 CPPUNIT_ASSERT( ep );
1209 CPPUNIT_ASSERT( !ep.empty() );
1210 CPPUNIT_CHECK( nKey == ep->nKey );
1211 CPPUNIT_CHECK( nKey * 2 == (*ep).nVal );
1216 CPPUNIT_CHECK( !s.get_with( nKey, less<value_type>()));
1218 ep = s.extract_with( nKey, less<value_type>() );
1219 CPPUNIT_CHECK( !ep );
1220 CPPUNIT_CHECK( ep.empty() );
1222 CPPUNIT_CHECK( s.empty() );
1223 CPPUNIT_CHECK( check_size( s, 0 ));
1226 CPPUNIT_CHECK( !s.get( 100 ));
1228 ep = s.extract( 100 );
1229 CPPUNIT_CHECK( !ep );
1230 CPPUNIT_CHECK( ep.empty() );
1232 Set::gc::force_dispose();
1236 // MichaelHashSet + MichaelList
1238 void HP_base_less();
1239 void HP_base_cmpmix();
1240 void HP_member_cmp();
1241 void HP_member_less();
1242 void HP_member_cmpmix();
1244 void DHP_base_cmp();
1245 void DHP_base_less();
1246 void DHP_base_cmpmix();
1247 void DHP_member_cmp();
1248 void DHP_member_less();
1249 void DHP_member_cmpmix();
1251 void RCU_GPI_base_cmp();
1252 void RCU_GPI_base_less();
1253 void RCU_GPI_base_cmpmix();
1254 void RCU_GPI_member_cmp();
1255 void RCU_GPI_member_less();
1256 void RCU_GPI_member_cmpmix();
1258 void RCU_GPB_base_cmp();
1259 void RCU_GPB_base_less();
1260 void RCU_GPB_base_cmpmix();
1261 void RCU_GPB_member_cmp();
1262 void RCU_GPB_member_less();
1263 void RCU_GPB_member_cmpmix();
1265 void RCU_GPT_base_cmp();
1266 void RCU_GPT_base_less();
1267 void RCU_GPT_base_cmpmix();
1268 void RCU_GPT_member_cmp();
1269 void RCU_GPT_member_less();
1270 void RCU_GPT_member_cmpmix();
1272 void RCU_SHB_base_cmp();
1273 void RCU_SHB_base_less();
1274 void RCU_SHB_base_cmpmix();
1275 void RCU_SHB_member_cmp();
1276 void RCU_SHB_member_less();
1277 void RCU_SHB_member_cmpmix();
1279 void RCU_SHT_base_cmp();
1280 void RCU_SHT_base_less();
1281 void RCU_SHT_base_cmpmix();
1282 void RCU_SHT_member_cmp();
1283 void RCU_SHT_member_less();
1284 void RCU_SHT_member_cmpmix();
1286 void nogc_base_cmp();
1287 void nogc_base_less();
1288 void nogc_base_cmpmix();
1289 void nogc_member_cmp();
1290 void nogc_member_less();
1291 void nogc_member_cmpmix();
1293 // MichaelHashSet + LazyList
1294 void HP_base_cmp_lazy();
1295 void HP_base_less_lazy();
1296 void HP_base_cmpmix_lazy();
1297 void HP_member_cmp_lazy();
1298 void HP_member_less_lazy();
1299 void HP_member_cmpmix_lazy();
1301 void DHP_base_cmp_lazy();
1302 void DHP_base_less_lazy();
1303 void DHP_base_cmpmix_lazy();
1304 void DHP_member_cmp_lazy();
1305 void DHP_member_less_lazy();
1306 void DHP_member_cmpmix_lazy();
1308 void RCU_GPI_base_cmp_lazy();
1309 void RCU_GPI_base_less_lazy();
1310 void RCU_GPI_base_cmpmix_lazy();
1311 void RCU_GPI_member_cmp_lazy();
1312 void RCU_GPI_member_less_lazy();
1313 void RCU_GPI_member_cmpmix_lazy();
1315 void RCU_GPB_base_cmp_lazy();
1316 void RCU_GPB_base_less_lazy();
1317 void RCU_GPB_base_cmpmix_lazy();
1318 void RCU_GPB_member_cmp_lazy();
1319 void RCU_GPB_member_less_lazy();
1320 void RCU_GPB_member_cmpmix_lazy();
1322 void RCU_GPT_base_cmp_lazy();
1323 void RCU_GPT_base_less_lazy();
1324 void RCU_GPT_base_cmpmix_lazy();
1325 void RCU_GPT_member_cmp_lazy();
1326 void RCU_GPT_member_less_lazy();
1327 void RCU_GPT_member_cmpmix_lazy();
1329 void RCU_SHB_base_cmp_lazy();
1330 void RCU_SHB_base_less_lazy();
1331 void RCU_SHB_base_cmpmix_lazy();
1332 void RCU_SHB_member_cmp_lazy();
1333 void RCU_SHB_member_less_lazy();
1334 void RCU_SHB_member_cmpmix_lazy();
1336 void RCU_SHT_base_cmp_lazy();
1337 void RCU_SHT_base_less_lazy();
1338 void RCU_SHT_base_cmpmix_lazy();
1339 void RCU_SHT_member_cmp_lazy();
1340 void RCU_SHT_member_less_lazy();
1341 void RCU_SHT_member_cmpmix_lazy();
1343 void nogc_base_cmp_lazy();
1344 void nogc_base_less_lazy();
1345 void nogc_base_cmpmix_lazy();
1346 void nogc_member_cmp_lazy();
1347 void nogc_member_less_lazy();
1348 void nogc_member_cmpmix_lazy();
1350 // SplitListSet + MichaelList [dyn - dynamic bucket table, st - static bucket table]
1351 void split_dyn_HP_base_cmp();
1352 void split_dyn_HP_base_less();
1353 void split_dyn_HP_base_cmpmix();
1354 void split_dyn_HP_base_cmpmix_stat();
1355 void split_dyn_HP_member_cmp();
1356 void split_dyn_HP_member_less();
1357 void split_dyn_HP_member_cmpmix();
1358 void split_dyn_HP_member_cmpmix_stat();
1359 void split_st_HP_base_cmp();
1360 void split_st_HP_base_less();
1361 void split_st_HP_base_cmpmix();
1362 void split_st_HP_base_cmpmix_stat();
1363 void split_st_HP_member_cmp();
1364 void split_st_HP_member_less();
1365 void split_st_HP_member_cmpmix();
1366 void split_st_HP_member_cmpmix_stat();
1368 void split_dyn_DHP_base_cmp();
1369 void split_dyn_DHP_base_less();
1370 void split_dyn_DHP_base_cmpmix();
1371 void split_dyn_DHP_base_cmpmix_stat();
1372 void split_dyn_DHP_member_cmp();
1373 void split_dyn_DHP_member_less();
1374 void split_dyn_DHP_member_cmpmix();
1375 void split_dyn_DHP_member_cmpmix_stat();
1376 void split_st_DHP_base_cmp();
1377 void split_st_DHP_base_less();
1378 void split_st_DHP_base_cmpmix();
1379 void split_st_DHP_base_cmpmix_stat();
1380 void split_st_DHP_member_cmp();
1381 void split_st_DHP_member_less();
1382 void split_st_DHP_member_cmpmix();
1383 void split_st_DHP_member_cmpmix_stat();
1385 void split_dyn_RCU_GPI_base_cmp();
1386 void split_dyn_RCU_GPI_base_less();
1387 void split_dyn_RCU_GPI_base_cmpmix();
1388 void split_dyn_RCU_GPI_base_cmpmix_stat();
1389 void split_dyn_RCU_GPI_member_cmp();
1390 void split_dyn_RCU_GPI_member_less();
1391 void split_dyn_RCU_GPI_member_cmpmix();
1392 void split_dyn_RCU_GPI_member_cmpmix_stat();
1393 void split_st_RCU_GPI_base_cmp();
1394 void split_st_RCU_GPI_base_less();
1395 void split_st_RCU_GPI_base_cmpmix();
1396 void split_st_RCU_GPI_base_cmpmix_stat();
1397 void split_st_RCU_GPI_member_cmp();
1398 void split_st_RCU_GPI_member_less();
1399 void split_st_RCU_GPI_member_cmpmix();
1400 void split_st_RCU_GPI_member_cmpmix_stat();
1402 void split_dyn_RCU_GPB_base_cmp();
1403 void split_dyn_RCU_GPB_base_less();
1404 void split_dyn_RCU_GPB_base_cmpmix();
1405 void split_dyn_RCU_GPB_base_cmpmix_stat();
1406 void split_dyn_RCU_GPB_member_cmp();
1407 void split_dyn_RCU_GPB_member_less();
1408 void split_dyn_RCU_GPB_member_cmpmix();
1409 void split_dyn_RCU_GPB_member_cmpmix_stat();
1410 void split_st_RCU_GPB_base_cmp();
1411 void split_st_RCU_GPB_base_less();
1412 void split_st_RCU_GPB_base_cmpmix();
1413 void split_st_RCU_GPB_base_cmpmix_stat();
1414 void split_st_RCU_GPB_member_cmp();
1415 void split_st_RCU_GPB_member_less();
1416 void split_st_RCU_GPB_member_cmpmix();
1417 void split_st_RCU_GPB_member_cmpmix_stat();
1419 void split_dyn_RCU_GPT_base_cmp();
1420 void split_dyn_RCU_GPT_base_less();
1421 void split_dyn_RCU_GPT_base_cmpmix();
1422 void split_dyn_RCU_GPT_base_cmpmix_stat();
1423 void split_dyn_RCU_GPT_member_cmp();
1424 void split_dyn_RCU_GPT_member_less();
1425 void split_dyn_RCU_GPT_member_cmpmix();
1426 void split_dyn_RCU_GPT_member_cmpmix_stat();
1427 void split_st_RCU_GPT_base_cmp();
1428 void split_st_RCU_GPT_base_less();
1429 void split_st_RCU_GPT_base_cmpmix();
1430 void split_st_RCU_GPT_base_cmpmix_stat();
1431 void split_st_RCU_GPT_member_cmp();
1432 void split_st_RCU_GPT_member_less();
1433 void split_st_RCU_GPT_member_cmpmix();
1434 void split_st_RCU_GPT_member_cmpmix_stat();
1436 void split_dyn_RCU_SHB_base_cmp();
1437 void split_dyn_RCU_SHB_base_less();
1438 void split_dyn_RCU_SHB_base_cmpmix();
1439 void split_dyn_RCU_SHB_base_cmpmix_stat();
1440 void split_dyn_RCU_SHB_member_cmp();
1441 void split_dyn_RCU_SHB_member_less();
1442 void split_dyn_RCU_SHB_member_cmpmix();
1443 void split_dyn_RCU_SHB_member_cmpmix_stat();
1444 void split_st_RCU_SHB_base_cmp();
1445 void split_st_RCU_SHB_base_less();
1446 void split_st_RCU_SHB_base_cmpmix();
1447 void split_st_RCU_SHB_base_cmpmix_stat();
1448 void split_st_RCU_SHB_member_cmp();
1449 void split_st_RCU_SHB_member_less();
1450 void split_st_RCU_SHB_member_cmpmix();
1451 void split_st_RCU_SHB_member_cmpmix_stat();
1453 void split_dyn_RCU_SHT_base_cmp();
1454 void split_dyn_RCU_SHT_base_less();
1455 void split_dyn_RCU_SHT_base_cmpmix();
1456 void split_dyn_RCU_SHT_base_cmpmix_stat();
1457 void split_dyn_RCU_SHT_member_cmp();
1458 void split_dyn_RCU_SHT_member_less();
1459 void split_dyn_RCU_SHT_member_cmpmix();
1460 void split_dyn_RCU_SHT_member_cmpmix_stat();
1461 void split_st_RCU_SHT_base_cmp();
1462 void split_st_RCU_SHT_base_less();
1463 void split_st_RCU_SHT_base_cmpmix();
1464 void split_st_RCU_SHT_base_cmpmix_stat();
1465 void split_st_RCU_SHT_member_cmp();
1466 void split_st_RCU_SHT_member_less();
1467 void split_st_RCU_SHT_member_cmpmix();
1468 void split_st_RCU_SHT_member_cmpmix_stat();
1470 void split_dyn_nogc_base_cmp();
1471 void split_dyn_nogc_base_less();
1472 void split_dyn_nogc_base_cmpmix();
1473 void split_dyn_nogc_base_cmpmix_stat();
1474 void split_dyn_nogc_member_cmp();
1475 void split_dyn_nogc_member_less();
1476 void split_dyn_nogc_member_cmpmix();
1477 void split_dyn_nogc_member_cmpmix_stat();
1478 void split_st_nogc_base_cmp();
1479 void split_st_nogc_base_less();
1480 void split_st_nogc_base_cmpmix();
1481 void split_st_nogc_base_cmpmix_stat();
1482 void split_st_nogc_member_cmp();
1483 void split_st_nogc_member_less();
1484 void split_st_nogc_member_cmpmix();
1485 void split_st_nogc_member_cmpmix_stat();
1488 // SplitListSet + LazyList [dyn - dynamic bucket table, st - static bucket table]
1489 void split_dyn_HP_base_cmp_lazy();
1490 void split_dyn_HP_base_less_lazy();
1491 void split_dyn_HP_base_cmpmix_lazy();
1492 void split_dyn_HP_base_cmpmix_stat_lazy();
1493 void split_dyn_HP_member_cmp_lazy();
1494 void split_dyn_HP_member_less_lazy();
1495 void split_dyn_HP_member_cmpmix_lazy();
1496 void split_dyn_HP_member_cmpmix_stat_lazy();
1497 void split_st_HP_base_cmp_lazy();
1498 void split_st_HP_base_less_lazy();
1499 void split_st_HP_base_cmpmix_lazy();
1500 void split_st_HP_base_cmpmix_stat_lazy();
1501 void split_st_HP_member_cmp_lazy();
1502 void split_st_HP_member_less_lazy();
1503 void split_st_HP_member_cmpmix_lazy();
1504 void split_st_HP_member_cmpmix_stat_lazy();
1506 void split_dyn_DHP_base_cmp_lazy();
1507 void split_dyn_DHP_base_less_lazy();
1508 void split_dyn_DHP_base_cmpmix_lazy();
1509 void split_dyn_DHP_base_cmpmix_stat_lazy();
1510 void split_dyn_DHP_member_cmp_lazy();
1511 void split_dyn_DHP_member_less_lazy();
1512 void split_dyn_DHP_member_cmpmix_lazy();
1513 void split_dyn_DHP_member_cmpmix_stat_lazy();
1514 void split_st_DHP_base_cmp_lazy();
1515 void split_st_DHP_base_less_lazy();
1516 void split_st_DHP_base_cmpmix_lazy();
1517 void split_st_DHP_base_cmpmix_stat_lazy();
1518 void split_st_DHP_member_cmp_lazy();
1519 void split_st_DHP_member_less_lazy();
1520 void split_st_DHP_member_cmpmix_lazy();
1521 void split_st_DHP_member_cmpmix_stat_lazy();
1523 void split_dyn_RCU_GPI_base_cmp_lazy();
1524 void split_dyn_RCU_GPI_base_less_lazy();
1525 void split_dyn_RCU_GPI_base_cmpmix_lazy();
1526 void split_dyn_RCU_GPI_base_cmpmix_stat_lazy();
1527 void split_dyn_RCU_GPI_member_cmp_lazy();
1528 void split_dyn_RCU_GPI_member_less_lazy();
1529 void split_dyn_RCU_GPI_member_cmpmix_lazy();
1530 void split_dyn_RCU_GPI_member_cmpmix_stat_lazy();
1531 void split_st_RCU_GPI_base_cmp_lazy();
1532 void split_st_RCU_GPI_base_less_lazy();
1533 void split_st_RCU_GPI_base_cmpmix_lazy();
1534 void split_st_RCU_GPI_base_cmpmix_stat_lazy();
1535 void split_st_RCU_GPI_member_cmp_lazy();
1536 void split_st_RCU_GPI_member_less_lazy();
1537 void split_st_RCU_GPI_member_cmpmix_lazy();
1538 void split_st_RCU_GPI_member_cmpmix_stat_lazy();
1540 void split_dyn_RCU_GPB_base_cmp_lazy();
1541 void split_dyn_RCU_GPB_base_less_lazy();
1542 void split_dyn_RCU_GPB_base_cmpmix_lazy();
1543 void split_dyn_RCU_GPB_base_cmpmix_stat_lazy();
1544 void split_dyn_RCU_GPB_member_cmp_lazy();
1545 void split_dyn_RCU_GPB_member_less_lazy();
1546 void split_dyn_RCU_GPB_member_cmpmix_lazy();
1547 void split_dyn_RCU_GPB_member_cmpmix_stat_lazy();
1548 void split_st_RCU_GPB_base_cmp_lazy();
1549 void split_st_RCU_GPB_base_less_lazy();
1550 void split_st_RCU_GPB_base_cmpmix_lazy();
1551 void split_st_RCU_GPB_base_cmpmix_stat_lazy();
1552 void split_st_RCU_GPB_member_cmp_lazy();
1553 void split_st_RCU_GPB_member_less_lazy();
1554 void split_st_RCU_GPB_member_cmpmix_lazy();
1555 void split_st_RCU_GPB_member_cmpmix_stat_lazy();
1557 void split_dyn_RCU_GPT_base_cmp_lazy();
1558 void split_dyn_RCU_GPT_base_less_lazy();
1559 void split_dyn_RCU_GPT_base_cmpmix_lazy();
1560 void split_dyn_RCU_GPT_base_cmpmix_stat_lazy();
1561 void split_dyn_RCU_GPT_member_cmp_lazy();
1562 void split_dyn_RCU_GPT_member_less_lazy();
1563 void split_dyn_RCU_GPT_member_cmpmix_lazy();
1564 void split_dyn_RCU_GPT_member_cmpmix_stat_lazy();
1565 void split_st_RCU_GPT_base_cmp_lazy();
1566 void split_st_RCU_GPT_base_less_lazy();
1567 void split_st_RCU_GPT_base_cmpmix_lazy();
1568 void split_st_RCU_GPT_base_cmpmix_stat_lazy();
1569 void split_st_RCU_GPT_member_cmp_lazy();
1570 void split_st_RCU_GPT_member_less_lazy();
1571 void split_st_RCU_GPT_member_cmpmix_lazy();
1572 void split_st_RCU_GPT_member_cmpmix_stat_lazy();
1574 void split_dyn_RCU_SHB_base_cmp_lazy();
1575 void split_dyn_RCU_SHB_base_less_lazy();
1576 void split_dyn_RCU_SHB_base_cmpmix_lazy();
1577 void split_dyn_RCU_SHB_base_cmpmix_stat_lazy();
1578 void split_dyn_RCU_SHB_member_cmp_lazy();
1579 void split_dyn_RCU_SHB_member_less_lazy();
1580 void split_dyn_RCU_SHB_member_cmpmix_lazy();
1581 void split_dyn_RCU_SHB_member_cmpmix_stat_lazy();
1582 void split_st_RCU_SHB_base_cmp_lazy();
1583 void split_st_RCU_SHB_base_less_lazy();
1584 void split_st_RCU_SHB_base_cmpmix_lazy();
1585 void split_st_RCU_SHB_base_cmpmix_stat_lazy();
1586 void split_st_RCU_SHB_member_cmp_lazy();
1587 void split_st_RCU_SHB_member_less_lazy();
1588 void split_st_RCU_SHB_member_cmpmix_lazy();
1589 void split_st_RCU_SHB_member_cmpmix_stat_lazy();
1591 void split_dyn_RCU_SHT_base_cmp_lazy();
1592 void split_dyn_RCU_SHT_base_less_lazy();
1593 void split_dyn_RCU_SHT_base_cmpmix_lazy();
1594 void split_dyn_RCU_SHT_base_cmpmix_stat_lazy();
1595 void split_dyn_RCU_SHT_member_cmp_lazy();
1596 void split_dyn_RCU_SHT_member_less_lazy();
1597 void split_dyn_RCU_SHT_member_cmpmix_lazy();
1598 void split_dyn_RCU_SHT_member_cmpmix_stat_lazy();
1599 void split_st_RCU_SHT_base_cmp_lazy();
1600 void split_st_RCU_SHT_base_less_lazy();
1601 void split_st_RCU_SHT_base_cmpmix_lazy();
1602 void split_st_RCU_SHT_base_cmpmix_stat_lazy();
1603 void split_st_RCU_SHT_member_cmp_lazy();
1604 void split_st_RCU_SHT_member_less_lazy();
1605 void split_st_RCU_SHT_member_cmpmix_lazy();
1606 void split_st_RCU_SHT_member_cmpmix_stat_lazy();
1608 void split_dyn_nogc_base_cmp_lazy();
1609 void split_dyn_nogc_base_less_lazy();
1610 void split_dyn_nogc_base_cmpmix_lazy();
1611 void split_dyn_nogc_base_cmpmix_stat_lazy();
1612 void split_dyn_nogc_member_cmp_lazy();
1613 void split_dyn_nogc_member_less_lazy();
1614 void split_dyn_nogc_member_cmpmix_lazy();
1615 void split_dyn_nogc_member_cmpmix_stat_lazy();
1616 void split_st_nogc_base_cmp_lazy();
1617 void split_st_nogc_base_less_lazy();
1618 void split_st_nogc_base_cmpmix_lazy();
1619 void split_st_nogc_base_cmpmix_stat_lazy();
1620 void split_st_nogc_member_cmp_lazy();
1621 void split_st_nogc_member_less_lazy();
1622 void split_st_nogc_member_cmpmix_lazy();
1623 void split_st_nogc_member_cmpmix_stat_lazy();
1625 CPPUNIT_TEST_SUITE(IntrusiveHashSetHdrTest)
1626 CPPUNIT_TEST(HP_base_cmp)
1627 CPPUNIT_TEST(HP_base_less)
1628 CPPUNIT_TEST(HP_base_cmpmix)
1629 CPPUNIT_TEST(HP_member_cmp)
1630 CPPUNIT_TEST(HP_member_less)
1631 CPPUNIT_TEST(HP_member_cmpmix)
1633 CPPUNIT_TEST(DHP_base_cmp)
1634 CPPUNIT_TEST(DHP_base_less)
1635 CPPUNIT_TEST(DHP_base_cmpmix)
1636 CPPUNIT_TEST(DHP_member_cmp)
1637 CPPUNIT_TEST(DHP_member_less)
1638 CPPUNIT_TEST(DHP_member_cmpmix)
1640 CPPUNIT_TEST(RCU_GPI_base_cmp)
1641 CPPUNIT_TEST(RCU_GPI_base_less)
1642 CPPUNIT_TEST(RCU_GPI_base_cmpmix)
1643 CPPUNIT_TEST(RCU_GPI_member_cmp)
1644 CPPUNIT_TEST(RCU_GPI_member_less)
1645 CPPUNIT_TEST(RCU_GPI_member_cmpmix)
1647 CPPUNIT_TEST(RCU_GPB_base_cmp)
1648 CPPUNIT_TEST(RCU_GPB_base_less)
1649 CPPUNIT_TEST(RCU_GPB_base_cmpmix)
1650 CPPUNIT_TEST(RCU_GPB_member_cmp)
1651 CPPUNIT_TEST(RCU_GPB_member_less)
1652 CPPUNIT_TEST(RCU_GPB_member_cmpmix)
1654 CPPUNIT_TEST(RCU_GPT_base_cmp)
1655 CPPUNIT_TEST(RCU_GPT_base_less)
1656 CPPUNIT_TEST(RCU_GPT_base_cmpmix)
1657 CPPUNIT_TEST(RCU_GPT_member_cmp)
1658 CPPUNIT_TEST(RCU_GPT_member_less)
1659 CPPUNIT_TEST(RCU_GPT_member_cmpmix)
1661 CPPUNIT_TEST(RCU_SHB_base_cmp)
1662 CPPUNIT_TEST(RCU_SHB_base_less)
1663 CPPUNIT_TEST(RCU_SHB_base_cmpmix)
1664 CPPUNIT_TEST(RCU_SHB_member_cmp)
1665 CPPUNIT_TEST(RCU_SHB_member_less)
1666 CPPUNIT_TEST(RCU_SHB_member_cmpmix)
1668 CPPUNIT_TEST(RCU_SHT_base_cmp)
1669 CPPUNIT_TEST(RCU_SHT_base_less)
1670 CPPUNIT_TEST(RCU_SHT_base_cmpmix)
1671 CPPUNIT_TEST(RCU_SHT_member_cmp)
1672 CPPUNIT_TEST(RCU_SHT_member_less)
1673 CPPUNIT_TEST(RCU_SHT_member_cmpmix)
1675 CPPUNIT_TEST(nogc_base_cmp)
1676 CPPUNIT_TEST(nogc_base_less)
1677 CPPUNIT_TEST(nogc_base_cmpmix)
1678 CPPUNIT_TEST(nogc_member_cmp)
1679 CPPUNIT_TEST(nogc_member_less)
1680 CPPUNIT_TEST(nogc_member_cmpmix)
1682 CPPUNIT_TEST(HP_base_cmp_lazy)
1683 CPPUNIT_TEST(HP_base_less_lazy)
1684 CPPUNIT_TEST(HP_base_cmpmix_lazy)
1685 CPPUNIT_TEST(HP_member_cmp_lazy)
1686 CPPUNIT_TEST(HP_member_less_lazy)
1687 CPPUNIT_TEST(HP_member_cmpmix_lazy)
1689 CPPUNIT_TEST(DHP_base_cmp_lazy)
1690 CPPUNIT_TEST(DHP_base_less_lazy)
1691 CPPUNIT_TEST(DHP_base_cmpmix_lazy)
1692 CPPUNIT_TEST(DHP_member_cmp_lazy)
1693 CPPUNIT_TEST(DHP_member_less_lazy)
1694 CPPUNIT_TEST(DHP_member_cmpmix_lazy)
1696 CPPUNIT_TEST(RCU_GPI_base_cmp_lazy)
1697 CPPUNIT_TEST(RCU_GPI_base_less_lazy)
1698 CPPUNIT_TEST(RCU_GPI_base_cmpmix_lazy)
1699 CPPUNIT_TEST(RCU_GPI_member_cmp_lazy)
1700 CPPUNIT_TEST(RCU_GPI_member_less_lazy)
1701 CPPUNIT_TEST(RCU_GPI_member_cmpmix_lazy)
1703 CPPUNIT_TEST(RCU_GPB_base_cmp_lazy)
1704 CPPUNIT_TEST(RCU_GPB_base_less_lazy)
1705 CPPUNIT_TEST(RCU_GPB_base_cmpmix_lazy)
1706 CPPUNIT_TEST(RCU_GPB_member_cmp_lazy)
1707 CPPUNIT_TEST(RCU_GPB_member_less_lazy)
1708 CPPUNIT_TEST(RCU_GPB_member_cmpmix_lazy)
1710 CPPUNIT_TEST(RCU_GPT_base_cmp_lazy)
1711 CPPUNIT_TEST(RCU_GPT_base_less_lazy)
1712 CPPUNIT_TEST(RCU_GPT_base_cmpmix_lazy)
1713 CPPUNIT_TEST(RCU_GPT_member_cmp_lazy)
1714 CPPUNIT_TEST(RCU_GPT_member_less_lazy)
1715 CPPUNIT_TEST(RCU_GPT_member_cmpmix_lazy)
1717 CPPUNIT_TEST(RCU_SHB_base_cmp_lazy)
1718 CPPUNIT_TEST(RCU_SHB_base_less_lazy)
1719 CPPUNIT_TEST(RCU_SHB_base_cmpmix_lazy)
1720 CPPUNIT_TEST(RCU_SHB_member_cmp_lazy)
1721 CPPUNIT_TEST(RCU_SHB_member_less_lazy)
1722 CPPUNIT_TEST(RCU_SHB_member_cmpmix_lazy)
1724 CPPUNIT_TEST(RCU_SHT_base_cmp_lazy)
1725 CPPUNIT_TEST(RCU_SHT_base_less_lazy)
1726 CPPUNIT_TEST(RCU_SHT_base_cmpmix_lazy)
1727 CPPUNIT_TEST(RCU_SHT_member_cmp_lazy)
1728 CPPUNIT_TEST(RCU_SHT_member_less_lazy)
1729 CPPUNIT_TEST(RCU_SHT_member_cmpmix_lazy)
1731 CPPUNIT_TEST(nogc_base_cmp_lazy)
1732 CPPUNIT_TEST(nogc_base_less_lazy)
1733 CPPUNIT_TEST(nogc_base_cmpmix_lazy)
1734 CPPUNIT_TEST(nogc_member_cmp_lazy)
1735 CPPUNIT_TEST(nogc_member_less_lazy)
1736 CPPUNIT_TEST(nogc_member_cmpmix_lazy)
1738 CPPUNIT_TEST(split_dyn_HP_base_cmp)
1739 CPPUNIT_TEST(split_dyn_HP_base_less)
1740 CPPUNIT_TEST(split_dyn_HP_base_cmpmix)
1741 CPPUNIT_TEST( split_dyn_HP_base_cmpmix_stat )
1742 CPPUNIT_TEST( split_dyn_HP_member_cmp )
1743 CPPUNIT_TEST(split_dyn_HP_member_less)
1744 CPPUNIT_TEST(split_dyn_HP_member_cmpmix)
1745 CPPUNIT_TEST( split_dyn_HP_member_cmpmix_stat )
1746 CPPUNIT_TEST( split_st_HP_base_cmp )
1747 CPPUNIT_TEST(split_st_HP_base_less)
1748 CPPUNIT_TEST(split_st_HP_base_cmpmix)
1749 CPPUNIT_TEST( split_st_HP_base_cmpmix_stat )
1750 CPPUNIT_TEST( split_st_HP_member_cmp )
1751 CPPUNIT_TEST(split_st_HP_member_less)
1752 CPPUNIT_TEST(split_st_HP_member_cmpmix)
1753 CPPUNIT_TEST( split_st_HP_member_cmpmix_stat )
1755 CPPUNIT_TEST(split_dyn_DHP_base_cmp)
1756 CPPUNIT_TEST(split_dyn_DHP_base_less)
1757 CPPUNIT_TEST(split_dyn_DHP_base_cmpmix)
1758 CPPUNIT_TEST( split_dyn_DHP_base_cmpmix_stat )
1759 CPPUNIT_TEST( split_dyn_DHP_member_cmp )
1760 CPPUNIT_TEST(split_dyn_DHP_member_less)
1761 CPPUNIT_TEST(split_dyn_DHP_member_cmpmix)
1762 CPPUNIT_TEST( split_dyn_DHP_member_cmpmix_stat )
1763 CPPUNIT_TEST( split_st_DHP_base_cmp )
1764 CPPUNIT_TEST(split_st_DHP_base_less)
1765 CPPUNIT_TEST(split_st_DHP_base_cmpmix)
1766 CPPUNIT_TEST( split_st_DHP_base_cmpmix_stat )
1767 CPPUNIT_TEST( split_st_DHP_member_cmp )
1768 CPPUNIT_TEST(split_st_DHP_member_less)
1769 CPPUNIT_TEST(split_st_DHP_member_cmpmix)
1770 CPPUNIT_TEST( split_st_DHP_member_cmpmix_stat )
1772 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp)
1773 CPPUNIT_TEST(split_dyn_RCU_GPI_base_less)
1774 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix)
1775 CPPUNIT_TEST( split_dyn_RCU_GPI_base_cmpmix_stat )
1776 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmp )
1777 CPPUNIT_TEST(split_dyn_RCU_GPI_member_less)
1778 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix)
1779 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmpmix_stat )
1780 CPPUNIT_TEST( split_st_RCU_GPI_base_cmp )
1781 CPPUNIT_TEST(split_st_RCU_GPI_base_less)
1782 CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix)
1783 CPPUNIT_TEST( split_st_RCU_GPI_base_cmpmix_stat )
1784 CPPUNIT_TEST( split_st_RCU_GPI_member_cmp )
1785 CPPUNIT_TEST(split_st_RCU_GPI_member_less)
1786 CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix)
1787 CPPUNIT_TEST( split_st_RCU_GPI_member_cmpmix_stat )
1789 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp)
1790 CPPUNIT_TEST(split_dyn_RCU_GPB_base_less)
1791 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix)
1792 CPPUNIT_TEST( split_dyn_RCU_GPB_base_cmpmix_stat )
1793 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmp )
1794 CPPUNIT_TEST(split_dyn_RCU_GPB_member_less)
1795 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix)
1796 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmpmix_stat )
1797 CPPUNIT_TEST( split_st_RCU_GPB_base_cmp )
1798 CPPUNIT_TEST(split_st_RCU_GPB_base_less)
1799 CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix)
1800 CPPUNIT_TEST( split_st_RCU_GPB_base_cmpmix_stat )
1801 CPPUNIT_TEST( split_st_RCU_GPB_member_cmp )
1802 CPPUNIT_TEST(split_st_RCU_GPB_member_less)
1803 CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix)
1804 CPPUNIT_TEST( split_st_RCU_GPB_member_cmpmix_stat )
1806 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp)
1807 CPPUNIT_TEST(split_dyn_RCU_GPT_base_less)
1808 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix)
1809 CPPUNIT_TEST( split_dyn_RCU_GPT_base_cmpmix_stat )
1810 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmp )
1811 CPPUNIT_TEST(split_dyn_RCU_GPT_member_less)
1812 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix)
1813 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmpmix_stat )
1814 CPPUNIT_TEST( split_st_RCU_GPT_base_cmp )
1815 CPPUNIT_TEST(split_st_RCU_GPT_base_less)
1816 CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix)
1817 CPPUNIT_TEST( split_st_RCU_GPT_base_cmpmix_stat )
1818 CPPUNIT_TEST( split_st_RCU_GPT_member_cmp )
1819 CPPUNIT_TEST(split_st_RCU_GPT_member_less)
1820 CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix)
1821 CPPUNIT_TEST( split_st_RCU_GPT_member_cmpmix_stat )
1823 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp)
1824 CPPUNIT_TEST(split_dyn_RCU_SHB_base_less)
1825 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix)
1826 CPPUNIT_TEST( split_dyn_RCU_SHB_base_cmpmix_stat )
1827 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmp )
1828 CPPUNIT_TEST(split_dyn_RCU_SHB_member_less)
1829 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix)
1830 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmpmix_stat )
1831 CPPUNIT_TEST( split_st_RCU_SHB_base_cmp )
1832 CPPUNIT_TEST(split_st_RCU_SHB_base_less)
1833 CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix)
1834 CPPUNIT_TEST( split_st_RCU_SHB_base_cmpmix_stat )
1835 CPPUNIT_TEST( split_st_RCU_SHB_member_cmp )
1836 CPPUNIT_TEST(split_st_RCU_SHB_member_less)
1837 CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix)
1838 CPPUNIT_TEST( split_st_RCU_SHB_member_cmpmix_stat )
1840 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp)
1841 CPPUNIT_TEST(split_dyn_RCU_SHT_base_less)
1842 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix)
1843 CPPUNIT_TEST( split_dyn_RCU_SHT_base_cmpmix_stat )
1844 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmp )
1845 CPPUNIT_TEST(split_dyn_RCU_SHT_member_less)
1846 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix)
1847 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmpmix_stat )
1848 CPPUNIT_TEST( split_st_RCU_SHT_base_cmp )
1849 CPPUNIT_TEST(split_st_RCU_SHT_base_less)
1850 CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix)
1851 CPPUNIT_TEST( split_st_RCU_SHT_base_cmpmix_stat )
1852 CPPUNIT_TEST( split_st_RCU_SHT_member_cmp )
1853 CPPUNIT_TEST(split_st_RCU_SHT_member_less)
1854 CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix)
1855 CPPUNIT_TEST( split_st_RCU_SHT_member_cmpmix_stat )
1857 CPPUNIT_TEST(split_dyn_nogc_base_cmp)
1858 CPPUNIT_TEST(split_dyn_nogc_base_less)
1859 CPPUNIT_TEST(split_dyn_nogc_base_cmpmix)
1860 CPPUNIT_TEST( split_dyn_nogc_base_cmpmix_stat )
1861 CPPUNIT_TEST( split_dyn_nogc_member_cmp )
1862 CPPUNIT_TEST(split_dyn_nogc_member_less)
1863 CPPUNIT_TEST(split_dyn_nogc_member_cmpmix)
1864 CPPUNIT_TEST( split_dyn_nogc_member_cmpmix_stat )
1865 CPPUNIT_TEST( split_st_nogc_base_cmp )
1866 CPPUNIT_TEST(split_st_nogc_base_less)
1867 CPPUNIT_TEST(split_st_nogc_base_cmpmix)
1868 CPPUNIT_TEST( split_st_nogc_base_cmpmix_stat )
1869 CPPUNIT_TEST( split_st_nogc_member_cmp )
1870 CPPUNIT_TEST(split_st_nogc_member_less)
1871 CPPUNIT_TEST(split_st_nogc_member_cmpmix)
1872 CPPUNIT_TEST( split_st_nogc_member_cmpmix_stat )
1874 CPPUNIT_TEST(split_dyn_HP_base_cmp_lazy)
1875 CPPUNIT_TEST(split_dyn_HP_base_less_lazy)
1876 CPPUNIT_TEST(split_dyn_HP_base_cmpmix_lazy)
1877 CPPUNIT_TEST( split_dyn_HP_base_cmpmix_stat_lazy )
1878 CPPUNIT_TEST( split_dyn_HP_member_cmp_lazy )
1879 CPPUNIT_TEST(split_dyn_HP_member_less_lazy)
1880 CPPUNIT_TEST(split_dyn_HP_member_cmpmix_lazy)
1881 CPPUNIT_TEST( split_dyn_HP_member_cmpmix_stat_lazy )
1882 CPPUNIT_TEST( split_st_HP_base_cmp_lazy )
1883 CPPUNIT_TEST(split_st_HP_base_less_lazy)
1884 CPPUNIT_TEST(split_st_HP_base_cmpmix_lazy)
1885 CPPUNIT_TEST( split_st_HP_base_cmpmix_stat_lazy )
1886 CPPUNIT_TEST( split_st_HP_member_cmp_lazy )
1887 CPPUNIT_TEST(split_st_HP_member_less_lazy)
1888 CPPUNIT_TEST(split_st_HP_member_cmpmix_lazy)
1889 CPPUNIT_TEST( split_st_HP_member_cmpmix_stat_lazy )
1891 CPPUNIT_TEST(split_dyn_DHP_base_cmp_lazy)
1892 CPPUNIT_TEST(split_dyn_DHP_base_less_lazy)
1893 CPPUNIT_TEST(split_dyn_DHP_base_cmpmix_lazy)
1894 CPPUNIT_TEST( split_dyn_DHP_base_cmpmix_stat_lazy )
1895 CPPUNIT_TEST( split_dyn_DHP_member_cmp_lazy )
1896 CPPUNIT_TEST(split_dyn_DHP_member_less_lazy)
1897 CPPUNIT_TEST(split_dyn_DHP_member_cmpmix_lazy)
1898 CPPUNIT_TEST( split_dyn_DHP_member_cmpmix_stat_lazy )
1899 CPPUNIT_TEST( split_st_DHP_base_cmp_lazy )
1900 CPPUNIT_TEST(split_st_DHP_base_less_lazy)
1901 CPPUNIT_TEST(split_st_DHP_base_cmpmix_lazy)
1902 CPPUNIT_TEST( split_st_DHP_base_cmpmix_stat_lazy )
1903 CPPUNIT_TEST( split_st_DHP_member_cmp_lazy )
1904 CPPUNIT_TEST(split_st_DHP_member_less_lazy)
1905 CPPUNIT_TEST(split_st_DHP_member_cmpmix_lazy)
1906 CPPUNIT_TEST( split_st_DHP_member_cmpmix_stat_lazy )
1908 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp_lazy)
1909 CPPUNIT_TEST(split_dyn_RCU_GPI_base_less_lazy)
1910 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix_lazy)
1911 CPPUNIT_TEST( split_dyn_RCU_GPI_base_cmpmix_stat_lazy )
1912 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmp_lazy )
1913 CPPUNIT_TEST(split_dyn_RCU_GPI_member_less_lazy)
1914 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix_lazy)
1915 CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmpmix_stat_lazy )
1916 CPPUNIT_TEST( split_st_RCU_GPI_base_cmp_lazy )
1917 CPPUNIT_TEST(split_st_RCU_GPI_base_less_lazy)
1918 CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix_lazy)
1919 CPPUNIT_TEST( split_st_RCU_GPI_base_cmpmix_stat_lazy )
1920 CPPUNIT_TEST( split_st_RCU_GPI_member_cmp_lazy )
1921 CPPUNIT_TEST(split_st_RCU_GPI_member_less_lazy)
1922 CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix_lazy)
1923 CPPUNIT_TEST( split_st_RCU_GPI_member_cmpmix_stat_lazy )
1925 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp_lazy)
1926 CPPUNIT_TEST(split_dyn_RCU_GPB_base_less_lazy)
1927 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix_lazy)
1928 CPPUNIT_TEST( split_dyn_RCU_GPB_base_cmpmix_stat_lazy )
1929 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmp_lazy )
1930 CPPUNIT_TEST(split_dyn_RCU_GPB_member_less_lazy)
1931 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix_lazy)
1932 CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmpmix_stat_lazy )
1933 CPPUNIT_TEST( split_st_RCU_GPB_base_cmp_lazy )
1934 CPPUNIT_TEST(split_st_RCU_GPB_base_less_lazy)
1935 CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix_lazy)
1936 CPPUNIT_TEST( split_st_RCU_GPB_base_cmpmix_stat_lazy )
1937 CPPUNIT_TEST( split_st_RCU_GPB_member_cmp_lazy )
1938 CPPUNIT_TEST(split_st_RCU_GPB_member_less_lazy)
1939 CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix_lazy)
1940 CPPUNIT_TEST( split_st_RCU_GPB_member_cmpmix_stat_lazy )
1942 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp_lazy)
1943 CPPUNIT_TEST(split_dyn_RCU_GPT_base_less_lazy)
1944 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix_lazy)
1945 CPPUNIT_TEST( split_dyn_RCU_GPT_base_cmpmix_stat_lazy )
1946 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmp_lazy )
1947 CPPUNIT_TEST(split_dyn_RCU_GPT_member_less_lazy)
1948 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix_lazy)
1949 CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmpmix_stat_lazy )
1950 CPPUNIT_TEST( split_st_RCU_GPT_base_cmp_lazy )
1951 CPPUNIT_TEST(split_st_RCU_GPT_base_less_lazy)
1952 CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix_lazy)
1953 CPPUNIT_TEST( split_st_RCU_GPT_base_cmpmix_stat_lazy )
1954 CPPUNIT_TEST( split_st_RCU_GPT_member_cmp_lazy )
1955 CPPUNIT_TEST(split_st_RCU_GPT_member_less_lazy)
1956 CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix_lazy)
1957 CPPUNIT_TEST( split_st_RCU_GPT_member_cmpmix_stat_lazy )
1959 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp_lazy)
1960 CPPUNIT_TEST(split_dyn_RCU_SHB_base_less_lazy)
1961 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix_lazy)
1962 CPPUNIT_TEST( split_dyn_RCU_SHB_base_cmpmix_stat_lazy )
1963 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmp_lazy )
1964 CPPUNIT_TEST(split_dyn_RCU_SHB_member_less_lazy)
1965 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix_lazy)
1966 CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmpmix_stat_lazy )
1967 CPPUNIT_TEST( split_st_RCU_SHB_base_cmp_lazy )
1968 CPPUNIT_TEST(split_st_RCU_SHB_base_less_lazy)
1969 CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix_lazy)
1970 CPPUNIT_TEST( split_st_RCU_SHB_base_cmpmix_stat_lazy )
1971 CPPUNIT_TEST( split_st_RCU_SHB_member_cmp_lazy )
1972 CPPUNIT_TEST(split_st_RCU_SHB_member_less_lazy)
1973 CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix_lazy)
1974 CPPUNIT_TEST( split_st_RCU_SHB_member_cmpmix_stat_lazy )
1976 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp_lazy)
1977 CPPUNIT_TEST(split_dyn_RCU_SHT_base_less_lazy)
1978 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix_lazy)
1979 CPPUNIT_TEST( split_dyn_RCU_SHT_base_cmpmix_stat_lazy )
1980 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmp_lazy )
1981 CPPUNIT_TEST(split_dyn_RCU_SHT_member_less_lazy)
1982 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix_lazy)
1983 CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmpmix_stat_lazy )
1984 CPPUNIT_TEST( split_st_RCU_SHT_base_cmp_lazy )
1985 CPPUNIT_TEST(split_st_RCU_SHT_base_less_lazy)
1986 CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix_lazy)
1987 CPPUNIT_TEST( split_st_RCU_SHT_base_cmpmix_stat_lazy )
1988 CPPUNIT_TEST( split_st_RCU_SHT_member_cmp_lazy )
1989 CPPUNIT_TEST(split_st_RCU_SHT_member_less_lazy)
1990 CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix_lazy)
1991 CPPUNIT_TEST( split_st_RCU_SHT_member_cmpmix_stat_lazy )
1993 CPPUNIT_TEST(split_dyn_nogc_base_cmp_lazy)
1994 CPPUNIT_TEST(split_dyn_nogc_base_less_lazy)
1995 CPPUNIT_TEST(split_dyn_nogc_base_cmpmix_lazy)
1996 CPPUNIT_TEST( split_dyn_nogc_base_cmpmix_stat_lazy )
1997 CPPUNIT_TEST( split_dyn_nogc_member_cmp_lazy )
1998 CPPUNIT_TEST(split_dyn_nogc_member_less_lazy)
1999 CPPUNIT_TEST(split_dyn_nogc_member_cmpmix_lazy)
2000 CPPUNIT_TEST( split_dyn_nogc_member_cmpmix_stat_lazy )
2001 CPPUNIT_TEST( split_st_nogc_base_cmp_lazy )
2002 CPPUNIT_TEST(split_st_nogc_base_less_lazy)
2003 CPPUNIT_TEST(split_st_nogc_base_cmpmix_lazy)
2004 CPPUNIT_TEST( split_st_nogc_base_cmpmix_stat_lazy )
2005 CPPUNIT_TEST( split_st_nogc_member_cmp_lazy )
2006 CPPUNIT_TEST(split_st_nogc_member_less_lazy)
2007 CPPUNIT_TEST(split_st_nogc_member_cmpmix_lazy)
2008 CPPUNIT_TEST( split_st_nogc_member_cmpmix_stat_lazy )
2009 CPPUNIT_TEST_SUITE_END()
2015 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_SET_H