3 #include "cppunit/cppunit_proxy.h"
4 #include "size_check.h"
6 #include <cds/opt/hash.h>
7 #include <functional> // ref
8 #include <algorithm> // random_shuffle
10 // forward declaration
11 namespace cds { namespace intrusive {} }
14 using misc::check_size;
16 namespace ci = cds::intrusive;
17 namespace co = cds::opt;
19 class IntrusiveHashSetHdrTest: public CppUnitMini::TestCase
24 unsigned int nDisposeCount ; // count of disposer calling
25 unsigned int nFindCount ; // count of find-functor calling
26 unsigned int nEnsureNewCount;
27 unsigned int nEnsureCount;
28 mutable unsigned int nEraseCount;
32 memset( this, 0, sizeof(*this));
36 template <typename Node>
48 base_int_item(int key, int val)
53 base_int_item(const base_int_item& v )
65 template <typename Node>
66 struct member_int_item: public stat
78 member_int_item(int key, int val)
83 member_int_item(const member_int_item& v )
96 size_t operator()( int i ) const
98 return co::v::hash<int>()( i );
100 template <typename Item>
101 size_t operator()( const Item& i ) const
103 return (*this)( i.key() );
107 struct simple_item_counter {
110 simple_item_counter()
129 operator size_t() const
137 template <typename T>
140 bool operator ()(const T& v1, const T& v2 ) const
142 return v1.key() < v2.key();
145 template <typename Q>
146 bool operator ()(const T& v1, const Q& v2 ) const
148 return v1.key() < v2;
151 template <typename Q>
152 bool operator ()(const Q& v1, const T& v2 ) const
154 return v1 < v2.key();
158 template <typename T>
160 int operator ()(const T& v1, const T& v2 ) const
162 if ( v1.key() < v2.key() )
164 return v1.key() > v2.key() ? 1 : 0;
167 template <typename Q>
168 int operator ()(const T& v1, const Q& v2 ) const
172 return v1.key() > v2 ? 1 : 0;
175 template <typename Q>
176 int operator ()(const Q& v1, const T& v2 ) const
180 return v1 > v2.key() ? 1 : 0;
184 struct faked_disposer
186 template <typename T>
187 void operator ()( T * p )
195 template <typename Item, typename T>
196 void operator()( Item& item, T& val )
202 struct insert_functor
204 template <typename Item>
205 void operator()(Item& item )
207 item.nVal = item.nKey * 100;
211 struct ensure_functor
213 template <typename Item>
214 void operator()( bool bNew, Item& item, Item& val )
217 ++item.nEnsureNewCount;
225 template <typename Item>
226 void operator()( Item const& item )
233 void test_int_with( Set& s )
235 typedef typename Set::value_type value_type;
237 value_type v1( 10, 50 );
238 value_type v2( 5, 25 );
239 value_type v3( 20, 100 );
242 CPPUNIT_ASSERT( s.empty() );
243 CPPUNIT_ASSERT( check_size( s, 0 ));
246 CPPUNIT_ASSERT( !s.find( v1.key() ));
247 CPPUNIT_ASSERT( s.insert( v1 ));
248 CPPUNIT_ASSERT( s.find( v1.key() ));
249 CPPUNIT_ASSERT( check_size( s, 1 ));
250 CPPUNIT_ASSERT( !s.empty() );
252 CPPUNIT_ASSERT( !s.find_with( v2.key(), less<value_type>() ));
253 CPPUNIT_ASSERT( s.insert( v2 ));
254 CPPUNIT_ASSERT( v2.nFindCount == 0 );
255 CPPUNIT_ASSERT( s.find_with( key = v2.key(), less<value_type>(), find_functor() ));
256 CPPUNIT_ASSERT( v2.nFindCount == 1 );
258 CPPUNIT_ASSERT( check_size( s, 2 ));
259 CPPUNIT_ASSERT( !s.empty() );
264 CPPUNIT_ASSERT( !s.find( v3 ));
265 CPPUNIT_ASSERT( v3.nVal != v3.nKey * 100 );
266 CPPUNIT_ASSERT( s.insert( v3, std::ref(fi) ));
267 CPPUNIT_ASSERT( v3.nVal == v3.nKey * 100 );
268 CPPUNIT_ASSERT( v3.nFindCount == 0 );
269 CPPUNIT_ASSERT( s.find( v3, std::ref(ff) ));
270 CPPUNIT_ASSERT( v3.nFindCount == 1 );
272 CPPUNIT_ASSERT( check_size( s, 3 ));
273 CPPUNIT_ASSERT( !s.empty() );
277 CPPUNIT_ASSERT( s.unlink( v1 ));
278 CPPUNIT_ASSERT( !s.find( v1 ));
279 CPPUNIT_ASSERT( s.find( v2 ));
280 CPPUNIT_ASSERT( s.find( v3 ));
281 CPPUNIT_ASSERT( check_size( s, 2 ));
283 CPPUNIT_ASSERT( !s.unlink( v1 ));
284 CPPUNIT_ASSERT( !s.find( v1 ));
285 CPPUNIT_ASSERT( check_size( s, 2 ));
287 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>() ));
288 CPPUNIT_ASSERT( s.unlink( v3 ));
289 CPPUNIT_ASSERT( !s.find_with( v3, less<value_type>() ));
290 CPPUNIT_ASSERT( check_size( s, 1 ));
292 CPPUNIT_ASSERT( s.find( v2 ));
293 CPPUNIT_ASSERT( s.unlink( v2 ));
294 CPPUNIT_ASSERT( !s.find( v1 ));
295 CPPUNIT_ASSERT( !s.find( v2 ));
296 CPPUNIT_ASSERT( !s.find( v3 ));
297 CPPUNIT_ASSERT( check_size( s, 0 ));
298 CPPUNIT_ASSERT( s.empty() );
300 Set::gc::force_dispose();
301 // unlink function calls disposer
302 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
303 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
304 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
309 std::pair<bool, bool> ret = s.ensure( v1, f );
310 CPPUNIT_ASSERT( ret.first );
311 CPPUNIT_ASSERT( ret.second );
312 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
313 CPPUNIT_ASSERT( v1.nEnsureCount == 0 );
314 CPPUNIT_ASSERT( check_size( s, 1 ));
316 ret = s.ensure( v2, f );
317 CPPUNIT_ASSERT( ret.first );
318 CPPUNIT_ASSERT( ret.second );
319 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
320 CPPUNIT_ASSERT( v2.nEnsureCount == 0 );
321 CPPUNIT_ASSERT( check_size( s, 2 ));
323 ret = s.ensure( v3, f );
324 CPPUNIT_ASSERT( ret.first );
325 CPPUNIT_ASSERT( ret.second );
326 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
327 CPPUNIT_ASSERT( v3.nEnsureCount == 0 );
328 CPPUNIT_ASSERT( check_size( s, 3 ));
330 CPPUNIT_ASSERT( s.find( v1 ));
331 CPPUNIT_ASSERT( s.find( v2 ));
332 CPPUNIT_ASSERT( s.find( v3 ));
334 ret = s.ensure( v1, f );
335 CPPUNIT_ASSERT( ret.first );
336 CPPUNIT_ASSERT( !ret.second );
337 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
338 CPPUNIT_ASSERT( v1.nEnsureCount == 1 );
339 CPPUNIT_ASSERT( check_size( s, 3 ));
341 ret = s.ensure( v2, f );
342 CPPUNIT_ASSERT( ret.first );
343 CPPUNIT_ASSERT( !ret.second );
344 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
345 CPPUNIT_ASSERT( v2.nEnsureCount == 1 );
346 CPPUNIT_ASSERT( check_size( s, 3 ));
348 ret = s.ensure( v3, f );
349 CPPUNIT_ASSERT( ret.first );
350 CPPUNIT_ASSERT( !ret.second );
351 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
352 CPPUNIT_ASSERT( v3.nEnsureCount == 1 );
353 CPPUNIT_ASSERT( check_size( s, 3 ));
355 CPPUNIT_ASSERT( s.find( v1 ));
356 CPPUNIT_ASSERT( s.find( v2 ));
357 CPPUNIT_ASSERT( s.find( v3 ));
361 CPPUNIT_ASSERT( s.find( v1 ));
362 CPPUNIT_ASSERT( s.find_with( v2, less<value_type>() ));
363 CPPUNIT_ASSERT( s.find( v3 ));
364 CPPUNIT_ASSERT( check_size( s, 3 ));
365 CPPUNIT_ASSERT( !s.empty() );
367 CPPUNIT_ASSERT( s.erase( v1 ));
368 CPPUNIT_ASSERT( !s.find( v1 ));
369 CPPUNIT_ASSERT( s.find( v2 ));
370 CPPUNIT_ASSERT( s.find( v3 ));
371 CPPUNIT_ASSERT( check_size( s, 2 ));
372 CPPUNIT_ASSERT( !s.empty() );
374 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
375 CPPUNIT_ASSERT( !s.erase( v1, erase_functor() ));
376 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
377 CPPUNIT_ASSERT( !s.find( v1 ));
378 CPPUNIT_ASSERT( s.find( v2 ));
379 CPPUNIT_ASSERT( s.find( v3 ));
380 CPPUNIT_ASSERT( check_size( s, 2 ));
381 CPPUNIT_ASSERT( !s.empty() );
383 CPPUNIT_ASSERT( v2.nEraseCount == 0 );
384 CPPUNIT_ASSERT( s.erase_with( v2.key(), less<value_type>(), erase_functor() ));
385 CPPUNIT_ASSERT( v2.nEraseCount == 1 );
386 CPPUNIT_ASSERT( !s.find( v1 ));
387 CPPUNIT_ASSERT( !s.find( v2 ));
388 CPPUNIT_ASSERT( s.find( v3 ));
389 CPPUNIT_ASSERT( check_size( s, 1 ));
390 CPPUNIT_ASSERT( !s.empty() );
392 CPPUNIT_ASSERT( !s.erase( v2.key() ));
393 CPPUNIT_ASSERT( !s.find( v1 ));
394 CPPUNIT_ASSERT( !s.find( v2 ));
395 CPPUNIT_ASSERT( s.find( v3 ));
396 CPPUNIT_ASSERT( check_size( s, 1 ));
397 CPPUNIT_ASSERT( !s.empty() );
399 CPPUNIT_ASSERT( s.erase( v3 ));
400 CPPUNIT_ASSERT( !s.find( v1 ));
401 CPPUNIT_ASSERT( !s.find( v2 ));
402 CPPUNIT_ASSERT( !s.find( v3 ));
403 CPPUNIT_ASSERT( check_size( s, 0 ));
404 CPPUNIT_ASSERT( s.empty() );
407 Set::gc::force_dispose();
408 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
409 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
410 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
412 CPPUNIT_ASSERT( s.empty() );
413 CPPUNIT_ASSERT( s.insert( v1 ));
414 CPPUNIT_ASSERT( s.insert( v3 ));
415 CPPUNIT_ASSERT( check_size( s, 2 ));
416 CPPUNIT_ASSERT( !s.empty() );
420 CPPUNIT_ASSERT( !s.unlink( v ) );
423 CPPUNIT_ASSERT( s.unlink( v3 ) );
424 CPPUNIT_ASSERT( s.find( v1 ));
425 CPPUNIT_ASSERT( !s.find( v2 ));
426 CPPUNIT_ASSERT( !s.find( v3 ));
427 CPPUNIT_ASSERT( check_size( s, 1 ));
428 CPPUNIT_ASSERT( !s.empty() );
430 CPPUNIT_ASSERT( !s.unlink( v3 ));
431 CPPUNIT_ASSERT( s.find( v1 ));
432 CPPUNIT_ASSERT( !s.find( v2 ));
433 CPPUNIT_ASSERT( !s.find( v3 ));
434 CPPUNIT_ASSERT( check_size( s, 1 ));
435 CPPUNIT_ASSERT( !s.empty() );
437 CPPUNIT_ASSERT( s.unlink( v1 ));
438 CPPUNIT_ASSERT( !s.find( v1 ));
439 CPPUNIT_ASSERT( !s.find( v2 ));
440 CPPUNIT_ASSERT( !s.find( v3 ));
441 CPPUNIT_ASSERT( check_size( s, 0 ));
442 CPPUNIT_ASSERT( s.empty() );
444 CPPUNIT_ASSERT( !s.unlink( v2 ));
445 CPPUNIT_ASSERT( !s.find( v1 ));
446 CPPUNIT_ASSERT( !s.find( v2 ));
447 CPPUNIT_ASSERT( !s.find( v3 ));
448 CPPUNIT_ASSERT( check_size( s, 0 ));
449 CPPUNIT_ASSERT( s.empty() );
451 Set::gc::force_dispose();
452 CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
453 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
454 CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
457 CPPUNIT_ASSERT( s.insert( v1 ));
458 CPPUNIT_ASSERT( s.insert( v3 ));
459 CPPUNIT_ASSERT( s.insert( v2 ));
462 CPPUNIT_ASSERT( s.empty() );
463 CPPUNIT_ASSERT( check_size( s, 0 ));
464 Set::gc::force_dispose();
465 CPPUNIT_CHECK( v1.nDisposeCount == 4 );
466 CPPUNIT_CHECK( v2.nDisposeCount == 3 );
467 CPPUNIT_CHECK( v3.nDisposeCount == 4 );
484 typedef typename Set::value_type value_type;
485 typedef typename Set::guarded_ptr guarded_ptr;
487 static size_t const nLimit = 1024;
488 value_type arrItems[nLimit];
490 for ( size_t i = 0; i < nLimit; ++i )
492 std::random_shuffle( arr, arr + nLimit );
494 for ( size_t i = 0; i < nLimit; ++i ) {
495 arrItems[i].nKey = arr[i];
496 arrItems[i].nVal = arr[i] * 2;
500 for ( size_t i = 0; i < nLimit; ++i )
501 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
504 for ( size_t i = 0; i < nLimit; i += 2 ) {
506 CPPUNIT_ASSERT( s.get( gp, nKey ));
507 CPPUNIT_ASSERT( !gp.empty());
508 CPPUNIT_CHECK( gp->nKey == nKey );
509 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
511 CPPUNIT_ASSERT( s.extract( gp, nKey ));
512 CPPUNIT_ASSERT( !gp.empty() );
513 CPPUNIT_CHECK( gp->nKey == nKey );
514 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
517 CPPUNIT_CHECK( !s.get( gp, nKey ));
518 CPPUNIT_ASSERT( gp.empty() );
519 CPPUNIT_CHECK( !s.extract( gp, nKey ));
520 CPPUNIT_CHECK( gp.empty() );
523 CPPUNIT_ASSERT( s.get_with( gp, nKey, less<value_type>() ));
524 CPPUNIT_CHECK( gp->nKey == nKey );
525 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
527 CPPUNIT_ASSERT( s.extract_with( gp, nKey, less<value_type>() ));
528 CPPUNIT_ASSERT( !gp.empty() );
529 CPPUNIT_CHECK( gp->nKey == nKey );
530 CPPUNIT_CHECK( gp->nVal == nKey * 2 );
533 CPPUNIT_CHECK( !s.get_with( gp, nKey, less<value_type>() ));
534 CPPUNIT_CHECK( gp.empty());
535 CPPUNIT_CHECK( !s.extract_with( gp, nKey, less<value_type>() ));
536 CPPUNIT_CHECK( gp.empty());
538 CPPUNIT_CHECK( s.empty() );
539 CPPUNIT_CHECK( check_size( s, 0 ));
541 CPPUNIT_CHECK( !s.get( gp, 100 ));
542 CPPUNIT_CHECK( !s.extract( gp, 100 ));
543 CPPUNIT_CHECK( gp.empty() );
545 Set::gc::force_dispose();
552 typedef typename Set::value_type value_type;
553 typedef typename Set::iterator set_iterator;
554 typedef typename Set::iterator const_set_iterator;
560 for ( int i = 0; unsigned(i) < sizeof(v)/sizeof(v[0]); ++i ) {
564 CPPUNIT_ASSERT( s.insert( v[i] ));
568 for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
569 CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
570 it->nVal = (*it).nKey;
573 CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
576 for ( const_set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
577 CPPUNIT_ASSERT( (*it).nKey == it->nVal );
580 CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
582 for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
583 CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
587 Set::gc::force_dispose();
589 for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
590 CPPUNIT_ASSERT( v[i].nDisposeCount == 1 );
597 typedef typename Set::value_type value_type;
599 value_type v1( 10, 50 );
600 value_type v2( 5, 25 );
601 value_type v3( 20, 100 );
609 CPPUNIT_ASSERT( s.empty() );
610 CPPUNIT_ASSERT( check_size( s, 0 ));
613 CPPUNIT_ASSERT( s.find( v1.key() ) == nullptr );
614 CPPUNIT_ASSERT( s.insert( v1 ));
615 CPPUNIT_ASSERT( s.find_with( v1.key(), less<value_type>() ) == &v1 );
616 CPPUNIT_ASSERT( check_size( s, 1 ));
617 CPPUNIT_ASSERT( !s.empty() );
619 CPPUNIT_ASSERT( s.find( v2.key() ) == nullptr );
620 CPPUNIT_ASSERT( s.insert( v2 ));
621 CPPUNIT_ASSERT( v2.nFindCount == 0 );
622 CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
623 CPPUNIT_ASSERT( v2.nFindCount == 1 );
625 CPPUNIT_ASSERT( check_size( s, 2 ));
626 CPPUNIT_ASSERT( !s.empty() );
630 CPPUNIT_ASSERT( s.find( v3 ) == nullptr );
631 CPPUNIT_ASSERT( s.insert( v3 ));
632 CPPUNIT_ASSERT( v3.nFindCount == 0 );
633 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
634 CPPUNIT_ASSERT( v3.nFindCount == 1 );
636 CPPUNIT_ASSERT( check_size( s, 3 ));
637 CPPUNIT_ASSERT( !s.empty() );
641 // s.clear() ; // not all set supports clear() method
642 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
643 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
644 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
652 std::pair<bool, bool> ret = s.ensure( v1, f );
653 CPPUNIT_ASSERT( ret.first );
654 CPPUNIT_ASSERT( ret.second );
655 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
656 CPPUNIT_ASSERT( v1.nEnsureCount == 0 );
657 CPPUNIT_ASSERT( check_size( s, 1 ));
659 ret = s.ensure( v2, f );
660 CPPUNIT_ASSERT( ret.first );
661 CPPUNIT_ASSERT( ret.second );
662 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
663 CPPUNIT_ASSERT( v2.nEnsureCount == 0 );
664 CPPUNIT_ASSERT( check_size( s, 2 ));
666 ret = s.ensure( v3, f );
667 CPPUNIT_ASSERT( ret.first );
668 CPPUNIT_ASSERT( ret.second );
669 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
670 CPPUNIT_ASSERT( v3.nEnsureCount == 0 );
671 CPPUNIT_ASSERT( check_size( s, 3 ));
673 CPPUNIT_ASSERT( s.find( v1 ) == &v1 );
674 CPPUNIT_ASSERT( s.find( v2 ) == &v2 );
675 CPPUNIT_ASSERT( s.find( v3 ) == &v3 );
677 ret = s.ensure( v1, f );
678 CPPUNIT_ASSERT( ret.first );
679 CPPUNIT_ASSERT( !ret.second );
680 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
681 CPPUNIT_ASSERT( v1.nEnsureCount == 1 );
682 CPPUNIT_ASSERT( check_size( s, 3 ));
684 ret = s.ensure( v2, f );
685 CPPUNIT_ASSERT( ret.first );
686 CPPUNIT_ASSERT( !ret.second );
687 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
688 CPPUNIT_ASSERT( v2.nEnsureCount == 1 );
689 CPPUNIT_ASSERT( check_size( s, 3 ));
691 ret = s.ensure( v3, f );
692 CPPUNIT_ASSERT( ret.first );
693 CPPUNIT_ASSERT( !ret.second );
694 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
695 CPPUNIT_ASSERT( v3.nEnsureCount == 1 );
696 CPPUNIT_ASSERT( check_size( s, 3 ));
698 CPPUNIT_ASSERT( s.find( v1 ) == &v1 );
699 CPPUNIT_ASSERT( s.find( v2 ) == &v2 );
700 CPPUNIT_ASSERT( s.find( v3 ) == &v3 );
704 // dispose on destruct test
705 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
706 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
707 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
714 #define ASSERT_RCU_FIND( _expr ) { rcu_lock rl; CPPUNIT_ASSERT( _expr ); }
716 void test_rcu_int_with( Set& s )
718 typedef typename Set::value_type value_type;
719 typedef typename Set::gc::scoped_lock rcu_lock;
721 value_type v1( 10, 50 );
722 value_type v2( 5, 25 );
723 value_type v3( 20, 100 );
724 value_type v4( 40, 400 );
727 CPPUNIT_ASSERT( s.empty() );
728 CPPUNIT_ASSERT( check_size( s, 0 ));
732 ASSERT_RCU_FIND( !s.find_with( v1.key(), less<value_type>() ));
733 CPPUNIT_ASSERT( s.insert( v1 ));
734 ASSERT_RCU_FIND( s.find_with( v1.key(), less<value_type>()) );
735 CPPUNIT_ASSERT( check_size( s, 1 ));
736 CPPUNIT_ASSERT( !s.empty() );
738 ASSERT_RCU_FIND( !s.find( v2.key() ));
739 CPPUNIT_ASSERT( s.insert( v2 ));
740 CPPUNIT_ASSERT( v2.nFindCount == 0 );
741 CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
742 CPPUNIT_ASSERT( v2.nFindCount == 1 );
744 CPPUNIT_ASSERT( check_size( s, 2 ));
745 CPPUNIT_ASSERT( !s.empty() );
750 ASSERT_RCU_FIND( !s.find( v3 ));
751 CPPUNIT_ASSERT( v3.nVal != v3.nKey * 100 );
752 CPPUNIT_ASSERT( s.insert( v3, std::ref(fi) ));
753 CPPUNIT_ASSERT( v3.nVal == v3.nKey * 100 );
754 CPPUNIT_ASSERT( v3.nFindCount == 0 );
755 CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
756 CPPUNIT_ASSERT( v3.nFindCount == 1 );
758 CPPUNIT_ASSERT( check_size( s, 3 ));
759 CPPUNIT_ASSERT( !s.empty() );
763 CPPUNIT_ASSERT( s.unlink( v1 ));
764 ASSERT_RCU_FIND( !s.find( v1 ));
765 ASSERT_RCU_FIND( s.find( v2 ));
766 ASSERT_RCU_FIND( s.find( v3 ));
767 CPPUNIT_ASSERT( check_size( s, 2 ));
769 CPPUNIT_ASSERT( !s.unlink( v1 ));
770 ASSERT_RCU_FIND( !s.find( v1 ));
771 CPPUNIT_ASSERT( check_size( s, 2 ));
773 ASSERT_RCU_FIND( s.find( v3 ) );
774 CPPUNIT_ASSERT( s.unlink( v3 ));
775 ASSERT_RCU_FIND( !s.find( v3 ));
776 CPPUNIT_ASSERT( check_size( s, 1 ));
778 ASSERT_RCU_FIND( s.find( v2 ));
779 CPPUNIT_ASSERT( s.unlink( v2 ));
780 ASSERT_RCU_FIND( !s.find( v1 ));
781 ASSERT_RCU_FIND( !s.find( v2 ));
782 ASSERT_RCU_FIND( !s.find( v3 ));
783 CPPUNIT_ASSERT( check_size( s, 0 ));
784 CPPUNIT_ASSERT( s.empty() );
786 Set::gc::force_dispose();
787 // unlink function calls disposer
788 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
789 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
790 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
795 std::pair<bool, bool> ret = s.ensure( v1, f );
796 CPPUNIT_ASSERT( ret.first );
797 CPPUNIT_ASSERT( ret.second );
798 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
799 CPPUNIT_ASSERT( v1.nEnsureCount == 0 );
800 CPPUNIT_ASSERT( check_size( s, 1 ));
802 ret = s.ensure( v2, f );
803 CPPUNIT_ASSERT( ret.first );
804 CPPUNIT_ASSERT( ret.second );
805 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
806 CPPUNIT_ASSERT( v2.nEnsureCount == 0 );
807 CPPUNIT_ASSERT( check_size( s, 2 ));
809 ret = s.ensure( v3, f );
810 CPPUNIT_ASSERT( ret.first );
811 CPPUNIT_ASSERT( ret.second );
812 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
813 CPPUNIT_ASSERT( v3.nEnsureCount == 0 );
814 CPPUNIT_ASSERT( check_size( s, 3 ));
816 ASSERT_RCU_FIND( s.find( v1 ));
817 ASSERT_RCU_FIND( s.find( v2 ));
818 ASSERT_RCU_FIND( s.find( v3 ));
820 ret = s.ensure( v1, f );
821 CPPUNIT_ASSERT( ret.first );
822 CPPUNIT_ASSERT( !ret.second );
823 CPPUNIT_ASSERT( v1.nEnsureNewCount == 1 );
824 CPPUNIT_ASSERT( v1.nEnsureCount == 1 );
825 CPPUNIT_ASSERT( check_size( s, 3 ));
827 ret = s.ensure( v2, f );
828 CPPUNIT_ASSERT( ret.first );
829 CPPUNIT_ASSERT( !ret.second );
830 CPPUNIT_ASSERT( v2.nEnsureNewCount == 1 );
831 CPPUNIT_ASSERT( v2.nEnsureCount == 1 );
832 CPPUNIT_ASSERT( check_size( s, 3 ));
834 ret = s.ensure( v3, f );
835 CPPUNIT_ASSERT( ret.first );
836 CPPUNIT_ASSERT( !ret.second );
837 CPPUNIT_ASSERT( v3.nEnsureNewCount == 1 );
838 CPPUNIT_ASSERT( v3.nEnsureCount == 1 );
839 CPPUNIT_ASSERT( check_size( s, 3 ));
841 ASSERT_RCU_FIND( s.find( v1 ) );
842 ASSERT_RCU_FIND( s.find( v2 ));
843 ASSERT_RCU_FIND( s.find( v3 ));
847 ASSERT_RCU_FIND( s.find( v1 ));
848 ASSERT_RCU_FIND( s.find_with( v2, less<value_type>() ));
849 ASSERT_RCU_FIND( s.find( v3 ));
850 CPPUNIT_ASSERT( check_size( s, 3 ));
851 CPPUNIT_ASSERT( !s.empty() );
853 CPPUNIT_ASSERT( v1.nEraseCount == 0 );
854 CPPUNIT_ASSERT( s.erase_with( v1, less<value_type>(), erase_functor() ));
855 CPPUNIT_ASSERT( v1.nEraseCount == 1 );
856 ASSERT_RCU_FIND( !s.find( v1 ));
857 ASSERT_RCU_FIND( s.find( v2 ) );
858 ASSERT_RCU_FIND( s.find( v3 ) );
859 CPPUNIT_ASSERT( check_size( s, 2 ));
860 CPPUNIT_ASSERT( !s.empty() );
862 CPPUNIT_ASSERT( !s.erase( v1 ));
863 ASSERT_RCU_FIND( !s.find( v1 ));
864 ASSERT_RCU_FIND( s.find( v2 ));
865 ASSERT_RCU_FIND( s.find( v3 ) );
866 CPPUNIT_ASSERT( check_size( s, 2 ));
867 CPPUNIT_ASSERT( !s.empty() );
869 ASSERT_RCU_FIND( !s.find( v4 ));
870 CPPUNIT_ASSERT( s.insert(v4));
871 ASSERT_RCU_FIND( s.find( v4.key() ));
872 CPPUNIT_ASSERT( s.erase_with( v4.key(), less<value_type>() ));
873 ASSERT_RCU_FIND( !s.find( v4.key() ));
875 CPPUNIT_ASSERT( s.erase( v2.key() ));
876 ASSERT_RCU_FIND( !s.find( v1 ));
877 ASSERT_RCU_FIND( !s.find( v2 ));
878 ASSERT_RCU_FIND( s.find( v3 ) );
879 CPPUNIT_ASSERT( check_size( s, 1 ));
880 CPPUNIT_ASSERT( !s.empty() );
882 CPPUNIT_ASSERT( !s.erase( v2.key() ));
883 ASSERT_RCU_FIND( !s.find( v1 ));
884 ASSERT_RCU_FIND( !s.find( v2 ));
885 ASSERT_RCU_FIND( s.find( v3 ) );
886 CPPUNIT_ASSERT( check_size( s, 1 ));
887 CPPUNIT_ASSERT( !s.empty() );
889 CPPUNIT_ASSERT( v3.nEraseCount == 0 );
890 CPPUNIT_ASSERT( s.erase( v3, erase_functor() ));
891 CPPUNIT_ASSERT( v3.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, 0 ));
896 CPPUNIT_ASSERT( s.empty() );
899 Set::gc::force_dispose();
900 CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
901 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
902 CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
903 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
905 CPPUNIT_ASSERT( s.empty() );
906 CPPUNIT_ASSERT( s.insert( v1 ));
907 CPPUNIT_ASSERT( s.insert( v3 ));
908 CPPUNIT_ASSERT( check_size( s, 2 ));
909 CPPUNIT_ASSERT( !s.empty() );
913 CPPUNIT_ASSERT( !s.unlink( v ) );
916 CPPUNIT_ASSERT( s.unlink( v3 ) );
917 ASSERT_RCU_FIND( s.find( v1 ));
918 ASSERT_RCU_FIND( !s.find( v2 ));
919 ASSERT_RCU_FIND( !s.find( v3 ));
920 CPPUNIT_ASSERT( check_size( s, 1 ));
921 CPPUNIT_ASSERT( !s.empty() );
923 CPPUNIT_ASSERT( !s.unlink( v3 ));
924 ASSERT_RCU_FIND( s.find( v1 ));
925 ASSERT_RCU_FIND( !s.find( v2 ));
926 ASSERT_RCU_FIND( !s.find( v3 ));
927 CPPUNIT_ASSERT( check_size( s, 1 ));
928 CPPUNIT_ASSERT( !s.empty() );
930 CPPUNIT_ASSERT( s.unlink( v1 ));
931 ASSERT_RCU_FIND( !s.find( v1 ));
932 ASSERT_RCU_FIND( !s.find( v2 ));
933 ASSERT_RCU_FIND( !s.find( v3 ));
934 CPPUNIT_ASSERT( check_size( s, 0 ));
935 CPPUNIT_ASSERT( s.empty() );
937 CPPUNIT_ASSERT( !s.unlink( v2 ));
938 ASSERT_RCU_FIND( !s.find( v1 ));
939 ASSERT_RCU_FIND( !s.find( v2 ));
940 ASSERT_RCU_FIND( !s.find( v3 ));
941 CPPUNIT_ASSERT( check_size( s, 0 ));
942 CPPUNIT_ASSERT( s.empty() );
944 Set::gc::force_dispose();
945 CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
946 CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
947 CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
948 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
951 CPPUNIT_ASSERT( s.insert( v1 ));
952 CPPUNIT_ASSERT( s.insert( v3 ));
953 CPPUNIT_ASSERT( s.insert( v2 ));
956 Set::gc::force_dispose();
957 CPPUNIT_ASSERT( v1.nDisposeCount == 4 );
958 CPPUNIT_ASSERT( v2.nDisposeCount == 3 );
959 CPPUNIT_ASSERT( v3.nDisposeCount == 4 );
960 CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
962 #undef ASSERT_RCU_FIND
969 test_rcu_int_with( s );
976 typedef typename Set::gc rcu;
977 typedef typename Set::value_type value_type;
978 typedef typename Set::rcu_lock rcu_lock;
980 typename Set::exempt_ptr ep;
983 static size_t const nLimit = 1024;
984 value_type arrItems[nLimit];
986 for ( size_t i = 0; i < nLimit; ++i )
988 std::random_shuffle( arr, arr + nLimit );
990 for ( size_t i = 0; i < nLimit; ++i ) {
991 arrItems[i].nKey = arr[i];
992 arrItems[i].nVal = arr[i] * 2;
996 for ( size_t i = 0; i < nLimit; ++i )
997 CPPUNIT_ASSERT( s.insert( arrItems[i] ));
999 for ( size_t i = 0; i < nLimit; i += 2 ) {
1004 pVal = s.get( nKey );
1005 CPPUNIT_ASSERT( pVal != nullptr );
1006 CPPUNIT_CHECK( pVal->nKey == nKey );
1007 CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
1009 CPPUNIT_ASSERT( s.extract( ep, nKey ));
1010 CPPUNIT_ASSERT( !ep.empty() );
1011 CPPUNIT_CHECK( pVal->nKey == ep->nKey );
1012 CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
1017 CPPUNIT_CHECK( s.get( nKey ) == nullptr );
1018 CPPUNIT_CHECK( !s.extract( ep, nKey ));
1019 CPPUNIT_CHECK( ep.empty() );
1022 pVal = s.get_with( nKey, less<value_type>() );
1023 CPPUNIT_ASSERT( pVal != nullptr );
1024 CPPUNIT_CHECK( pVal->nKey == nKey );
1025 CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
1027 CPPUNIT_ASSERT( s.extract_with( ep, nKey, less<value_type>() ));
1028 CPPUNIT_ASSERT( !ep.empty() );
1029 CPPUNIT_CHECK( pVal->nKey == ep->nKey );
1030 CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
1035 CPPUNIT_CHECK( s.get_with( nKey, less<value_type>() ) == nullptr );
1036 CPPUNIT_CHECK( !s.extract_with( ep, nKey, less<value_type>() ));
1037 CPPUNIT_CHECK( ep.empty() );
1040 CPPUNIT_CHECK( s.empty() );
1041 CPPUNIT_CHECK( check_size( s, 0 ));
1044 CPPUNIT_CHECK( s.get( 100 ) == nullptr );
1045 CPPUNIT_CHECK( !s.extract( ep, 100 ));
1046 CPPUNIT_CHECK( ep.empty() );
1049 Set::gc::force_dispose();
1053 // MichaelHashSet + MichaelList
1055 void HP_base_less();
1056 void HP_base_cmpmix();
1057 void HP_member_cmp();
1058 void HP_member_less();
1059 void HP_member_cmpmix();
1061 void DHP_base_cmp();
1062 void DHP_base_less();
1063 void DHP_base_cmpmix();
1064 void DHP_member_cmp();
1065 void DHP_member_less();
1066 void DHP_member_cmpmix();
1068 void RCU_GPI_base_cmp();
1069 void RCU_GPI_base_less();
1070 void RCU_GPI_base_cmpmix();
1071 void RCU_GPI_member_cmp();
1072 void RCU_GPI_member_less();
1073 void RCU_GPI_member_cmpmix();
1075 void RCU_GPB_base_cmp();
1076 void RCU_GPB_base_less();
1077 void RCU_GPB_base_cmpmix();
1078 void RCU_GPB_member_cmp();
1079 void RCU_GPB_member_less();
1080 void RCU_GPB_member_cmpmix();
1082 void RCU_GPT_base_cmp();
1083 void RCU_GPT_base_less();
1084 void RCU_GPT_base_cmpmix();
1085 void RCU_GPT_member_cmp();
1086 void RCU_GPT_member_less();
1087 void RCU_GPT_member_cmpmix();
1089 void RCU_SHB_base_cmp();
1090 void RCU_SHB_base_less();
1091 void RCU_SHB_base_cmpmix();
1092 void RCU_SHB_member_cmp();
1093 void RCU_SHB_member_less();
1094 void RCU_SHB_member_cmpmix();
1096 void RCU_SHT_base_cmp();
1097 void RCU_SHT_base_less();
1098 void RCU_SHT_base_cmpmix();
1099 void RCU_SHT_member_cmp();
1100 void RCU_SHT_member_less();
1101 void RCU_SHT_member_cmpmix();
1103 void nogc_base_cmp();
1104 void nogc_base_less();
1105 void nogc_base_cmpmix();
1106 void nogc_member_cmp();
1107 void nogc_member_less();
1108 void nogc_member_cmpmix();
1110 // MichaelHashSet + LazyList
1111 void HP_base_cmp_lazy();
1112 void HP_base_less_lazy();
1113 void HP_base_cmpmix_lazy();
1114 void HP_member_cmp_lazy();
1115 void HP_member_less_lazy();
1116 void HP_member_cmpmix_lazy();
1118 void DHP_base_cmp_lazy();
1119 void DHP_base_less_lazy();
1120 void DHP_base_cmpmix_lazy();
1121 void DHP_member_cmp_lazy();
1122 void DHP_member_less_lazy();
1123 void DHP_member_cmpmix_lazy();
1125 void RCU_GPI_base_cmp_lazy();
1126 void RCU_GPI_base_less_lazy();
1127 void RCU_GPI_base_cmpmix_lazy();
1128 void RCU_GPI_member_cmp_lazy();
1129 void RCU_GPI_member_less_lazy();
1130 void RCU_GPI_member_cmpmix_lazy();
1132 void RCU_GPB_base_cmp_lazy();
1133 void RCU_GPB_base_less_lazy();
1134 void RCU_GPB_base_cmpmix_lazy();
1135 void RCU_GPB_member_cmp_lazy();
1136 void RCU_GPB_member_less_lazy();
1137 void RCU_GPB_member_cmpmix_lazy();
1139 void RCU_GPT_base_cmp_lazy();
1140 void RCU_GPT_base_less_lazy();
1141 void RCU_GPT_base_cmpmix_lazy();
1142 void RCU_GPT_member_cmp_lazy();
1143 void RCU_GPT_member_less_lazy();
1144 void RCU_GPT_member_cmpmix_lazy();
1146 void RCU_SHB_base_cmp_lazy();
1147 void RCU_SHB_base_less_lazy();
1148 void RCU_SHB_base_cmpmix_lazy();
1149 void RCU_SHB_member_cmp_lazy();
1150 void RCU_SHB_member_less_lazy();
1151 void RCU_SHB_member_cmpmix_lazy();
1153 void RCU_SHT_base_cmp_lazy();
1154 void RCU_SHT_base_less_lazy();
1155 void RCU_SHT_base_cmpmix_lazy();
1156 void RCU_SHT_member_cmp_lazy();
1157 void RCU_SHT_member_less_lazy();
1158 void RCU_SHT_member_cmpmix_lazy();
1160 void nogc_base_cmp_lazy();
1161 void nogc_base_less_lazy();
1162 void nogc_base_cmpmix_lazy();
1163 void nogc_member_cmp_lazy();
1164 void nogc_member_less_lazy();
1165 void nogc_member_cmpmix_lazy();
1167 // SplitListSet + MichaelList [dyn - dynamic bucket table, st - static bucket table]
1168 void split_dyn_HP_base_cmp();
1169 void split_dyn_HP_base_less();
1170 void split_dyn_HP_base_cmpmix();
1171 void split_dyn_HP_member_cmp();
1172 void split_dyn_HP_member_less();
1173 void split_dyn_HP_member_cmpmix();
1174 void split_st_HP_base_cmp();
1175 void split_st_HP_base_less();
1176 void split_st_HP_base_cmpmix();
1177 void split_st_HP_member_cmp();
1178 void split_st_HP_member_less();
1179 void split_st_HP_member_cmpmix();
1181 void split_dyn_PTB_base_cmp();
1182 void split_dyn_PTB_base_less();
1183 void split_dyn_PTB_base_cmpmix();
1184 void split_dyn_PTB_member_cmp();
1185 void split_dyn_PTB_member_less();
1186 void split_dyn_PTB_member_cmpmix();
1187 void split_st_PTB_base_cmp();
1188 void split_st_PTB_base_less();
1189 void split_st_PTB_base_cmpmix();
1190 void split_st_PTB_member_cmp();
1191 void split_st_PTB_member_less();
1192 void split_st_PTB_member_cmpmix();
1194 void split_dyn_RCU_GPI_base_cmp();
1195 void split_dyn_RCU_GPI_base_less();
1196 void split_dyn_RCU_GPI_base_cmpmix();
1197 void split_dyn_RCU_GPI_member_cmp();
1198 void split_dyn_RCU_GPI_member_less();
1199 void split_dyn_RCU_GPI_member_cmpmix();
1200 void split_st_RCU_GPI_base_cmp();
1201 void split_st_RCU_GPI_base_less();
1202 void split_st_RCU_GPI_base_cmpmix();
1203 void split_st_RCU_GPI_member_cmp();
1204 void split_st_RCU_GPI_member_less();
1205 void split_st_RCU_GPI_member_cmpmix();
1207 void split_dyn_RCU_GPB_base_cmp();
1208 void split_dyn_RCU_GPB_base_less();
1209 void split_dyn_RCU_GPB_base_cmpmix();
1210 void split_dyn_RCU_GPB_member_cmp();
1211 void split_dyn_RCU_GPB_member_less();
1212 void split_dyn_RCU_GPB_member_cmpmix();
1213 void split_st_RCU_GPB_base_cmp();
1214 void split_st_RCU_GPB_base_less();
1215 void split_st_RCU_GPB_base_cmpmix();
1216 void split_st_RCU_GPB_member_cmp();
1217 void split_st_RCU_GPB_member_less();
1218 void split_st_RCU_GPB_member_cmpmix();
1220 void split_dyn_RCU_GPT_base_cmp();
1221 void split_dyn_RCU_GPT_base_less();
1222 void split_dyn_RCU_GPT_base_cmpmix();
1223 void split_dyn_RCU_GPT_member_cmp();
1224 void split_dyn_RCU_GPT_member_less();
1225 void split_dyn_RCU_GPT_member_cmpmix();
1226 void split_st_RCU_GPT_base_cmp();
1227 void split_st_RCU_GPT_base_less();
1228 void split_st_RCU_GPT_base_cmpmix();
1229 void split_st_RCU_GPT_member_cmp();
1230 void split_st_RCU_GPT_member_less();
1231 void split_st_RCU_GPT_member_cmpmix();
1233 void split_dyn_RCU_SHB_base_cmp();
1234 void split_dyn_RCU_SHB_base_less();
1235 void split_dyn_RCU_SHB_base_cmpmix();
1236 void split_dyn_RCU_SHB_member_cmp();
1237 void split_dyn_RCU_SHB_member_less();
1238 void split_dyn_RCU_SHB_member_cmpmix();
1239 void split_st_RCU_SHB_base_cmp();
1240 void split_st_RCU_SHB_base_less();
1241 void split_st_RCU_SHB_base_cmpmix();
1242 void split_st_RCU_SHB_member_cmp();
1243 void split_st_RCU_SHB_member_less();
1244 void split_st_RCU_SHB_member_cmpmix();
1246 void split_dyn_RCU_SHT_base_cmp();
1247 void split_dyn_RCU_SHT_base_less();
1248 void split_dyn_RCU_SHT_base_cmpmix();
1249 void split_dyn_RCU_SHT_member_cmp();
1250 void split_dyn_RCU_SHT_member_less();
1251 void split_dyn_RCU_SHT_member_cmpmix();
1252 void split_st_RCU_SHT_base_cmp();
1253 void split_st_RCU_SHT_base_less();
1254 void split_st_RCU_SHT_base_cmpmix();
1255 void split_st_RCU_SHT_member_cmp();
1256 void split_st_RCU_SHT_member_less();
1257 void split_st_RCU_SHT_member_cmpmix();
1259 void split_dyn_nogc_base_cmp();
1260 void split_dyn_nogc_base_less();
1261 void split_dyn_nogc_base_cmpmix();
1262 void split_dyn_nogc_member_cmp();
1263 void split_dyn_nogc_member_less();
1264 void split_dyn_nogc_member_cmpmix();
1265 void split_st_nogc_base_cmp();
1266 void split_st_nogc_base_less();
1267 void split_st_nogc_base_cmpmix();
1268 void split_st_nogc_member_cmp();
1269 void split_st_nogc_member_less();
1270 void split_st_nogc_member_cmpmix();
1273 // SplitListSet + LazyList [dyn - dynamic bucket table, st - static bucket table]
1274 void split_dyn_HP_base_cmp_lazy();
1275 void split_dyn_HP_base_less_lazy();
1276 void split_dyn_HP_base_cmpmix_lazy();
1277 void split_dyn_HP_member_cmp_lazy();
1278 void split_dyn_HP_member_less_lazy();
1279 void split_dyn_HP_member_cmpmix_lazy();
1280 void split_st_HP_base_cmp_lazy();
1281 void split_st_HP_base_less_lazy();
1282 void split_st_HP_base_cmpmix_lazy();
1283 void split_st_HP_member_cmp_lazy();
1284 void split_st_HP_member_less_lazy();
1285 void split_st_HP_member_cmpmix_lazy();
1287 void split_dyn_PTB_base_cmp_lazy();
1288 void split_dyn_PTB_base_less_lazy();
1289 void split_dyn_PTB_base_cmpmix_lazy();
1290 void split_dyn_PTB_member_cmp_lazy();
1291 void split_dyn_PTB_member_less_lazy();
1292 void split_dyn_PTB_member_cmpmix_lazy();
1293 void split_st_PTB_base_cmp_lazy();
1294 void split_st_PTB_base_less_lazy();
1295 void split_st_PTB_base_cmpmix_lazy();
1296 void split_st_PTB_member_cmp_lazy();
1297 void split_st_PTB_member_less_lazy();
1298 void split_st_PTB_member_cmpmix_lazy();
1300 void split_dyn_RCU_GPI_base_cmp_lazy();
1301 void split_dyn_RCU_GPI_base_less_lazy();
1302 void split_dyn_RCU_GPI_base_cmpmix_lazy();
1303 void split_dyn_RCU_GPI_member_cmp_lazy();
1304 void split_dyn_RCU_GPI_member_less_lazy();
1305 void split_dyn_RCU_GPI_member_cmpmix_lazy();
1306 void split_st_RCU_GPI_base_cmp_lazy();
1307 void split_st_RCU_GPI_base_less_lazy();
1308 void split_st_RCU_GPI_base_cmpmix_lazy();
1309 void split_st_RCU_GPI_member_cmp_lazy();
1310 void split_st_RCU_GPI_member_less_lazy();
1311 void split_st_RCU_GPI_member_cmpmix_lazy();
1313 void split_dyn_RCU_GPB_base_cmp_lazy();
1314 void split_dyn_RCU_GPB_base_less_lazy();
1315 void split_dyn_RCU_GPB_base_cmpmix_lazy();
1316 void split_dyn_RCU_GPB_member_cmp_lazy();
1317 void split_dyn_RCU_GPB_member_less_lazy();
1318 void split_dyn_RCU_GPB_member_cmpmix_lazy();
1319 void split_st_RCU_GPB_base_cmp_lazy();
1320 void split_st_RCU_GPB_base_less_lazy();
1321 void split_st_RCU_GPB_base_cmpmix_lazy();
1322 void split_st_RCU_GPB_member_cmp_lazy();
1323 void split_st_RCU_GPB_member_less_lazy();
1324 void split_st_RCU_GPB_member_cmpmix_lazy();
1326 void split_dyn_RCU_GPT_base_cmp_lazy();
1327 void split_dyn_RCU_GPT_base_less_lazy();
1328 void split_dyn_RCU_GPT_base_cmpmix_lazy();
1329 void split_dyn_RCU_GPT_member_cmp_lazy();
1330 void split_dyn_RCU_GPT_member_less_lazy();
1331 void split_dyn_RCU_GPT_member_cmpmix_lazy();
1332 void split_st_RCU_GPT_base_cmp_lazy();
1333 void split_st_RCU_GPT_base_less_lazy();
1334 void split_st_RCU_GPT_base_cmpmix_lazy();
1335 void split_st_RCU_GPT_member_cmp_lazy();
1336 void split_st_RCU_GPT_member_less_lazy();
1337 void split_st_RCU_GPT_member_cmpmix_lazy();
1339 void split_dyn_RCU_SHB_base_cmp_lazy();
1340 void split_dyn_RCU_SHB_base_less_lazy();
1341 void split_dyn_RCU_SHB_base_cmpmix_lazy();
1342 void split_dyn_RCU_SHB_member_cmp_lazy();
1343 void split_dyn_RCU_SHB_member_less_lazy();
1344 void split_dyn_RCU_SHB_member_cmpmix_lazy();
1345 void split_st_RCU_SHB_base_cmp_lazy();
1346 void split_st_RCU_SHB_base_less_lazy();
1347 void split_st_RCU_SHB_base_cmpmix_lazy();
1348 void split_st_RCU_SHB_member_cmp_lazy();
1349 void split_st_RCU_SHB_member_less_lazy();
1350 void split_st_RCU_SHB_member_cmpmix_lazy();
1352 void split_dyn_RCU_SHT_base_cmp_lazy();
1353 void split_dyn_RCU_SHT_base_less_lazy();
1354 void split_dyn_RCU_SHT_base_cmpmix_lazy();
1355 void split_dyn_RCU_SHT_member_cmp_lazy();
1356 void split_dyn_RCU_SHT_member_less_lazy();
1357 void split_dyn_RCU_SHT_member_cmpmix_lazy();
1358 void split_st_RCU_SHT_base_cmp_lazy();
1359 void split_st_RCU_SHT_base_less_lazy();
1360 void split_st_RCU_SHT_base_cmpmix_lazy();
1361 void split_st_RCU_SHT_member_cmp_lazy();
1362 void split_st_RCU_SHT_member_less_lazy();
1363 void split_st_RCU_SHT_member_cmpmix_lazy();
1365 void split_dyn_nogc_base_cmp_lazy();
1366 void split_dyn_nogc_base_less_lazy();
1367 void split_dyn_nogc_base_cmpmix_lazy();
1368 void split_dyn_nogc_member_cmp_lazy();
1369 void split_dyn_nogc_member_less_lazy();
1370 void split_dyn_nogc_member_cmpmix_lazy();
1371 void split_st_nogc_base_cmp_lazy();
1372 void split_st_nogc_base_less_lazy();
1373 void split_st_nogc_base_cmpmix_lazy();
1374 void split_st_nogc_member_cmp_lazy();
1375 void split_st_nogc_member_less_lazy();
1376 void split_st_nogc_member_cmpmix_lazy();
1378 CPPUNIT_TEST_SUITE(IntrusiveHashSetHdrTest)
1379 CPPUNIT_TEST(HP_base_cmp)
1380 CPPUNIT_TEST(HP_base_less)
1381 CPPUNIT_TEST(HP_base_cmpmix)
1382 CPPUNIT_TEST(HP_member_cmp)
1383 CPPUNIT_TEST(HP_member_less)
1384 CPPUNIT_TEST(HP_member_cmpmix)
1386 CPPUNIT_TEST(DHP_base_cmp)
1387 CPPUNIT_TEST(DHP_base_less)
1388 CPPUNIT_TEST(DHP_base_cmpmix)
1389 CPPUNIT_TEST(DHP_member_cmp)
1390 CPPUNIT_TEST(DHP_member_less)
1391 CPPUNIT_TEST(DHP_member_cmpmix)
1393 CPPUNIT_TEST(RCU_GPI_base_cmp)
1394 CPPUNIT_TEST(RCU_GPI_base_less)
1395 CPPUNIT_TEST(RCU_GPI_base_cmpmix)
1396 CPPUNIT_TEST(RCU_GPI_member_cmp)
1397 CPPUNIT_TEST(RCU_GPI_member_less)
1398 CPPUNIT_TEST(RCU_GPI_member_cmpmix)
1400 CPPUNIT_TEST(RCU_GPB_base_cmp)
1401 CPPUNIT_TEST(RCU_GPB_base_less)
1402 CPPUNIT_TEST(RCU_GPB_base_cmpmix)
1403 CPPUNIT_TEST(RCU_GPB_member_cmp)
1404 CPPUNIT_TEST(RCU_GPB_member_less)
1405 CPPUNIT_TEST(RCU_GPB_member_cmpmix)
1407 CPPUNIT_TEST(RCU_GPT_base_cmp)
1408 CPPUNIT_TEST(RCU_GPT_base_less)
1409 CPPUNIT_TEST(RCU_GPT_base_cmpmix)
1410 CPPUNIT_TEST(RCU_GPT_member_cmp)
1411 CPPUNIT_TEST(RCU_GPT_member_less)
1412 CPPUNIT_TEST(RCU_GPT_member_cmpmix)
1414 CPPUNIT_TEST(RCU_SHB_base_cmp)
1415 CPPUNIT_TEST(RCU_SHB_base_less)
1416 CPPUNIT_TEST(RCU_SHB_base_cmpmix)
1417 CPPUNIT_TEST(RCU_SHB_member_cmp)
1418 CPPUNIT_TEST(RCU_SHB_member_less)
1419 CPPUNIT_TEST(RCU_SHB_member_cmpmix)
1421 CPPUNIT_TEST(RCU_SHT_base_cmp)
1422 CPPUNIT_TEST(RCU_SHT_base_less)
1423 CPPUNIT_TEST(RCU_SHT_base_cmpmix)
1424 CPPUNIT_TEST(RCU_SHT_member_cmp)
1425 CPPUNIT_TEST(RCU_SHT_member_less)
1426 CPPUNIT_TEST(RCU_SHT_member_cmpmix)
1428 CPPUNIT_TEST(nogc_base_cmp)
1429 CPPUNIT_TEST(nogc_base_less)
1430 CPPUNIT_TEST(nogc_base_cmpmix)
1431 CPPUNIT_TEST(nogc_member_cmp)
1432 CPPUNIT_TEST(nogc_member_less)
1433 CPPUNIT_TEST(nogc_member_cmpmix)
1435 CPPUNIT_TEST(HP_base_cmp_lazy)
1436 CPPUNIT_TEST(HP_base_less_lazy)
1437 CPPUNIT_TEST(HP_base_cmpmix_lazy)
1438 CPPUNIT_TEST(HP_member_cmp_lazy)
1439 CPPUNIT_TEST(HP_member_less_lazy)
1440 CPPUNIT_TEST(HP_member_cmpmix_lazy)
1442 CPPUNIT_TEST(DHP_base_cmp_lazy)
1443 CPPUNIT_TEST(DHP_base_less_lazy)
1444 CPPUNIT_TEST(DHP_base_cmpmix_lazy)
1445 CPPUNIT_TEST(DHP_member_cmp_lazy)
1446 CPPUNIT_TEST(DHP_member_less_lazy)
1447 CPPUNIT_TEST(DHP_member_cmpmix_lazy)
1449 CPPUNIT_TEST(RCU_GPI_base_cmp_lazy)
1450 CPPUNIT_TEST(RCU_GPI_base_less_lazy)
1451 CPPUNIT_TEST(RCU_GPI_base_cmpmix_lazy)
1452 CPPUNIT_TEST(RCU_GPI_member_cmp_lazy)
1453 CPPUNIT_TEST(RCU_GPI_member_less_lazy)
1454 CPPUNIT_TEST(RCU_GPI_member_cmpmix_lazy)
1456 CPPUNIT_TEST(RCU_GPB_base_cmp_lazy)
1457 CPPUNIT_TEST(RCU_GPB_base_less_lazy)
1458 CPPUNIT_TEST(RCU_GPB_base_cmpmix_lazy)
1459 CPPUNIT_TEST(RCU_GPB_member_cmp_lazy)
1460 CPPUNIT_TEST(RCU_GPB_member_less_lazy)
1461 CPPUNIT_TEST(RCU_GPB_member_cmpmix_lazy)
1463 CPPUNIT_TEST(RCU_GPT_base_cmp_lazy)
1464 CPPUNIT_TEST(RCU_GPT_base_less_lazy)
1465 CPPUNIT_TEST(RCU_GPT_base_cmpmix_lazy)
1466 CPPUNIT_TEST(RCU_GPT_member_cmp_lazy)
1467 CPPUNIT_TEST(RCU_GPT_member_less_lazy)
1468 CPPUNIT_TEST(RCU_GPT_member_cmpmix_lazy)
1470 CPPUNIT_TEST(RCU_SHB_base_cmp_lazy)
1471 CPPUNIT_TEST(RCU_SHB_base_less_lazy)
1472 CPPUNIT_TEST(RCU_SHB_base_cmpmix_lazy)
1473 CPPUNIT_TEST(RCU_SHB_member_cmp_lazy)
1474 CPPUNIT_TEST(RCU_SHB_member_less_lazy)
1475 CPPUNIT_TEST(RCU_SHB_member_cmpmix_lazy)
1477 CPPUNIT_TEST(RCU_SHT_base_cmp_lazy)
1478 CPPUNIT_TEST(RCU_SHT_base_less_lazy)
1479 CPPUNIT_TEST(RCU_SHT_base_cmpmix_lazy)
1480 CPPUNIT_TEST(RCU_SHT_member_cmp_lazy)
1481 CPPUNIT_TEST(RCU_SHT_member_less_lazy)
1482 CPPUNIT_TEST(RCU_SHT_member_cmpmix_lazy)
1484 CPPUNIT_TEST(nogc_base_cmp_lazy)
1485 CPPUNIT_TEST(nogc_base_less_lazy)
1486 CPPUNIT_TEST(nogc_base_cmpmix_lazy)
1487 CPPUNIT_TEST(nogc_member_cmp_lazy)
1488 CPPUNIT_TEST(nogc_member_less_lazy)
1489 CPPUNIT_TEST(nogc_member_cmpmix_lazy)
1491 CPPUNIT_TEST(split_dyn_HP_base_cmp)
1492 CPPUNIT_TEST(split_dyn_HP_base_less)
1493 CPPUNIT_TEST(split_dyn_HP_base_cmpmix)
1494 CPPUNIT_TEST(split_dyn_HP_member_cmp)
1495 CPPUNIT_TEST(split_dyn_HP_member_less)
1496 CPPUNIT_TEST(split_dyn_HP_member_cmpmix)
1497 CPPUNIT_TEST(split_st_HP_base_cmp)
1498 CPPUNIT_TEST(split_st_HP_base_less)
1499 CPPUNIT_TEST(split_st_HP_base_cmpmix)
1500 CPPUNIT_TEST(split_st_HP_member_cmp)
1501 CPPUNIT_TEST(split_st_HP_member_less)
1502 CPPUNIT_TEST(split_st_HP_member_cmpmix)
1504 CPPUNIT_TEST(split_dyn_PTB_base_cmp)
1505 CPPUNIT_TEST(split_dyn_PTB_base_less)
1506 CPPUNIT_TEST(split_dyn_PTB_base_cmpmix)
1507 CPPUNIT_TEST(split_dyn_PTB_member_cmp)
1508 CPPUNIT_TEST(split_dyn_PTB_member_less)
1509 CPPUNIT_TEST(split_dyn_PTB_member_cmpmix)
1510 CPPUNIT_TEST(split_st_PTB_base_cmp)
1511 CPPUNIT_TEST(split_st_PTB_base_less)
1512 CPPUNIT_TEST(split_st_PTB_base_cmpmix)
1513 CPPUNIT_TEST(split_st_PTB_member_cmp)
1514 CPPUNIT_TEST(split_st_PTB_member_less)
1515 CPPUNIT_TEST(split_st_PTB_member_cmpmix)
1517 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp)
1518 CPPUNIT_TEST(split_dyn_RCU_GPI_base_less)
1519 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix)
1520 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmp)
1521 CPPUNIT_TEST(split_dyn_RCU_GPI_member_less)
1522 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix)
1523 CPPUNIT_TEST(split_st_RCU_GPI_base_cmp)
1524 CPPUNIT_TEST(split_st_RCU_GPI_base_less)
1525 CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix)
1526 CPPUNIT_TEST(split_st_RCU_GPI_member_cmp)
1527 CPPUNIT_TEST(split_st_RCU_GPI_member_less)
1528 CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix)
1530 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp)
1531 CPPUNIT_TEST(split_dyn_RCU_GPB_base_less)
1532 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix)
1533 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmp)
1534 CPPUNIT_TEST(split_dyn_RCU_GPB_member_less)
1535 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix)
1536 CPPUNIT_TEST(split_st_RCU_GPB_base_cmp)
1537 CPPUNIT_TEST(split_st_RCU_GPB_base_less)
1538 CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix)
1539 CPPUNIT_TEST(split_st_RCU_GPB_member_cmp)
1540 CPPUNIT_TEST(split_st_RCU_GPB_member_less)
1541 CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix)
1543 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp)
1544 CPPUNIT_TEST(split_dyn_RCU_GPT_base_less)
1545 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix)
1546 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmp)
1547 CPPUNIT_TEST(split_dyn_RCU_GPT_member_less)
1548 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix)
1549 CPPUNIT_TEST(split_st_RCU_GPT_base_cmp)
1550 CPPUNIT_TEST(split_st_RCU_GPT_base_less)
1551 CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix)
1552 CPPUNIT_TEST(split_st_RCU_GPT_member_cmp)
1553 CPPUNIT_TEST(split_st_RCU_GPT_member_less)
1554 CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix)
1556 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp)
1557 CPPUNIT_TEST(split_dyn_RCU_SHB_base_less)
1558 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix)
1559 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmp)
1560 CPPUNIT_TEST(split_dyn_RCU_SHB_member_less)
1561 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix)
1562 CPPUNIT_TEST(split_st_RCU_SHB_base_cmp)
1563 CPPUNIT_TEST(split_st_RCU_SHB_base_less)
1564 CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix)
1565 CPPUNIT_TEST(split_st_RCU_SHB_member_cmp)
1566 CPPUNIT_TEST(split_st_RCU_SHB_member_less)
1567 CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix)
1569 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp)
1570 CPPUNIT_TEST(split_dyn_RCU_SHT_base_less)
1571 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix)
1572 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmp)
1573 CPPUNIT_TEST(split_dyn_RCU_SHT_member_less)
1574 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix)
1575 CPPUNIT_TEST(split_st_RCU_SHT_base_cmp)
1576 CPPUNIT_TEST(split_st_RCU_SHT_base_less)
1577 CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix)
1578 CPPUNIT_TEST(split_st_RCU_SHT_member_cmp)
1579 CPPUNIT_TEST(split_st_RCU_SHT_member_less)
1580 CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix)
1582 CPPUNIT_TEST(split_dyn_nogc_base_cmp)
1583 CPPUNIT_TEST(split_dyn_nogc_base_less)
1584 CPPUNIT_TEST(split_dyn_nogc_base_cmpmix)
1585 CPPUNIT_TEST(split_dyn_nogc_member_cmp)
1586 CPPUNIT_TEST(split_dyn_nogc_member_less)
1587 CPPUNIT_TEST(split_dyn_nogc_member_cmpmix)
1588 CPPUNIT_TEST(split_st_nogc_base_cmp)
1589 CPPUNIT_TEST(split_st_nogc_base_less)
1590 CPPUNIT_TEST(split_st_nogc_base_cmpmix)
1591 CPPUNIT_TEST(split_st_nogc_member_cmp)
1592 CPPUNIT_TEST(split_st_nogc_member_less)
1593 CPPUNIT_TEST(split_st_nogc_member_cmpmix)
1596 CPPUNIT_TEST(split_dyn_HP_base_cmp_lazy)
1597 CPPUNIT_TEST(split_dyn_HP_base_less_lazy)
1598 CPPUNIT_TEST(split_dyn_HP_base_cmpmix_lazy)
1599 CPPUNIT_TEST(split_dyn_HP_member_cmp_lazy)
1600 CPPUNIT_TEST(split_dyn_HP_member_less_lazy)
1601 CPPUNIT_TEST(split_dyn_HP_member_cmpmix_lazy)
1602 CPPUNIT_TEST(split_st_HP_base_cmp_lazy)
1603 CPPUNIT_TEST(split_st_HP_base_less_lazy)
1604 CPPUNIT_TEST(split_st_HP_base_cmpmix_lazy)
1605 CPPUNIT_TEST(split_st_HP_member_cmp_lazy)
1606 CPPUNIT_TEST(split_st_HP_member_less_lazy)
1607 CPPUNIT_TEST(split_st_HP_member_cmpmix_lazy)
1609 CPPUNIT_TEST(split_dyn_PTB_base_cmp_lazy)
1610 CPPUNIT_TEST(split_dyn_PTB_base_less_lazy)
1611 CPPUNIT_TEST(split_dyn_PTB_base_cmpmix_lazy)
1612 CPPUNIT_TEST(split_dyn_PTB_member_cmp_lazy)
1613 CPPUNIT_TEST(split_dyn_PTB_member_less_lazy)
1614 CPPUNIT_TEST(split_dyn_PTB_member_cmpmix_lazy)
1615 CPPUNIT_TEST(split_st_PTB_base_cmp_lazy)
1616 CPPUNIT_TEST(split_st_PTB_base_less_lazy)
1617 CPPUNIT_TEST(split_st_PTB_base_cmpmix_lazy)
1618 CPPUNIT_TEST(split_st_PTB_member_cmp_lazy)
1619 CPPUNIT_TEST(split_st_PTB_member_less_lazy)
1620 CPPUNIT_TEST(split_st_PTB_member_cmpmix_lazy)
1622 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp_lazy)
1623 CPPUNIT_TEST(split_dyn_RCU_GPI_base_less_lazy)
1624 CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix_lazy)
1625 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmp_lazy)
1626 CPPUNIT_TEST(split_dyn_RCU_GPI_member_less_lazy)
1627 CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix_lazy)
1628 CPPUNIT_TEST(split_st_RCU_GPI_base_cmp_lazy)
1629 CPPUNIT_TEST(split_st_RCU_GPI_base_less_lazy)
1630 CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix_lazy)
1631 CPPUNIT_TEST(split_st_RCU_GPI_member_cmp_lazy)
1632 CPPUNIT_TEST(split_st_RCU_GPI_member_less_lazy)
1633 CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix_lazy)
1635 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp_lazy)
1636 CPPUNIT_TEST(split_dyn_RCU_GPB_base_less_lazy)
1637 CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix_lazy)
1638 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmp_lazy)
1639 CPPUNIT_TEST(split_dyn_RCU_GPB_member_less_lazy)
1640 CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix_lazy)
1641 CPPUNIT_TEST(split_st_RCU_GPB_base_cmp_lazy)
1642 CPPUNIT_TEST(split_st_RCU_GPB_base_less_lazy)
1643 CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix_lazy)
1644 CPPUNIT_TEST(split_st_RCU_GPB_member_cmp_lazy)
1645 CPPUNIT_TEST(split_st_RCU_GPB_member_less_lazy)
1646 CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix_lazy)
1648 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp_lazy)
1649 CPPUNIT_TEST(split_dyn_RCU_GPT_base_less_lazy)
1650 CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix_lazy)
1651 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmp_lazy)
1652 CPPUNIT_TEST(split_dyn_RCU_GPT_member_less_lazy)
1653 CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix_lazy)
1654 CPPUNIT_TEST(split_st_RCU_GPT_base_cmp_lazy)
1655 CPPUNIT_TEST(split_st_RCU_GPT_base_less_lazy)
1656 CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix_lazy)
1657 CPPUNIT_TEST(split_st_RCU_GPT_member_cmp_lazy)
1658 CPPUNIT_TEST(split_st_RCU_GPT_member_less_lazy)
1659 CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix_lazy)
1661 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp_lazy)
1662 CPPUNIT_TEST(split_dyn_RCU_SHB_base_less_lazy)
1663 CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix_lazy)
1664 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmp_lazy)
1665 CPPUNIT_TEST(split_dyn_RCU_SHB_member_less_lazy)
1666 CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix_lazy)
1667 CPPUNIT_TEST(split_st_RCU_SHB_base_cmp_lazy)
1668 CPPUNIT_TEST(split_st_RCU_SHB_base_less_lazy)
1669 CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix_lazy)
1670 CPPUNIT_TEST(split_st_RCU_SHB_member_cmp_lazy)
1671 CPPUNIT_TEST(split_st_RCU_SHB_member_less_lazy)
1672 CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix_lazy)
1674 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp_lazy)
1675 CPPUNIT_TEST(split_dyn_RCU_SHT_base_less_lazy)
1676 CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix_lazy)
1677 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmp_lazy)
1678 CPPUNIT_TEST(split_dyn_RCU_SHT_member_less_lazy)
1679 CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix_lazy)
1680 CPPUNIT_TEST(split_st_RCU_SHT_base_cmp_lazy)
1681 CPPUNIT_TEST(split_st_RCU_SHT_base_less_lazy)
1682 CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix_lazy)
1683 CPPUNIT_TEST(split_st_RCU_SHT_member_cmp_lazy)
1684 CPPUNIT_TEST(split_st_RCU_SHT_member_less_lazy)
1685 CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix_lazy)
1687 CPPUNIT_TEST(split_dyn_nogc_base_cmp_lazy)
1688 CPPUNIT_TEST(split_dyn_nogc_base_less_lazy)
1689 CPPUNIT_TEST(split_dyn_nogc_base_cmpmix_lazy)
1690 CPPUNIT_TEST(split_dyn_nogc_member_cmp_lazy)
1691 CPPUNIT_TEST(split_dyn_nogc_member_less_lazy)
1692 CPPUNIT_TEST(split_dyn_nogc_member_cmpmix_lazy)
1693 CPPUNIT_TEST(split_st_nogc_base_cmp_lazy)
1694 CPPUNIT_TEST(split_st_nogc_base_less_lazy)
1695 CPPUNIT_TEST(split_st_nogc_base_cmpmix_lazy)
1696 CPPUNIT_TEST(split_st_nogc_member_cmp_lazy)
1697 CPPUNIT_TEST(split_st_nogc_member_less_lazy)
1698 CPPUNIT_TEST(split_st_nogc_member_cmpmix_lazy)
1700 CPPUNIT_TEST_SUITE_END()