3 #ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H
4 #define CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H
6 #include "cppunit/cppunit_proxy.h"
7 #include <cds/opt/hash.h>
9 // cds::intrusive namespace forward declaration
10 namespace cds { namespace intrusive {}}
13 namespace ci = cds::intrusive;
14 namespace co = cds::opt;
17 class IntrusiveCuckooSetHdrTest: public CppUnitMini::TestCase
22 unsigned int nDisposeCount ; // count of disposer calling
23 unsigned int nFindCount ; // count of find-functor calling
24 unsigned int nFindArgCount;
25 unsigned int nInsertCount;
26 unsigned int nEnsureNewCount;
27 unsigned int nEnsureCount;
28 unsigned int nEraseCount;
32 memset( this, 0, sizeof(*this));
35 stat& operator=( stat const& s)
37 memcpy( this, &s, sizeof(*this));
50 item(int key, int val)
71 template <typename Hook>
81 base_item(int key, int val)
85 base_item(const base_item& v )
86 : item( static_cast<item const&>(v) )
91 template <typename Hook>
101 member_item(int key, int val)
105 member_item(const member_item& v )
106 : item( static_cast<item const&>(v))
120 size_t operator()( int i ) const
122 return co::v::hash<int>()( i );
124 template <typename Item>
125 size_t operator()( const Item& i ) const
127 return (*this)( i.key() );
129 size_t operator()( find_key const& i) const
131 return co::v::hash<int>()( i.nKey );
135 template <typename T>
138 bool operator ()(const T& v1, const T& v2 ) const
140 return v1.key() < v2.key();
143 template <typename Q>
144 bool operator ()(const T& v1, const Q& v2 ) const
146 return v1.key() < v2;
149 template <typename Q>
150 bool operator ()(const Q& v1, const T& v2 ) const
152 return v1 < v2.key();
156 template <typename T>
158 int operator ()(const T& v1, const T& v2 ) const
160 if ( v1.key() < v2.key() )
162 return v1.key() > v2.key() ? 1 : 0;
165 template <typename Q>
166 int operator ()(const T& v1, const Q& v2 ) const
170 return v1.key() > v2 ? 1 : 0;
173 template <typename Q>
174 int operator ()(const Q& v1, const T& v2 ) const
178 return v1 > v2.key() ? 1 : 0;
182 struct faked_disposer
184 template <typename T>
185 void operator ()( T * p )
191 struct insert_functor {
192 template <typename Item>
193 void operator()( Item& e)
199 struct update_functor {
200 template <typename Item>
201 void operator()( bool bNew, Item& e, Item& arg )
205 CPPUNIT_ASSERT_CURRENT( &e == &arg );
212 struct erase_functor {
213 template< typename Item >
214 void operator()( Item& e )
220 struct find_functor {
221 template <typename Item, typename What>
222 void operator()( Item& e, What& )
227 template <typename Item>
228 void operator()( Item& e, Item& w )
236 template <typename Item>
237 bool operator()( Item const& e, find_key const& k ) const
239 return e.key() < k.nKey;
241 template <typename Item>
242 bool operator()( find_key const& k, Item const& e ) const
244 return k.nKey < e.key();
246 template <typename Item>
247 bool operator()( Item const& e, int k ) const
251 template <typename Item>
252 bool operator()( int k, Item const& e ) const
259 template <typename Item>
260 bool operator()( Item const& e, find_key const& k ) const
262 return e.key() == k.nKey;
264 template <typename Item>
265 bool operator()( find_key const& k, Item const& e ) const
267 return k.nKey == e.key();
269 template <typename Item>
270 bool operator()( Item const& e, int k ) const
274 template <typename Item>
275 bool operator()( int k, Item const& e ) const
281 template <typename T>
282 struct auto_dispose {
284 auto_dispose( T * pArr ): m_pArr( pArr ) {}
285 ~auto_dispose() { delete[] m_pArr; }
289 void test_with(Set& s)
291 typedef typename Set::value_type value_type;
301 value_type e1( k1, v1 );
302 value_type e2( k2, v2 );
303 value_type e3( k3, v3);
309 CPPUNIT_ASSERT( s.empty() );
310 CPPUNIT_ASSERT( s.size() == 0 );
312 CPPUNIT_ASSERT( !s.contains(k1));
313 CPPUNIT_ASSERT( !s.contains(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
314 CPPUNIT_ASSERT( !s.contains(k3));
316 CPPUNIT_ASSERT( s.insert(e1));
317 CPPUNIT_ASSERT( s.contains(e1));
318 CPPUNIT_ASSERT( s.contains(k1));
319 CPPUNIT_ASSERT( s.contains(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type()));
320 CPPUNIT_ASSERT( !s.contains(e2));
321 CPPUNIT_ASSERT( !s.contains(e3));
323 CPPUNIT_ASSERT( e2.nInsertCount == 0 );
324 CPPUNIT_ASSERT( s.insert(e2, insert_functor() ));
325 CPPUNIT_ASSERT( e2.nInsertCount == 1 );
326 CPPUNIT_ASSERT( s.find(e1, find_functor() ));
327 CPPUNIT_ASSERT( e1.nFindCount == 1 );
328 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
329 CPPUNIT_ASSERT( s.find(k1, find_functor() ));
330 CPPUNIT_ASSERT( e1.nFindCount == 2 );
331 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
332 CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
333 CPPUNIT_ASSERT( e2.nFindCount == 1 );
334 CPPUNIT_ASSERT( e2.nFindArgCount == 0 );
335 CPPUNIT_ASSERT( s.find(e2, find_functor() ));
336 CPPUNIT_ASSERT( e2.nFindCount == 2 );
337 CPPUNIT_ASSERT( e2.nFindArgCount == 1 );
338 CPPUNIT_ASSERT( !s.find(k3, find_functor()));
339 CPPUNIT_ASSERT( e3.nFindCount == 0 );
340 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
341 CPPUNIT_ASSERT( !s.find(e3, find_functor()));
342 CPPUNIT_ASSERT( e3.nFindCount == 0 );
343 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
345 s1 = e1 ; s2 = e2 ; s3 = e3;
347 CPPUNIT_ASSERT( e3.nEnsureNewCount == 0 );
348 CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
349 CPPUNIT_ASSERT(s.update(e3, update_functor(), false) == std::make_pair(false, false));
350 CPPUNIT_ASSERT(e3.nEnsureNewCount == 0);
351 CPPUNIT_ASSERT(e3.nEnsureCount == 0);
352 CPPUNIT_ASSERT( s.update( e3, update_functor() ) == std::make_pair(true, true));
353 CPPUNIT_ASSERT( e3.nEnsureNewCount == 1 );
354 CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
355 CPPUNIT_ASSERT( s.find_with(find_key(k1), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
356 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
357 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
358 CPPUNIT_ASSERT( s.find_with(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
359 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
360 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
361 CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
362 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
363 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
364 CPPUNIT_ASSERT( s.contains(find_key(k2), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
365 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 ) ; // unchanged, no find_functor
366 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
367 CPPUNIT_ASSERT( s.contains(k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
368 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount ) ; // unchanged, no find_functor
369 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
370 CPPUNIT_ASSERT( s.find_with(find_key(k3), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
371 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
372 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
374 s1 = e1 ; s2 = e2 ; s3 = e3;
376 // insert existing elements
378 value_type eu( k2, 1000 );
379 CPPUNIT_ASSERT( !s.insert( eu ));
380 CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
381 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
383 CPPUNIT_ASSERT( s.update( eu, update_functor()) == std::make_pair(true, false));
384 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
385 CPPUNIT_ASSERT( e2.nEnsureCount == s2.nEnsureCount + 1 );
386 CPPUNIT_ASSERT( e2.nEnsureNewCount == s2.nEnsureNewCount );
389 s1 = e1 ; s2 = e2 ; s3 = e3;
391 // unlink & erase test
393 value_type eu( k2, 10 );
394 CPPUNIT_ASSERT( !s.unlink(eu));
397 CPPUNIT_ASSERT( !s.empty() );
398 CPPUNIT_ASSERT( s.size() == 3 );
400 CPPUNIT_ASSERT( s.unlink( e1 ) );
401 CPPUNIT_ASSERT( s.erase_with( k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ) == &e2 );
402 CPPUNIT_ASSERT( s.erase( e2 ) == nullptr );
403 CPPUNIT_ASSERT( e3.nEraseCount == 0 );
404 CPPUNIT_ASSERT( s.erase_with( k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), erase_functor()) == &e3 );
405 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
406 CPPUNIT_ASSERT( s.erase( k3, erase_functor() ) == nullptr );
407 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
409 CPPUNIT_ASSERT( s.insert( e3 ) );
410 CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
411 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
413 CPPUNIT_ASSERT( s.empty() );
414 CPPUNIT_ASSERT( s.size() == 0 );
416 s1 = e1 ; s2 = e2 ; s3 = e3;
418 // clear & clear_and_dispose test
419 CPPUNIT_ASSERT( s.insert(e1));
420 CPPUNIT_ASSERT( s.insert(e2));
421 CPPUNIT_ASSERT( s.insert(e3));
422 CPPUNIT_ASSERT( !s.empty() );
423 CPPUNIT_ASSERT( s.size() == 3 );
425 CPPUNIT_ASSERT( s.empty() );
426 CPPUNIT_ASSERT( s.size() == 0 );
428 CPPUNIT_ASSERT( s.insert(e1));
429 CPPUNIT_ASSERT( s.insert(e2));
430 CPPUNIT_ASSERT( s.insert(e3));
431 CPPUNIT_ASSERT( !s.empty() );
432 CPPUNIT_ASSERT( s.size() == 3 );
434 CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
435 CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
436 CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
437 s.clear_and_dispose( faked_disposer() );
438 CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
439 CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
440 CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
441 CPPUNIT_ASSERT( s.empty() );
442 CPPUNIT_ASSERT( s.size() == 0 );
444 // resize test (up to 64K elements)
445 size_t const nSize = 64 * 1024;
446 value_type * arr = new value_type[nSize];
447 auto_dispose<value_type> ad(arr);
448 for ( size_t i = 0; i < nSize; ++i ) {
449 value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
450 CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
451 CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
452 //for ( size_t j = 0; j <= i; ++j ) {
453 // if ( !s.contains((int) j) ) {
454 // CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
459 for ( size_t i = 0; i < nSize; ++i )
460 CPPUNIT_ASSERT_EX( s.contains((int) i), "Key " << i << " is not found" );
462 CPPUNIT_ASSERT( !s.empty() );
463 CPPUNIT_ASSERT( s.size() == nSize );
464 s.clear_and_dispose( faked_disposer() );
465 for ( size_t i = 0; i < nSize; ++i ) {
466 CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
479 // ctor with explicit initial capacity
489 unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
490 Set s( 256, nProbesetSize, nProbesetSize / 2 );
494 // ***********************************************************
495 // Cuckoo hashing (striped)
497 void Cuckoo_striped_list_basehook_equal();
498 void Cuckoo_striped_vector_basehook_equal();
499 void Cuckoo_striped_list_basehook_sort_cmp();
500 void Cuckoo_striped_vector_basehook_sort_cmp();
501 void Cuckoo_striped_list_basehook_sort_less();
502 void Cuckoo_striped_vector_basehook_sort_less();
503 void Cuckoo_striped_list_basehook_sort_cmpmix();
504 void Cuckoo_striped_vector_basehook_sort_cmpmix();
505 void Cuckoo_striped_vector_basehook_sort_cmpmix_stat();
507 void Cuckoo_striped_list_basehook_equal_storehash();
508 void Cuckoo_striped_vector_basehook_equal_storehash();
509 void Cuckoo_striped_list_basehook_sort_cmp_storehash();
510 void Cuckoo_striped_vector_basehook_sort_cmp_storehash();
511 void Cuckoo_striped_list_basehook_sort_less_storehash();
512 void Cuckoo_striped_vector_basehook_sort_less_storehash();
513 void Cuckoo_striped_list_basehook_sort_cmpmix_storehash();
514 void Cuckoo_striped_vector_basehook_sort_cmpmix_storehash();
516 void Cuckoo_striped_list_memberhook_equal();
517 void Cuckoo_striped_vector_memberhook_equal();
518 void Cuckoo_striped_list_memberhook_sort_cmp();
519 void Cuckoo_striped_vector_memberhook_sort_cmp();
520 void Cuckoo_striped_list_memberhook_sort_less();
521 void Cuckoo_striped_vector_memberhook_sort_less();
522 void Cuckoo_striped_list_memberhook_sort_cmpmix();
523 void Cuckoo_striped_vector_memberhook_sort_cmpmix();
525 void Cuckoo_striped_list_memberhook_equal_storehash();
526 void Cuckoo_striped_vector_memberhook_equal_storehash();
527 void Cuckoo_striped_list_memberhook_sort_cmp_storehash();
528 void Cuckoo_striped_vector_memberhook_sort_cmp_storehash();
529 void Cuckoo_striped_list_memberhook_sort_less_storehash();
530 void Cuckoo_striped_vector_memberhook_sort_less_storehash();
531 void Cuckoo_striped_list_memberhook_sort_cmpmix_storehash();
532 void Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash();
534 // ***********************************************************
535 // Cuckoo hashing (refinable)
537 void Cuckoo_refinable_list_basehook_equal();
538 void Cuckoo_refinable_vector_basehook_equal();
539 void Cuckoo_refinable_list_basehook_sort_cmp();
540 void Cuckoo_refinable_vector_basehook_sort_cmp();
541 void Cuckoo_refinable_list_basehook_sort_less();
542 void Cuckoo_refinable_vector_basehook_sort_less();
543 void Cuckoo_refinable_list_basehook_sort_cmpmix();
544 void Cuckoo_refinable_vector_basehook_sort_cmpmix();
545 void Cuckoo_refinable_vector_basehook_sort_cmpmix_stat();
547 void Cuckoo_refinable_list_basehook_equal_storehash();
548 void Cuckoo_refinable_vector_basehook_equal_storehash();
549 void Cuckoo_refinable_list_basehook_sort_cmp_storehash();
550 void Cuckoo_refinable_vector_basehook_sort_cmp_storehash();
551 void Cuckoo_refinable_list_basehook_sort_less_storehash();
552 void Cuckoo_refinable_vector_basehook_sort_less_storehash();
553 void Cuckoo_refinable_list_basehook_sort_cmpmix_storehash();
554 void Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash();
556 void Cuckoo_refinable_list_memberhook_equal();
557 void Cuckoo_refinable_vector_memberhook_equal();
558 void Cuckoo_refinable_list_memberhook_sort_cmp();
559 void Cuckoo_refinable_vector_memberhook_sort_cmp();
560 void Cuckoo_refinable_list_memberhook_sort_less();
561 void Cuckoo_refinable_vector_memberhook_sort_less();
562 void Cuckoo_refinable_list_memberhook_sort_cmpmix();
563 void Cuckoo_refinable_vector_memberhook_sort_cmpmix();
565 void Cuckoo_refinable_list_memberhook_equal_storehash();
566 void Cuckoo_refinable_vector_memberhook_equal_storehash();
567 void Cuckoo_refinable_list_memberhook_sort_cmp_storehash();
568 void Cuckoo_refinable_vector_memberhook_sort_cmp_storehash();
569 void Cuckoo_refinable_list_memberhook_sort_less_storehash();
570 void Cuckoo_refinable_vector_memberhook_sort_less_storehash();
571 void Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash();
572 void Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash();
574 CPPUNIT_TEST_SUITE(IntrusiveCuckooSetHdrTest)
575 // ***********************************************************
576 // Cuckoo hashing (striped)
578 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal)
579 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal)
580 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp)
581 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp)
582 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less)
583 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less)
584 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix)
585 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix)
586 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_stat)
588 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal_storehash)
589 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal_storehash)
590 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp_storehash)
591 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp_storehash)
592 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less_storehash)
593 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less_storehash)
594 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix_storehash)
595 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_storehash)
597 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal)
598 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal)
599 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp)
600 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp)
601 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less)
602 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less)
603 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix)
604 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix)
606 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal_storehash)
607 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal_storehash)
608 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp_storehash)
609 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp_storehash)
610 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less_storehash)
611 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less_storehash)
612 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix_storehash)
613 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash)
615 // ***********************************************************
616 // Cuckoo hashing (refinable)
618 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal)
619 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal)
620 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp)
621 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp)
622 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less)
623 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less)
624 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix)
625 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix)
626 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_stat)
628 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal_storehash)
629 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal_storehash)
630 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp_storehash)
631 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp_storehash)
632 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less_storehash)
633 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less_storehash)
634 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix_storehash)
635 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash)
637 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal)
638 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal)
639 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp)
640 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp)
641 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less)
642 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less)
643 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix)
644 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix)
646 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal_storehash)
647 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal_storehash)
648 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp_storehash)
649 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp_storehash)
650 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less_storehash)
651 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less_storehash)
652 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash)
653 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash)
655 CPPUNIT_TEST_SUITE_END()
659 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H