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 // cds::intrusive namespace forward declaration
38 namespace cds { namespace intrusive {}}
41 namespace ci = cds::intrusive;
42 namespace co = cds::opt;
47 int operator()( T const & v ) const
54 struct get_int_key<int>
56 int operator()( int i ) const
63 class IntrusiveStripedSetHdrTest: public CppUnitMini::TestCase
68 unsigned int nDisposeCount ; // count of disposer calling
69 unsigned int nFindCount ; // count of find-functor calling
70 unsigned int nFindArgCount;
71 unsigned int nInsertCount;
72 unsigned int nUpdateNewCount;
73 unsigned int nUpdateCount;
74 unsigned int nEraseCount;
78 memset( this, 0, sizeof(*this));
81 stat& operator=( stat const& s)
83 memcpy( this, &s, sizeof(*this));
96 explicit item( int key )
101 item(int key, int val)
122 template <typename Hook>
132 explicit base_item( int key )
136 base_item(int key, int val)
140 base_item(const base_item& v )
141 : item( static_cast<item const&>(v) )
151 template <typename Hook>
161 explicit member_item( int key )
165 member_item(int key, int val)
169 member_item(const member_item& v )
170 : item( static_cast<item const&>(v))
189 size_t operator()( int i ) const
191 return co::v::hash<int>()( i );
193 template <typename Item>
194 size_t operator()( const Item& i ) const
196 return (*this)( i.key() );
198 size_t operator()( find_key const& i) const
200 return co::v::hash<int>()( i.nKey );
204 template <typename T>
207 bool operator ()(const T& v1, const T& v2 ) const
209 return v1.key() < v2.key();
212 template <typename Q>
213 bool operator ()(const T& v1, const Q& v2 ) const
215 return v1.key() < v2;
218 template <typename Q>
219 bool operator ()(const Q& v1, const T& v2 ) const
221 return v1 < v2.key();
224 bool operator()( int i1, int i2 ) const
230 template <typename T>
232 int operator ()(const T& v1, const T& v2 ) const
234 if ( v1.key() < v2.key() )
236 return v1.key() > v2.key() ? 1 : 0;
239 template <typename Q>
240 int operator ()(const T& v1, const Q& v2 ) const
244 return v1.key() > v2 ? 1 : 0;
247 template <typename Q>
248 int operator ()(const Q& v1, const T& v2 ) const
252 return v1 > v2.key() ? 1 : 0;
256 struct faked_disposer
258 template <typename T>
259 void operator ()( T * p )
265 struct insert_functor {
266 template <typename Item>
267 void operator()( Item& e)
273 struct update_functor {
274 template <typename Item>
275 void operator()( bool bNew, Item& e, Item& arg )
279 CPPUNIT_ASSERT_CURRENT( &e == &arg );
286 struct erase_functor {
287 template< typename Item >
288 void operator()( Item& e )
294 struct find_functor {
295 template <typename Item, typename What>
296 void operator()( Item& e, What& )
301 template <typename Item>
302 void operator()( Item& e, Item& w )
310 template <typename Item>
311 bool operator()( Item const& e, find_key const& k ) const
313 return get_int_key<Item>()(e) < k.nKey;
315 template <typename Item>
316 bool operator()( find_key const& k, Item const& e ) const
318 return k.nKey < get_int_key<Item>()(e);
320 template <typename Item1, typename Item2>
321 bool operator()( Item1 const& e, Item2 const& k ) const
323 return get_int_key<Item1>()(e) < get_int_key<Item2>()(k);
327 template <typename T>
328 struct auto_dispose {
330 auto_dispose( T * pArr ): m_pArr( pArr ) {}
331 ~auto_dispose() { delete[] m_pArr; }
335 void test_with(Set& s)
337 typedef typename Set::value_type value_type;
347 value_type e1( k1, v1 );
348 value_type e2( k2, v2 );
349 value_type e3( k3, v3);
355 CPPUNIT_ASSERT( s.empty() );
356 CPPUNIT_ASSERT( s.size() == 0 );
358 CPPUNIT_ASSERT( !s.contains(k1));
359 CPPUNIT_ASSERT( !s.contains(k2));
360 CPPUNIT_ASSERT( !s.contains(k3));
362 CPPUNIT_ASSERT( s.insert(e1));
363 CPPUNIT_ASSERT( s.contains(e1));
364 CPPUNIT_ASSERT( s.contains(k1));
365 CPPUNIT_ASSERT( !s.contains(e2));
366 CPPUNIT_ASSERT( !s.contains(e3));
368 CPPUNIT_ASSERT( e2.nInsertCount == 0 );
369 CPPUNIT_ASSERT( s.insert(e2, insert_functor() ));
370 CPPUNIT_ASSERT( e2.nInsertCount == 1 );
371 CPPUNIT_ASSERT( s.find(e1, find_functor() ));
372 CPPUNIT_ASSERT( e1.nFindCount == 1 );
373 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
374 CPPUNIT_ASSERT( s.find(k1, find_functor() ));
375 CPPUNIT_ASSERT( e1.nFindCount == 2 );
376 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
377 CPPUNIT_ASSERT( s.find(k2, find_functor() ));
378 CPPUNIT_ASSERT( e2.nFindCount == 1 );
379 CPPUNIT_ASSERT( e2.nFindArgCount == 0 );
380 CPPUNIT_ASSERT( s.find(e2, find_functor() ));
381 CPPUNIT_ASSERT( e2.nFindCount == 2 );
382 CPPUNIT_ASSERT( e2.nFindArgCount == 1 );
383 CPPUNIT_ASSERT( !s.find(k3, find_functor()));
384 CPPUNIT_ASSERT( e3.nFindCount == 0 );
385 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
386 CPPUNIT_ASSERT( !s.find(e3, find_functor()));
387 CPPUNIT_ASSERT( e3.nFindCount == 0 );
388 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
390 s1 = e1 ; s2 = e2 ; s3 = e3;
392 CPPUNIT_ASSERT( e3.nUpdateNewCount == 0 );
393 CPPUNIT_ASSERT( e3.nUpdateCount == 0 );
394 CPPUNIT_ASSERT(s.update(e3, update_functor(), false) == std::make_pair(false, false));
395 CPPUNIT_ASSERT(e3.nUpdateNewCount == 0);
396 CPPUNIT_ASSERT(e3.nUpdateCount == 0);
397 CPPUNIT_ASSERT( s.update( e3, update_functor() ) == std::make_pair(true, true));
398 CPPUNIT_ASSERT( e3.nUpdateNewCount == 1 );
399 CPPUNIT_ASSERT( e3.nUpdateCount == 0 );
400 CPPUNIT_ASSERT( s.find_with(find_key(k1), less2(), find_functor() ));
401 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
402 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
403 CPPUNIT_ASSERT( s.find_with(k1, less2(), find_functor() ));
404 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
405 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
406 CPPUNIT_ASSERT( s.find_with(k2, less2(), find_functor() ));
407 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
408 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
409 CPPUNIT_ASSERT( s.contains(find_key(k2), less2() ));
410 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 ) ; // unchanged, no find_functor
411 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
412 CPPUNIT_ASSERT( s.contains(k3, less2() ));
413 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount ) ; // unchanged, no find_functor
414 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
415 CPPUNIT_ASSERT( s.find_with(find_key(k3), less2(), find_functor() ));
416 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
417 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
419 s1 = e1 ; s2 = e2 ; s3 = e3;
421 // insert existing elements
423 value_type eu( k2, 1000 );
424 CPPUNIT_ASSERT( !s.insert( eu ));
425 CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
426 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
428 CPPUNIT_ASSERT( s.update( eu, update_functor()) == std::make_pair(true, false));
429 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
430 CPPUNIT_ASSERT( e2.nUpdateCount == s2.nUpdateCount + 1 );
431 CPPUNIT_ASSERT( e2.nUpdateNewCount == s2.nUpdateNewCount );
434 s1 = e1 ; s2 = e2 ; s3 = e3;
436 // unlink & erase test
438 value_type eu( k2, 10 );
439 CPPUNIT_ASSERT( !s.unlink(eu));
442 CPPUNIT_ASSERT( !s.empty() );
443 CPPUNIT_ASSERT( s.size() == 3 );
445 CPPUNIT_ASSERT( s.unlink( e1 ) );
446 CPPUNIT_ASSERT( s.erase_with( k2, less2() ) == &e2 );
447 CPPUNIT_ASSERT( s.erase( e2 ) == nullptr );
448 CPPUNIT_ASSERT( e3.nEraseCount == 0 );
449 CPPUNIT_ASSERT( s.erase_with( k3, less2(), erase_functor()) == &e3 );
450 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
451 CPPUNIT_ASSERT( s.erase( k3, erase_functor() ) == nullptr );
452 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
454 CPPUNIT_ASSERT( s.insert( e3 ) );
455 CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
456 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
458 CPPUNIT_ASSERT( s.empty() );
459 CPPUNIT_ASSERT( s.size() == 0 );
461 s1 = e1 ; s2 = e2 ; s3 = e3;
463 // clear & clear_and_dispose test
464 CPPUNIT_ASSERT( s.insert(e1));
465 CPPUNIT_ASSERT( s.insert(e2));
466 CPPUNIT_ASSERT( s.insert(e3));
467 CPPUNIT_ASSERT( !s.empty() );
468 CPPUNIT_ASSERT( s.size() == 3 );
470 CPPUNIT_ASSERT( s.empty() );
471 CPPUNIT_ASSERT( s.size() == 0 );
473 CPPUNIT_ASSERT( s.insert(e1));
474 CPPUNIT_ASSERT( s.insert(e2));
475 CPPUNIT_ASSERT( s.insert(e3));
476 CPPUNIT_ASSERT( !s.empty() );
477 CPPUNIT_ASSERT( s.size() == 3 );
479 CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
480 CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
481 CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
482 s.clear_and_dispose( faked_disposer() );
483 CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
484 CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
485 CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
486 CPPUNIT_ASSERT( s.empty() );
487 CPPUNIT_ASSERT( s.size() == 0 );
489 // resize test (up to 64K elements)
490 size_t const nSize = 64 * 1024;
491 value_type * arr = new value_type[nSize];
492 auto_dispose<value_type> ad(arr);
493 for ( size_t i = 0; i < nSize; ++i ) {
494 value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
495 CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
496 CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
497 //for ( size_t j = 0; j <= i; ++j ) {
498 // if ( !s.contains((int) j) ) {
499 // CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
504 for ( size_t i = 0; i < nSize; ++i )
505 CPPUNIT_ASSERT_EX( s.contains((int) i), "Key " << i << " is not found" );
507 CPPUNIT_ASSERT( !s.empty() );
508 CPPUNIT_ASSERT( s.size() == nSize );
509 s.clear_and_dispose( faked_disposer() );
510 for ( size_t i = 0; i < nSize; ++i ) {
511 CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
524 // ctor with explicit initial capacity
534 unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
535 Set s( 256, nProbesetSize, nProbesetSize / 2 );
539 // ***********************************************************
542 void Striped_list_basehook_cmp();
543 void Striped_list_basehook_less();
544 void Striped_list_basehook_cmpmix();
545 void Striped_list_basehook_bucket_threshold();
546 void Striped_list_basehook_bucket_threshold_rt();
547 void Striped_list_memberhook_cmp();
548 void Striped_list_memberhook_less();
549 void Striped_list_memberhook_cmpmix();
550 void Striped_list_memberhook_bucket_threshold();
551 void Striped_list_memberhook_bucket_threshold_rt();
553 void Striped_slist_basehook_cmp();
554 void Striped_slist_basehook_less();
555 void Striped_slist_basehook_cmpmix();
556 void Striped_slist_basehook_bucket_threshold();
557 void Striped_slist_basehook_bucket_threshold_rt();
558 void Striped_slist_memberhook_cmp();
559 void Striped_slist_memberhook_less();
560 void Striped_slist_memberhook_cmpmix();
561 void Striped_slist_memberhook_bucket_threshold();
562 void Striped_slist_memberhook_bucket_threshold_rt();
564 void Striped_set_basehook();
565 void Striped_set_basehook_bucket_threshold();
566 void Striped_set_basehook_bucket_threshold_rt();
567 void Striped_set_memberhook();
568 void Striped_set_memberhook_bucket_threshold();
569 void Striped_set_memberhook_bucket_threshold_rt();
571 void Striped_unordered_set_basehook();
572 void Striped_unordered_set_basehook_bucket_threshold();
573 void Striped_unordered_set_basehook_bucket_threshold_rt();
574 void Striped_unordered_set_memberhook();
575 void Striped_unordered_set_memberhook_bucket_threshold();
576 void Striped_unordered_set_memberhook_bucket_threshold_rt();
578 void Striped_avl_set_basehook();
579 void Striped_avl_set_basehook_bucket_threshold();
580 void Striped_avl_set_basehook_bucket_threshold_rt();
581 void Striped_avl_set_memberhook();
582 void Striped_avl_set_memberhook_bucket_threshold();
583 void Striped_avl_set_memberhook_bucket_threshold_rt();
585 void Striped_sg_set_basehook();
586 void Striped_sg_set_basehook_bucket_threshold();
587 void Striped_sg_set_basehook_bucket_threshold_rt();
588 void Striped_sg_set_memberhook();
589 void Striped_sg_set_memberhook_bucket_threshold();
590 void Striped_sg_set_memberhook_bucket_threshold_rt();
592 void Striped_splay_set_basehook();
593 void Striped_splay_set_basehook_bucket_threshold();
594 void Striped_splay_set_basehook_bucket_threshold_rt();
595 void Striped_splay_set_memberhook();
596 void Striped_splay_set_memberhook_bucket_threshold();
597 void Striped_splay_set_memberhook_bucket_threshold_rt();
599 void Striped_treap_set_basehook();
600 void Striped_treap_set_basehook_bucket_threshold();
601 void Striped_treap_set_basehook_bucket_threshold_rt();
602 void Striped_treap_set_memberhook();
603 void Striped_treap_set_memberhook_bucket_threshold();
604 void Striped_treap_set_memberhook_bucket_threshold_rt();
606 // ***********************************************************
609 void Refinable_list_basehook_cmp();
610 void Refinable_list_basehook_less();
611 void Refinable_list_basehook_cmpmix();
612 void Refinable_list_basehook_bucket_threshold();
613 void Refinable_list_basehook_bucket_threshold_rt();
614 void Refinable_list_memberhook_cmp();
615 void Refinable_list_memberhook_less();
616 void Refinable_list_memberhook_cmpmix();
617 void Refinable_list_memberhook_bucket_threshold();
618 void Refinable_list_memberhook_bucket_threshold_rt();
620 void Refinable_slist_basehook_cmp();
621 void Refinable_slist_basehook_less();
622 void Refinable_slist_basehook_cmpmix();
623 void Refinable_slist_basehook_bucket_threshold();
624 void Refinable_slist_basehook_bucket_threshold_rt();
625 void Refinable_slist_memberhook_cmp();
626 void Refinable_slist_memberhook_less();
627 void Refinable_slist_memberhook_cmpmix();
628 void Refinable_slist_memberhook_bucket_threshold();
629 void Refinable_slist_memberhook_bucket_threshold_rt();
631 void Refinable_set_basehook();
632 void Refinable_set_basehook_bucket_threshold();
633 void Refinable_set_basehook_bucket_threshold_rt();
634 void Refinable_set_memberhook();
635 void Refinable_set_memberhook_bucket_threshold();
636 void Refinable_set_memberhook_bucket_threshold_rt();
638 void Refinable_unordered_set_basehook();
639 void Refinable_unordered_set_basehook_bucket_threshold();
640 void Refinable_unordered_set_basehook_bucket_threshold_rt();
641 void Refinable_unordered_set_memberhook();
642 void Refinable_unordered_set_memberhook_bucket_threshold();
643 void Refinable_unordered_set_memberhook_bucket_threshold_rt();
645 void Refinable_avl_set_basehook();
646 void Refinable_avl_set_basehook_bucket_threshold();
647 void Refinable_avl_set_basehook_bucket_threshold_rt();
648 void Refinable_avl_set_memberhook();
649 void Refinable_avl_set_memberhook_bucket_threshold();
650 void Refinable_avl_set_memberhook_bucket_threshold_rt();
652 void Refinable_sg_set_basehook();
653 void Refinable_sg_set_basehook_bucket_threshold();
654 void Refinable_sg_set_basehook_bucket_threshold_rt();
655 void Refinable_sg_set_memberhook();
656 void Refinable_sg_set_memberhook_bucket_threshold();
657 void Refinable_sg_set_memberhook_bucket_threshold_rt();
659 void Refinable_splay_set_basehook();
660 void Refinable_splay_set_basehook_bucket_threshold();
661 void Refinable_splay_set_basehook_bucket_threshold_rt();
662 void Refinable_splay_set_memberhook();
663 void Refinable_splay_set_memberhook_bucket_threshold();
664 void Refinable_splay_set_memberhook_bucket_threshold_rt();
666 void Refinable_treap_set_basehook();
667 void Refinable_treap_set_basehook_bucket_threshold();
668 void Refinable_treap_set_basehook_bucket_threshold_rt();
669 void Refinable_treap_set_memberhook();
670 void Refinable_treap_set_memberhook_bucket_threshold();
671 void Refinable_treap_set_memberhook_bucket_threshold_rt();
673 CPPUNIT_TEST_SUITE(IntrusiveStripedSetHdrTest)
674 // ***********************************************************
677 CPPUNIT_TEST( Striped_list_basehook_cmp)
678 CPPUNIT_TEST( Striped_list_basehook_less)
679 CPPUNIT_TEST( Striped_list_basehook_cmpmix)
680 CPPUNIT_TEST( Striped_list_basehook_bucket_threshold)
681 CPPUNIT_TEST( Striped_list_basehook_bucket_threshold_rt)
682 CPPUNIT_TEST( Striped_list_memberhook_cmp)
683 CPPUNIT_TEST( Striped_list_memberhook_less)
684 CPPUNIT_TEST( Striped_list_memberhook_cmpmix)
685 CPPUNIT_TEST( Striped_list_memberhook_bucket_threshold)
686 CPPUNIT_TEST( Striped_list_memberhook_bucket_threshold_rt)
688 CPPUNIT_TEST( Striped_slist_basehook_cmp)
689 CPPUNIT_TEST( Striped_slist_basehook_less)
690 CPPUNIT_TEST( Striped_slist_basehook_cmpmix)
691 CPPUNIT_TEST( Striped_slist_basehook_bucket_threshold)
692 CPPUNIT_TEST( Striped_slist_basehook_bucket_threshold_rt)
693 CPPUNIT_TEST( Striped_slist_memberhook_cmp)
694 CPPUNIT_TEST( Striped_slist_memberhook_less)
695 CPPUNIT_TEST( Striped_slist_memberhook_cmpmix)
696 CPPUNIT_TEST( Striped_slist_memberhook_bucket_threshold)
697 CPPUNIT_TEST( Striped_slist_memberhook_bucket_threshold_rt)
699 CPPUNIT_TEST( Striped_set_basehook )
700 CPPUNIT_TEST( Striped_set_basehook_bucket_threshold )
701 CPPUNIT_TEST( Striped_set_basehook_bucket_threshold_rt )
702 CPPUNIT_TEST( Striped_set_memberhook)
703 CPPUNIT_TEST( Striped_set_memberhook_bucket_threshold )
704 CPPUNIT_TEST( Striped_set_memberhook_bucket_threshold_rt )
706 CPPUNIT_TEST( Striped_unordered_set_basehook )
707 CPPUNIT_TEST( Striped_unordered_set_basehook_bucket_threshold )
708 CPPUNIT_TEST( Striped_unordered_set_basehook_bucket_threshold_rt )
709 CPPUNIT_TEST( Striped_unordered_set_memberhook)
710 CPPUNIT_TEST( Striped_unordered_set_memberhook_bucket_threshold )
711 CPPUNIT_TEST( Striped_unordered_set_memberhook_bucket_threshold_rt )
713 CPPUNIT_TEST( Striped_avl_set_basehook )
714 CPPUNIT_TEST( Striped_avl_set_basehook_bucket_threshold )
715 CPPUNIT_TEST( Striped_avl_set_basehook_bucket_threshold_rt )
716 CPPUNIT_TEST( Striped_avl_set_memberhook)
717 CPPUNIT_TEST( Striped_avl_set_memberhook_bucket_threshold )
718 CPPUNIT_TEST( Striped_avl_set_memberhook_bucket_threshold_rt )
720 CPPUNIT_TEST( Striped_sg_set_basehook )
721 CPPUNIT_TEST( Striped_sg_set_basehook_bucket_threshold )
722 CPPUNIT_TEST( Striped_sg_set_basehook_bucket_threshold_rt )
723 CPPUNIT_TEST( Striped_sg_set_memberhook)
724 CPPUNIT_TEST( Striped_sg_set_memberhook_bucket_threshold )
725 CPPUNIT_TEST( Striped_sg_set_memberhook_bucket_threshold_rt )
727 CPPUNIT_TEST( Striped_splay_set_basehook )
728 CPPUNIT_TEST( Striped_splay_set_basehook_bucket_threshold )
729 CPPUNIT_TEST( Striped_splay_set_basehook_bucket_threshold_rt )
730 CPPUNIT_TEST( Striped_splay_set_memberhook)
731 CPPUNIT_TEST( Striped_splay_set_memberhook_bucket_threshold )
732 CPPUNIT_TEST( Striped_splay_set_memberhook_bucket_threshold_rt )
734 CPPUNIT_TEST( Striped_treap_set_basehook )
735 CPPUNIT_TEST( Striped_treap_set_basehook_bucket_threshold )
736 CPPUNIT_TEST( Striped_treap_set_basehook_bucket_threshold_rt )
737 CPPUNIT_TEST( Striped_treap_set_memberhook)
738 CPPUNIT_TEST( Striped_treap_set_memberhook_bucket_threshold )
739 CPPUNIT_TEST( Striped_treap_set_memberhook_bucket_threshold_rt )
741 // ***********************************************************
744 CPPUNIT_TEST( Refinable_list_basehook_cmp)
745 CPPUNIT_TEST( Refinable_list_basehook_less)
746 CPPUNIT_TEST( Refinable_list_basehook_cmpmix)
747 CPPUNIT_TEST( Refinable_list_basehook_bucket_threshold)
748 CPPUNIT_TEST( Refinable_list_basehook_bucket_threshold_rt)
749 CPPUNIT_TEST( Refinable_list_memberhook_cmp)
750 CPPUNIT_TEST( Refinable_list_memberhook_less)
751 CPPUNIT_TEST( Refinable_list_memberhook_cmpmix)
752 CPPUNIT_TEST( Refinable_list_memberhook_bucket_threshold)
753 CPPUNIT_TEST( Refinable_list_memberhook_bucket_threshold_rt)
755 CPPUNIT_TEST( Refinable_slist_basehook_cmp)
756 CPPUNIT_TEST( Refinable_slist_basehook_less)
757 CPPUNIT_TEST( Refinable_slist_basehook_cmpmix)
758 CPPUNIT_TEST( Refinable_slist_basehook_bucket_threshold)
759 CPPUNIT_TEST( Refinable_slist_basehook_bucket_threshold_rt)
760 CPPUNIT_TEST( Refinable_slist_memberhook_cmp)
761 CPPUNIT_TEST( Refinable_slist_memberhook_less)
762 CPPUNIT_TEST( Refinable_slist_memberhook_cmpmix)
763 CPPUNIT_TEST( Refinable_slist_memberhook_bucket_threshold)
764 CPPUNIT_TEST( Refinable_slist_memberhook_bucket_threshold_rt)
766 CPPUNIT_TEST( Refinable_set_basehook )
767 CPPUNIT_TEST( Refinable_set_basehook_bucket_threshold )
768 CPPUNIT_TEST( Refinable_set_basehook_bucket_threshold_rt )
769 CPPUNIT_TEST( Refinable_set_memberhook)
770 CPPUNIT_TEST( Refinable_set_memberhook_bucket_threshold )
771 CPPUNIT_TEST( Refinable_set_memberhook_bucket_threshold_rt )
773 CPPUNIT_TEST( Refinable_unordered_set_basehook )
774 CPPUNIT_TEST( Refinable_unordered_set_basehook_bucket_threshold )
775 CPPUNIT_TEST( Refinable_unordered_set_basehook_bucket_threshold_rt )
776 CPPUNIT_TEST( Refinable_unordered_set_memberhook)
777 CPPUNIT_TEST( Refinable_unordered_set_memberhook_bucket_threshold )
778 CPPUNIT_TEST( Refinable_unordered_set_memberhook_bucket_threshold_rt )
780 CPPUNIT_TEST( Refinable_avl_set_basehook )
781 CPPUNIT_TEST( Refinable_avl_set_basehook_bucket_threshold )
782 CPPUNIT_TEST( Refinable_avl_set_basehook_bucket_threshold_rt )
783 CPPUNIT_TEST( Refinable_avl_set_memberhook)
784 CPPUNIT_TEST( Refinable_avl_set_memberhook_bucket_threshold )
785 CPPUNIT_TEST( Refinable_avl_set_memberhook_bucket_threshold_rt )
787 CPPUNIT_TEST( Refinable_sg_set_basehook )
788 CPPUNIT_TEST( Refinable_sg_set_basehook_bucket_threshold )
789 CPPUNIT_TEST( Refinable_sg_set_basehook_bucket_threshold_rt )
790 CPPUNIT_TEST( Refinable_sg_set_memberhook)
791 CPPUNIT_TEST( Refinable_sg_set_memberhook_bucket_threshold )
792 CPPUNIT_TEST( Refinable_sg_set_memberhook_bucket_threshold_rt )
794 CPPUNIT_TEST( Refinable_splay_set_basehook )
795 CPPUNIT_TEST( Refinable_splay_set_basehook_bucket_threshold )
796 CPPUNIT_TEST( Refinable_splay_set_basehook_bucket_threshold_rt )
797 CPPUNIT_TEST( Refinable_splay_set_memberhook)
798 CPPUNIT_TEST( Refinable_splay_set_memberhook_bucket_threshold )
799 CPPUNIT_TEST( Refinable_splay_set_memberhook_bucket_threshold_rt )
801 CPPUNIT_TEST( Refinable_treap_set_basehook )
802 CPPUNIT_TEST( Refinable_treap_set_basehook_bucket_threshold )
803 CPPUNIT_TEST( Refinable_treap_set_basehook_bucket_threshold_rt )
804 CPPUNIT_TEST( Refinable_treap_set_memberhook)
805 CPPUNIT_TEST( Refinable_treap_set_memberhook_bucket_threshold )
806 CPPUNIT_TEST( Refinable_treap_set_memberhook_bucket_threshold_rt )
807 CPPUNIT_TEST_SUITE_END()
811 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_STRIPED_SET_H