2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
6 Source code repo: http://github.com/khizmax/libcds/
7 Download: http://sourceforge.net/projects/libcds/files/
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are met:
12 * Redistributions of source code must retain the above copyright notice, this
13 list of conditions and the following disclaimer.
15 * Redistributions in binary form must reproduce the above copyright notice,
16 this list of conditions and the following disclaimer in the documentation
17 and/or other materials provided with the distribution.
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #ifndef CDSTEST_HDR_INTRUSIVE_STRIPED_SET_H
32 #define CDSTEST_HDR_INTRUSIVE_STRIPED_SET_H
34 #include "cppunit/cppunit_proxy.h"
35 #include <cds/opt/hash.h>
37 #include <boost/version.hpp>
39 // boost 1.59 bug: intrusive containers require implicit conversion from value_type to key_type
40 // Fixed in boost 1.60+
41 #if BOOST_VERSION == 105900
42 # define CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
44 # define CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND explicit
47 // cds::intrusive namespace forward declaration
48 namespace cds { namespace intrusive {}}
51 namespace ci = cds::intrusive;
52 namespace co = cds::opt;
57 int operator()( T const & v ) const
64 struct get_int_key<int>
66 int operator()( int i ) const
73 class IntrusiveStripedSetHdrTest: public CppUnitMini::TestCase
78 unsigned int nDisposeCount ; // count of disposer calling
79 unsigned int nFindCount ; // count of find-functor calling
80 unsigned int nFindArgCount;
81 unsigned int nInsertCount;
82 unsigned int nUpdateNewCount;
83 unsigned int nUpdateCount;
84 unsigned int nEraseCount;
88 memset( this, 0, sizeof(*this));
91 stat& operator=( stat const& s)
93 memcpy( this, &s, sizeof(*this));
106 explicit item( int key )
111 item(int key, int val)
132 template <typename Hook>
142 CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
147 base_item(int key, int val)
151 base_item(const base_item& v )
152 : item( static_cast<item const&>(v) )
162 template <typename Hook>
172 CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
173 member_item( int key )
177 member_item(int key, int val)
181 member_item(const member_item& v )
182 : item( static_cast<item const&>(v))
201 size_t operator()( int i ) const
203 return co::v::hash<int>()( i );
205 template <typename Item>
206 size_t operator()( const Item& i ) const
208 return (*this)( i.key() );
210 size_t operator()( find_key const& i) const
212 return co::v::hash<int>()( i.nKey );
216 template <typename T>
219 bool operator ()(const T& v1, const T& v2 ) const
221 return v1.key() < v2.key();
224 template <typename Q>
225 bool operator ()(const T& v1, const Q& v2 ) const
227 return v1.key() < v2;
230 template <typename Q>
231 bool operator ()(const Q& v1, const T& v2 ) const
233 return v1 < v2.key();
236 bool operator()( int i1, int i2 ) const
242 template <typename T>
244 int operator ()(const T& v1, const T& v2 ) const
246 if ( v1.key() < v2.key() )
248 return v1.key() > v2.key() ? 1 : 0;
251 template <typename Q>
252 int operator ()(const T& v1, const Q& v2 ) const
256 return v1.key() > v2 ? 1 : 0;
259 template <typename Q>
260 int operator ()(const Q& v1, const T& v2 ) const
264 return v1 > v2.key() ? 1 : 0;
268 struct faked_disposer
270 template <typename T>
271 void operator ()( T * p )
277 struct insert_functor {
278 template <typename Item>
279 void operator()( Item& e)
285 struct update_functor {
286 template <typename Item>
287 void operator()( bool bNew, Item& e, Item& arg )
291 CPPUNIT_ASSERT_CURRENT( &e == &arg );
298 struct erase_functor {
299 template< typename Item >
300 void operator()( Item& e )
306 struct find_functor {
307 template <typename Item, typename What>
308 void operator()( Item& e, What& )
313 template <typename Item>
314 void operator()( Item& e, Item& w )
322 template <typename Item>
323 bool operator()( Item const& e, find_key const& k ) const
325 return get_int_key<Item>()(e) < k.nKey;
327 template <typename Item>
328 bool operator()( find_key const& k, Item const& e ) const
330 return k.nKey < get_int_key<Item>()(e);
332 template <typename Item1, typename Item2>
333 bool operator()( Item1 const& e, Item2 const& k ) const
335 return get_int_key<Item1>()(e) < get_int_key<Item2>()(k);
339 template <typename T>
340 struct auto_dispose {
342 auto_dispose( T * pArr ): m_pArr( pArr ) {}
343 ~auto_dispose() { delete[] m_pArr; }
347 void test_with(Set& s)
349 typedef typename Set::value_type value_type;
359 value_type e1( k1, v1 );
360 value_type e2( k2, v2 );
361 value_type e3( k3, v3);
367 CPPUNIT_ASSERT( s.empty() );
368 CPPUNIT_ASSERT( s.size() == 0 );
370 CPPUNIT_ASSERT( !s.contains(k1));
371 CPPUNIT_ASSERT( !s.contains(k2));
372 CPPUNIT_ASSERT( !s.contains(k3));
374 CPPUNIT_ASSERT( s.insert(e1));
375 CPPUNIT_ASSERT( s.contains(e1));
376 CPPUNIT_ASSERT( s.contains(k1));
377 CPPUNIT_ASSERT( !s.contains(e2));
378 CPPUNIT_ASSERT( !s.contains(e3));
380 CPPUNIT_ASSERT( e2.nInsertCount == 0 );
381 CPPUNIT_ASSERT( s.insert(e2, insert_functor() ));
382 CPPUNIT_ASSERT( e2.nInsertCount == 1 );
383 CPPUNIT_ASSERT( s.find(e1, find_functor() ));
384 CPPUNIT_ASSERT( e1.nFindCount == 1 );
385 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
386 CPPUNIT_ASSERT( s.find(k1, find_functor() ));
387 CPPUNIT_ASSERT( e1.nFindCount == 2 );
388 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
389 CPPUNIT_ASSERT( s.find(k2, find_functor() ));
390 CPPUNIT_ASSERT( e2.nFindCount == 1 );
391 CPPUNIT_ASSERT( e2.nFindArgCount == 0 );
392 CPPUNIT_ASSERT( s.find(e2, find_functor() ));
393 CPPUNIT_ASSERT( e2.nFindCount == 2 );
394 CPPUNIT_ASSERT( e2.nFindArgCount == 1 );
395 CPPUNIT_ASSERT( !s.find(k3, find_functor()));
396 CPPUNIT_ASSERT( e3.nFindCount == 0 );
397 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
398 CPPUNIT_ASSERT( !s.find(e3, find_functor()));
399 CPPUNIT_ASSERT( e3.nFindCount == 0 );
400 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
402 s1 = e1 ; s2 = e2 ; s3 = e3;
404 CPPUNIT_ASSERT( e3.nUpdateNewCount == 0 );
405 CPPUNIT_ASSERT( e3.nUpdateCount == 0 );
406 CPPUNIT_ASSERT(s.update(e3, update_functor(), false) == std::make_pair(false, false));
407 CPPUNIT_ASSERT(e3.nUpdateNewCount == 0);
408 CPPUNIT_ASSERT(e3.nUpdateCount == 0);
409 CPPUNIT_ASSERT( s.update( e3, update_functor() ) == std::make_pair(true, true));
410 CPPUNIT_ASSERT( e3.nUpdateNewCount == 1 );
411 CPPUNIT_ASSERT( e3.nUpdateCount == 0 );
412 CPPUNIT_ASSERT( s.find_with(find_key(k1), less2(), find_functor() ));
413 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
414 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
415 CPPUNIT_ASSERT( s.find_with(k1, less2(), find_functor() ));
416 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
417 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
418 CPPUNIT_ASSERT( s.find_with(k2, less2(), find_functor() ));
419 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
420 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
421 CPPUNIT_ASSERT( s.contains(find_key(k2), less2() ));
422 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 ) ; // unchanged, no find_functor
423 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
424 CPPUNIT_ASSERT( s.contains(k3, less2() ));
425 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount ) ; // unchanged, no find_functor
426 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
427 CPPUNIT_ASSERT( s.find_with(find_key(k3), less2(), find_functor() ));
428 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
429 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
431 s1 = e1 ; s2 = e2 ; s3 = e3;
433 // insert existing elements
435 value_type eu( k2, 1000 );
436 CPPUNIT_ASSERT( !s.insert( eu ));
437 CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
438 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
440 CPPUNIT_ASSERT( s.update( eu, update_functor()) == std::make_pair(true, false));
441 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
442 CPPUNIT_ASSERT( e2.nUpdateCount == s2.nUpdateCount + 1 );
443 CPPUNIT_ASSERT( e2.nUpdateNewCount == s2.nUpdateNewCount );
446 s1 = e1 ; s2 = e2 ; s3 = e3;
448 // unlink & erase test
450 value_type eu( k2, 10 );
451 CPPUNIT_ASSERT( !s.unlink(eu));
454 CPPUNIT_ASSERT( !s.empty() );
455 CPPUNIT_ASSERT( s.size() == 3 );
457 CPPUNIT_ASSERT( s.unlink( e1 ) );
458 CPPUNIT_ASSERT( s.erase_with( k2, less2() ) == &e2 );
459 CPPUNIT_ASSERT( s.erase( e2 ) == nullptr );
460 CPPUNIT_ASSERT( e3.nEraseCount == 0 );
461 CPPUNIT_ASSERT( s.erase_with( k3, less2(), erase_functor()) == &e3 );
462 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
463 CPPUNIT_ASSERT( s.erase( k3, erase_functor() ) == nullptr );
464 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
466 CPPUNIT_ASSERT( s.insert( e3 ) );
467 CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
468 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
470 CPPUNIT_ASSERT( s.empty() );
471 CPPUNIT_ASSERT( s.size() == 0 );
473 s1 = e1 ; s2 = e2 ; s3 = e3;
475 // clear & clear_and_dispose test
476 CPPUNIT_ASSERT( s.insert(e1));
477 CPPUNIT_ASSERT( s.insert(e2));
478 CPPUNIT_ASSERT( s.insert(e3));
479 CPPUNIT_ASSERT( !s.empty() );
480 CPPUNIT_ASSERT( s.size() == 3 );
482 CPPUNIT_ASSERT( s.empty() );
483 CPPUNIT_ASSERT( s.size() == 0 );
485 CPPUNIT_ASSERT( s.insert(e1));
486 CPPUNIT_ASSERT( s.insert(e2));
487 CPPUNIT_ASSERT( s.insert(e3));
488 CPPUNIT_ASSERT( !s.empty() );
489 CPPUNIT_ASSERT( s.size() == 3 );
491 CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
492 CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
493 CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
494 s.clear_and_dispose( faked_disposer() );
495 CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
496 CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
497 CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
498 CPPUNIT_ASSERT( s.empty() );
499 CPPUNIT_ASSERT( s.size() == 0 );
501 // resize test (up to 64K elements)
502 size_t const nSize = 64 * 1024;
503 value_type * arr = new value_type[nSize];
504 auto_dispose<value_type> ad(arr);
505 for ( size_t i = 0; i < nSize; ++i ) {
506 value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
507 CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
508 CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
509 //for ( size_t j = 0; j <= i; ++j ) {
510 // if ( !s.contains((int) j) ) {
511 // CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
516 for ( size_t i = 0; i < nSize; ++i )
517 CPPUNIT_ASSERT_EX( s.contains((int) i), "Key " << i << " is not found" );
519 CPPUNIT_ASSERT( !s.empty() );
520 CPPUNIT_ASSERT( s.size() == nSize );
521 s.clear_and_dispose( faked_disposer() );
522 for ( size_t i = 0; i < nSize; ++i ) {
523 CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
536 // ctor with explicit initial capacity
546 unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
547 Set s( 256, nProbesetSize, nProbesetSize / 2 );
551 // ***********************************************************
554 void Striped_list_basehook_cmp();
555 void Striped_list_basehook_less();
556 void Striped_list_basehook_cmpmix();
557 void Striped_list_basehook_bucket_threshold();
558 void Striped_list_basehook_bucket_threshold_rt();
559 void Striped_list_memberhook_cmp();
560 void Striped_list_memberhook_less();
561 void Striped_list_memberhook_cmpmix();
562 void Striped_list_memberhook_bucket_threshold();
563 void Striped_list_memberhook_bucket_threshold_rt();
565 void Striped_slist_basehook_cmp();
566 void Striped_slist_basehook_less();
567 void Striped_slist_basehook_cmpmix();
568 void Striped_slist_basehook_bucket_threshold();
569 void Striped_slist_basehook_bucket_threshold_rt();
570 void Striped_slist_memberhook_cmp();
571 void Striped_slist_memberhook_less();
572 void Striped_slist_memberhook_cmpmix();
573 void Striped_slist_memberhook_bucket_threshold();
574 void Striped_slist_memberhook_bucket_threshold_rt();
576 void Striped_set_basehook();
577 void Striped_set_basehook_bucket_threshold();
578 void Striped_set_basehook_bucket_threshold_rt();
579 void Striped_set_memberhook();
580 void Striped_set_memberhook_bucket_threshold();
581 void Striped_set_memberhook_bucket_threshold_rt();
583 void Striped_unordered_set_basehook();
584 void Striped_unordered_set_basehook_bucket_threshold();
585 void Striped_unordered_set_basehook_bucket_threshold_rt();
586 void Striped_unordered_set_memberhook();
587 void Striped_unordered_set_memberhook_bucket_threshold();
588 void Striped_unordered_set_memberhook_bucket_threshold_rt();
590 void Striped_avl_set_basehook();
591 void Striped_avl_set_basehook_bucket_threshold();
592 void Striped_avl_set_basehook_bucket_threshold_rt();
593 void Striped_avl_set_memberhook();
594 void Striped_avl_set_memberhook_bucket_threshold();
595 void Striped_avl_set_memberhook_bucket_threshold_rt();
597 void Striped_sg_set_basehook();
598 void Striped_sg_set_basehook_bucket_threshold();
599 void Striped_sg_set_basehook_bucket_threshold_rt();
600 void Striped_sg_set_memberhook();
601 void Striped_sg_set_memberhook_bucket_threshold();
602 void Striped_sg_set_memberhook_bucket_threshold_rt();
604 void Striped_splay_set_basehook();
605 void Striped_splay_set_basehook_bucket_threshold();
606 void Striped_splay_set_basehook_bucket_threshold_rt();
607 void Striped_splay_set_memberhook();
608 void Striped_splay_set_memberhook_bucket_threshold();
609 void Striped_splay_set_memberhook_bucket_threshold_rt();
611 void Striped_treap_set_basehook();
612 void Striped_treap_set_basehook_bucket_threshold();
613 void Striped_treap_set_basehook_bucket_threshold_rt();
614 void Striped_treap_set_memberhook();
615 void Striped_treap_set_memberhook_bucket_threshold();
616 void Striped_treap_set_memberhook_bucket_threshold_rt();
618 // ***********************************************************
621 void Refinable_list_basehook_cmp();
622 void Refinable_list_basehook_less();
623 void Refinable_list_basehook_cmpmix();
624 void Refinable_list_basehook_bucket_threshold();
625 void Refinable_list_basehook_bucket_threshold_rt();
626 void Refinable_list_memberhook_cmp();
627 void Refinable_list_memberhook_less();
628 void Refinable_list_memberhook_cmpmix();
629 void Refinable_list_memberhook_bucket_threshold();
630 void Refinable_list_memberhook_bucket_threshold_rt();
632 void Refinable_slist_basehook_cmp();
633 void Refinable_slist_basehook_less();
634 void Refinable_slist_basehook_cmpmix();
635 void Refinable_slist_basehook_bucket_threshold();
636 void Refinable_slist_basehook_bucket_threshold_rt();
637 void Refinable_slist_memberhook_cmp();
638 void Refinable_slist_memberhook_less();
639 void Refinable_slist_memberhook_cmpmix();
640 void Refinable_slist_memberhook_bucket_threshold();
641 void Refinable_slist_memberhook_bucket_threshold_rt();
643 void Refinable_set_basehook();
644 void Refinable_set_basehook_bucket_threshold();
645 void Refinable_set_basehook_bucket_threshold_rt();
646 void Refinable_set_memberhook();
647 void Refinable_set_memberhook_bucket_threshold();
648 void Refinable_set_memberhook_bucket_threshold_rt();
650 void Refinable_unordered_set_basehook();
651 void Refinable_unordered_set_basehook_bucket_threshold();
652 void Refinable_unordered_set_basehook_bucket_threshold_rt();
653 void Refinable_unordered_set_memberhook();
654 void Refinable_unordered_set_memberhook_bucket_threshold();
655 void Refinable_unordered_set_memberhook_bucket_threshold_rt();
657 void Refinable_avl_set_basehook();
658 void Refinable_avl_set_basehook_bucket_threshold();
659 void Refinable_avl_set_basehook_bucket_threshold_rt();
660 void Refinable_avl_set_memberhook();
661 void Refinable_avl_set_memberhook_bucket_threshold();
662 void Refinable_avl_set_memberhook_bucket_threshold_rt();
664 void Refinable_sg_set_basehook();
665 void Refinable_sg_set_basehook_bucket_threshold();
666 void Refinable_sg_set_basehook_bucket_threshold_rt();
667 void Refinable_sg_set_memberhook();
668 void Refinable_sg_set_memberhook_bucket_threshold();
669 void Refinable_sg_set_memberhook_bucket_threshold_rt();
671 void Refinable_splay_set_basehook();
672 void Refinable_splay_set_basehook_bucket_threshold();
673 void Refinable_splay_set_basehook_bucket_threshold_rt();
674 void Refinable_splay_set_memberhook();
675 void Refinable_splay_set_memberhook_bucket_threshold();
676 void Refinable_splay_set_memberhook_bucket_threshold_rt();
678 void Refinable_treap_set_basehook();
679 void Refinable_treap_set_basehook_bucket_threshold();
680 void Refinable_treap_set_basehook_bucket_threshold_rt();
681 void Refinable_treap_set_memberhook();
682 void Refinable_treap_set_memberhook_bucket_threshold();
683 void Refinable_treap_set_memberhook_bucket_threshold_rt();
685 CPPUNIT_TEST_SUITE(IntrusiveStripedSetHdrTest)
686 // ***********************************************************
689 CPPUNIT_TEST( Striped_list_basehook_cmp)
690 CPPUNIT_TEST( Striped_list_basehook_less)
691 CPPUNIT_TEST( Striped_list_basehook_cmpmix)
692 CPPUNIT_TEST( Striped_list_basehook_bucket_threshold)
693 CPPUNIT_TEST( Striped_list_basehook_bucket_threshold_rt)
694 CPPUNIT_TEST( Striped_list_memberhook_cmp)
695 CPPUNIT_TEST( Striped_list_memberhook_less)
696 CPPUNIT_TEST( Striped_list_memberhook_cmpmix)
697 CPPUNIT_TEST( Striped_list_memberhook_bucket_threshold)
698 CPPUNIT_TEST( Striped_list_memberhook_bucket_threshold_rt)
700 CPPUNIT_TEST( Striped_slist_basehook_cmp)
701 CPPUNIT_TEST( Striped_slist_basehook_less)
702 CPPUNIT_TEST( Striped_slist_basehook_cmpmix)
703 CPPUNIT_TEST( Striped_slist_basehook_bucket_threshold)
704 CPPUNIT_TEST( Striped_slist_basehook_bucket_threshold_rt)
705 CPPUNIT_TEST( Striped_slist_memberhook_cmp)
706 CPPUNIT_TEST( Striped_slist_memberhook_less)
707 CPPUNIT_TEST( Striped_slist_memberhook_cmpmix)
708 CPPUNIT_TEST( Striped_slist_memberhook_bucket_threshold)
709 CPPUNIT_TEST( Striped_slist_memberhook_bucket_threshold_rt)
711 CPPUNIT_TEST( Striped_set_basehook )
712 CPPUNIT_TEST( Striped_set_basehook_bucket_threshold )
713 CPPUNIT_TEST( Striped_set_basehook_bucket_threshold_rt )
714 CPPUNIT_TEST( Striped_set_memberhook)
715 CPPUNIT_TEST( Striped_set_memberhook_bucket_threshold )
716 CPPUNIT_TEST( Striped_set_memberhook_bucket_threshold_rt )
718 CPPUNIT_TEST( Striped_unordered_set_basehook )
719 CPPUNIT_TEST( Striped_unordered_set_basehook_bucket_threshold )
720 CPPUNIT_TEST( Striped_unordered_set_basehook_bucket_threshold_rt )
721 CPPUNIT_TEST( Striped_unordered_set_memberhook)
722 CPPUNIT_TEST( Striped_unordered_set_memberhook_bucket_threshold )
723 CPPUNIT_TEST( Striped_unordered_set_memberhook_bucket_threshold_rt )
725 CPPUNIT_TEST( Striped_avl_set_basehook )
726 CPPUNIT_TEST( Striped_avl_set_basehook_bucket_threshold )
727 CPPUNIT_TEST( Striped_avl_set_basehook_bucket_threshold_rt )
728 CPPUNIT_TEST( Striped_avl_set_memberhook)
729 CPPUNIT_TEST( Striped_avl_set_memberhook_bucket_threshold )
730 CPPUNIT_TEST( Striped_avl_set_memberhook_bucket_threshold_rt )
732 CPPUNIT_TEST( Striped_sg_set_basehook )
733 CPPUNIT_TEST( Striped_sg_set_basehook_bucket_threshold )
734 CPPUNIT_TEST( Striped_sg_set_basehook_bucket_threshold_rt )
735 CPPUNIT_TEST( Striped_sg_set_memberhook)
736 CPPUNIT_TEST( Striped_sg_set_memberhook_bucket_threshold )
737 CPPUNIT_TEST( Striped_sg_set_memberhook_bucket_threshold_rt )
739 CPPUNIT_TEST( Striped_splay_set_basehook )
740 CPPUNIT_TEST( Striped_splay_set_basehook_bucket_threshold )
741 CPPUNIT_TEST( Striped_splay_set_basehook_bucket_threshold_rt )
742 CPPUNIT_TEST( Striped_splay_set_memberhook)
743 CPPUNIT_TEST( Striped_splay_set_memberhook_bucket_threshold )
744 CPPUNIT_TEST( Striped_splay_set_memberhook_bucket_threshold_rt )
746 CPPUNIT_TEST( Striped_treap_set_basehook )
747 CPPUNIT_TEST( Striped_treap_set_basehook_bucket_threshold )
748 CPPUNIT_TEST( Striped_treap_set_basehook_bucket_threshold_rt )
749 CPPUNIT_TEST( Striped_treap_set_memberhook)
750 CPPUNIT_TEST( Striped_treap_set_memberhook_bucket_threshold )
751 CPPUNIT_TEST( Striped_treap_set_memberhook_bucket_threshold_rt )
753 // ***********************************************************
756 CPPUNIT_TEST( Refinable_list_basehook_cmp)
757 CPPUNIT_TEST( Refinable_list_basehook_less)
758 CPPUNIT_TEST( Refinable_list_basehook_cmpmix)
759 CPPUNIT_TEST( Refinable_list_basehook_bucket_threshold)
760 CPPUNIT_TEST( Refinable_list_basehook_bucket_threshold_rt)
761 CPPUNIT_TEST( Refinable_list_memberhook_cmp)
762 CPPUNIT_TEST( Refinable_list_memberhook_less)
763 CPPUNIT_TEST( Refinable_list_memberhook_cmpmix)
764 CPPUNIT_TEST( Refinable_list_memberhook_bucket_threshold)
765 CPPUNIT_TEST( Refinable_list_memberhook_bucket_threshold_rt)
767 CPPUNIT_TEST( Refinable_slist_basehook_cmp)
768 CPPUNIT_TEST( Refinable_slist_basehook_less)
769 CPPUNIT_TEST( Refinable_slist_basehook_cmpmix)
770 CPPUNIT_TEST( Refinable_slist_basehook_bucket_threshold)
771 CPPUNIT_TEST( Refinable_slist_basehook_bucket_threshold_rt)
772 CPPUNIT_TEST( Refinable_slist_memberhook_cmp)
773 CPPUNIT_TEST( Refinable_slist_memberhook_less)
774 CPPUNIT_TEST( Refinable_slist_memberhook_cmpmix)
775 CPPUNIT_TEST( Refinable_slist_memberhook_bucket_threshold)
776 CPPUNIT_TEST( Refinable_slist_memberhook_bucket_threshold_rt)
778 CPPUNIT_TEST( Refinable_set_basehook )
779 CPPUNIT_TEST( Refinable_set_basehook_bucket_threshold )
780 CPPUNIT_TEST( Refinable_set_basehook_bucket_threshold_rt )
781 CPPUNIT_TEST( Refinable_set_memberhook)
782 CPPUNIT_TEST( Refinable_set_memberhook_bucket_threshold )
783 CPPUNIT_TEST( Refinable_set_memberhook_bucket_threshold_rt )
785 CPPUNIT_TEST( Refinable_unordered_set_basehook )
786 CPPUNIT_TEST( Refinable_unordered_set_basehook_bucket_threshold )
787 CPPUNIT_TEST( Refinable_unordered_set_basehook_bucket_threshold_rt )
788 CPPUNIT_TEST( Refinable_unordered_set_memberhook)
789 CPPUNIT_TEST( Refinable_unordered_set_memberhook_bucket_threshold )
790 CPPUNIT_TEST( Refinable_unordered_set_memberhook_bucket_threshold_rt )
792 CPPUNIT_TEST( Refinable_avl_set_basehook )
793 CPPUNIT_TEST( Refinable_avl_set_basehook_bucket_threshold )
794 CPPUNIT_TEST( Refinable_avl_set_basehook_bucket_threshold_rt )
795 CPPUNIT_TEST( Refinable_avl_set_memberhook)
796 CPPUNIT_TEST( Refinable_avl_set_memberhook_bucket_threshold )
797 CPPUNIT_TEST( Refinable_avl_set_memberhook_bucket_threshold_rt )
799 CPPUNIT_TEST( Refinable_sg_set_basehook )
800 CPPUNIT_TEST( Refinable_sg_set_basehook_bucket_threshold )
801 CPPUNIT_TEST( Refinable_sg_set_basehook_bucket_threshold_rt )
802 CPPUNIT_TEST( Refinable_sg_set_memberhook)
803 CPPUNIT_TEST( Refinable_sg_set_memberhook_bucket_threshold )
804 CPPUNIT_TEST( Refinable_sg_set_memberhook_bucket_threshold_rt )
806 CPPUNIT_TEST( Refinable_splay_set_basehook )
807 CPPUNIT_TEST( Refinable_splay_set_basehook_bucket_threshold )
808 CPPUNIT_TEST( Refinable_splay_set_basehook_bucket_threshold_rt )
809 CPPUNIT_TEST( Refinable_splay_set_memberhook)
810 CPPUNIT_TEST( Refinable_splay_set_memberhook_bucket_threshold )
811 CPPUNIT_TEST( Refinable_splay_set_memberhook_bucket_threshold_rt )
813 CPPUNIT_TEST( Refinable_treap_set_basehook )
814 CPPUNIT_TEST( Refinable_treap_set_basehook_bucket_threshold )
815 CPPUNIT_TEST( Refinable_treap_set_basehook_bucket_threshold_rt )
816 CPPUNIT_TEST( Refinable_treap_set_memberhook)
817 CPPUNIT_TEST( Refinable_treap_set_memberhook_bucket_threshold )
818 CPPUNIT_TEST( Refinable_treap_set_memberhook_bucket_threshold_rt )
819 CPPUNIT_TEST_SUITE_END()
823 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_STRIPED_SET_H