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 ensure_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.find(k1));
313 CPPUNIT_ASSERT( !s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
314 CPPUNIT_ASSERT( !s.find(k3));
316 CPPUNIT_ASSERT( s.insert(e1));
317 CPPUNIT_ASSERT( s.find(e1));
318 CPPUNIT_ASSERT( s.find(k1));
319 CPPUNIT_ASSERT( s.find_with(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type()));
320 CPPUNIT_ASSERT( !s.find(e2));
321 CPPUNIT_ASSERT( !s.find(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.ensure( e3, ensure_functor() ) == std::make_pair(true, true));
350 CPPUNIT_ASSERT( e3.nEnsureNewCount == 1 );
351 CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
352 CPPUNIT_ASSERT( s.find_with(find_key(k1), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
353 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
354 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
355 CPPUNIT_ASSERT( s.find_with(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
356 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
357 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
358 CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
359 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
360 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
361 CPPUNIT_ASSERT( s.find_with(find_key(k2), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
362 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 ) ; // unchanged, no find_functor
363 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
364 CPPUNIT_ASSERT( s.find_with(k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
365 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount ) ; // unchanged, no find_functor
366 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
367 CPPUNIT_ASSERT( s.find_with(find_key(k3), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
368 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
369 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
371 s1 = e1 ; s2 = e2 ; s3 = e3;
373 // insert existing elements
375 value_type eu( k2, 1000 );
376 CPPUNIT_ASSERT( !s.insert( eu ));
377 CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
378 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
380 CPPUNIT_ASSERT( s.ensure( eu, ensure_functor()) == std::make_pair(true, false));
381 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
382 CPPUNIT_ASSERT( e2.nEnsureCount == s2.nEnsureCount + 1 );
383 CPPUNIT_ASSERT( e2.nEnsureNewCount == s2.nEnsureNewCount );
386 s1 = e1 ; s2 = e2 ; s3 = e3;
388 // unlink & erase test
390 value_type eu( k2, 10 );
391 CPPUNIT_ASSERT( !s.unlink(eu));
394 CPPUNIT_ASSERT( !s.empty() );
395 CPPUNIT_ASSERT( s.size() == 3 );
397 CPPUNIT_ASSERT( s.unlink( e1 ) );
398 CPPUNIT_ASSERT( s.erase_with( k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ) == &e2 );
399 CPPUNIT_ASSERT( s.erase( e2 ) == nullptr );
400 CPPUNIT_ASSERT( e3.nEraseCount == 0 );
401 CPPUNIT_ASSERT( s.erase_with( k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), erase_functor()) == &e3 );
402 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
403 CPPUNIT_ASSERT( s.erase( k3, erase_functor() ) == nullptr );
404 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
406 CPPUNIT_ASSERT( s.insert( e3 ) );
407 CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
408 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
410 CPPUNIT_ASSERT( s.empty() );
411 CPPUNIT_ASSERT( s.size() == 0 );
413 s1 = e1 ; s2 = e2 ; s3 = e3;
415 // clear & clear_and_dispose test
416 CPPUNIT_ASSERT( s.insert(e1));
417 CPPUNIT_ASSERT( s.insert(e2));
418 CPPUNIT_ASSERT( s.insert(e3));
419 CPPUNIT_ASSERT( !s.empty() );
420 CPPUNIT_ASSERT( s.size() == 3 );
422 CPPUNIT_ASSERT( s.empty() );
423 CPPUNIT_ASSERT( s.size() == 0 );
425 CPPUNIT_ASSERT( s.insert(e1));
426 CPPUNIT_ASSERT( s.insert(e2));
427 CPPUNIT_ASSERT( s.insert(e3));
428 CPPUNIT_ASSERT( !s.empty() );
429 CPPUNIT_ASSERT( s.size() == 3 );
431 CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
432 CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
433 CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
434 s.clear_and_dispose( faked_disposer() );
435 CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
436 CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
437 CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
438 CPPUNIT_ASSERT( s.empty() );
439 CPPUNIT_ASSERT( s.size() == 0 );
441 // resize test (up to 64K elements)
442 size_t const nSize = 64 * 1024;
443 value_type * arr = new value_type[nSize];
444 auto_dispose<value_type> ad(arr);
445 for ( size_t i = 0; i < nSize; ++i ) {
446 value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
447 CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
448 CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
449 //for ( size_t j = 0; j <= i; ++j ) {
450 // if ( !s.find((int) j) ) {
451 // CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
456 for ( size_t i = 0; i < nSize; ++i )
457 CPPUNIT_ASSERT_EX( s.find((int) i), "Key " << i << " is not found" );
459 CPPUNIT_ASSERT( !s.empty() );
460 CPPUNIT_ASSERT( s.size() == nSize );
461 s.clear_and_dispose( faked_disposer() );
462 for ( size_t i = 0; i < nSize; ++i ) {
463 CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
476 // ctor with explicit initial capacity
486 unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
487 Set s( 256, nProbesetSize, nProbesetSize / 2 );
491 // ***********************************************************
492 // Cuckoo hashing (striped)
494 void Cuckoo_striped_list_basehook_equal();
495 void Cuckoo_striped_vector_basehook_equal();
496 void Cuckoo_striped_list_basehook_sort_cmp();
497 void Cuckoo_striped_vector_basehook_sort_cmp();
498 void Cuckoo_striped_list_basehook_sort_less();
499 void Cuckoo_striped_vector_basehook_sort_less();
500 void Cuckoo_striped_list_basehook_sort_cmpmix();
501 void Cuckoo_striped_vector_basehook_sort_cmpmix();
502 void Cuckoo_striped_vector_basehook_sort_cmpmix_stat();
504 void Cuckoo_striped_list_basehook_equal_storehash();
505 void Cuckoo_striped_vector_basehook_equal_storehash();
506 void Cuckoo_striped_list_basehook_sort_cmp_storehash();
507 void Cuckoo_striped_vector_basehook_sort_cmp_storehash();
508 void Cuckoo_striped_list_basehook_sort_less_storehash();
509 void Cuckoo_striped_vector_basehook_sort_less_storehash();
510 void Cuckoo_striped_list_basehook_sort_cmpmix_storehash();
511 void Cuckoo_striped_vector_basehook_sort_cmpmix_storehash();
513 void Cuckoo_striped_list_memberhook_equal();
514 void Cuckoo_striped_vector_memberhook_equal();
515 void Cuckoo_striped_list_memberhook_sort_cmp();
516 void Cuckoo_striped_vector_memberhook_sort_cmp();
517 void Cuckoo_striped_list_memberhook_sort_less();
518 void Cuckoo_striped_vector_memberhook_sort_less();
519 void Cuckoo_striped_list_memberhook_sort_cmpmix();
520 void Cuckoo_striped_vector_memberhook_sort_cmpmix();
522 void Cuckoo_striped_list_memberhook_equal_storehash();
523 void Cuckoo_striped_vector_memberhook_equal_storehash();
524 void Cuckoo_striped_list_memberhook_sort_cmp_storehash();
525 void Cuckoo_striped_vector_memberhook_sort_cmp_storehash();
526 void Cuckoo_striped_list_memberhook_sort_less_storehash();
527 void Cuckoo_striped_vector_memberhook_sort_less_storehash();
528 void Cuckoo_striped_list_memberhook_sort_cmpmix_storehash();
529 void Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash();
531 // ***********************************************************
532 // Cuckoo hashing (refinable)
534 void Cuckoo_refinable_list_basehook_equal();
535 void Cuckoo_refinable_vector_basehook_equal();
536 void Cuckoo_refinable_list_basehook_sort_cmp();
537 void Cuckoo_refinable_vector_basehook_sort_cmp();
538 void Cuckoo_refinable_list_basehook_sort_less();
539 void Cuckoo_refinable_vector_basehook_sort_less();
540 void Cuckoo_refinable_list_basehook_sort_cmpmix();
541 void Cuckoo_refinable_vector_basehook_sort_cmpmix();
542 void Cuckoo_refinable_vector_basehook_sort_cmpmix_stat();
544 void Cuckoo_refinable_list_basehook_equal_storehash();
545 void Cuckoo_refinable_vector_basehook_equal_storehash();
546 void Cuckoo_refinable_list_basehook_sort_cmp_storehash();
547 void Cuckoo_refinable_vector_basehook_sort_cmp_storehash();
548 void Cuckoo_refinable_list_basehook_sort_less_storehash();
549 void Cuckoo_refinable_vector_basehook_sort_less_storehash();
550 void Cuckoo_refinable_list_basehook_sort_cmpmix_storehash();
551 void Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash();
553 void Cuckoo_refinable_list_memberhook_equal();
554 void Cuckoo_refinable_vector_memberhook_equal();
555 void Cuckoo_refinable_list_memberhook_sort_cmp();
556 void Cuckoo_refinable_vector_memberhook_sort_cmp();
557 void Cuckoo_refinable_list_memberhook_sort_less();
558 void Cuckoo_refinable_vector_memberhook_sort_less();
559 void Cuckoo_refinable_list_memberhook_sort_cmpmix();
560 void Cuckoo_refinable_vector_memberhook_sort_cmpmix();
562 void Cuckoo_refinable_list_memberhook_equal_storehash();
563 void Cuckoo_refinable_vector_memberhook_equal_storehash();
564 void Cuckoo_refinable_list_memberhook_sort_cmp_storehash();
565 void Cuckoo_refinable_vector_memberhook_sort_cmp_storehash();
566 void Cuckoo_refinable_list_memberhook_sort_less_storehash();
567 void Cuckoo_refinable_vector_memberhook_sort_less_storehash();
568 void Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash();
569 void Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash();
571 CPPUNIT_TEST_SUITE(IntrusiveCuckooSetHdrTest)
572 // ***********************************************************
573 // Cuckoo hashing (striped)
575 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal)
576 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal)
577 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp)
578 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp)
579 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less)
580 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less)
581 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix)
582 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix)
583 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_stat)
585 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal_storehash)
586 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal_storehash)
587 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp_storehash)
588 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp_storehash)
589 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less_storehash)
590 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less_storehash)
591 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix_storehash)
592 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_storehash)
594 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal)
595 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal)
596 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp)
597 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp)
598 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less)
599 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less)
600 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix)
601 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix)
603 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal_storehash)
604 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal_storehash)
605 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp_storehash)
606 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp_storehash)
607 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less_storehash)
608 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less_storehash)
609 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix_storehash)
610 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash)
612 // ***********************************************************
613 // Cuckoo hashing (refinable)
615 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal)
616 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal)
617 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp)
618 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp)
619 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less)
620 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less)
621 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix)
622 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix)
623 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_stat)
625 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal_storehash)
626 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal_storehash)
627 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp_storehash)
628 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp_storehash)
629 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less_storehash)
630 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less_storehash)
631 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix_storehash)
632 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash)
634 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal)
635 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal)
636 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp)
637 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp)
638 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less)
639 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less)
640 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix)
641 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix)
643 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal_storehash)
644 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal_storehash)
645 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp_storehash)
646 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp_storehash)
647 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less_storehash)
648 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less_storehash)
649 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash)
650 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash)
652 CPPUNIT_TEST_SUITE_END()
656 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H