3 #include "cppunit/cppunit_proxy.h"
4 #include <cds/opt/hash.h>
6 // cds::intrusive namespace forward declaration
7 namespace cds { namespace intrusive {}}
10 namespace ci = cds::intrusive;
11 namespace co = cds::opt;
14 class IntrusiveCuckooSetHdrTest: public CppUnitMini::TestCase
19 unsigned int nDisposeCount ; // count of disposer calling
20 unsigned int nFindCount ; // count of find-functor calling
21 unsigned int nFindArgCount;
22 unsigned int nInsertCount;
23 unsigned int nEnsureNewCount;
24 unsigned int nEnsureCount;
25 unsigned int nEraseCount;
29 memset( this, 0, sizeof(*this));
32 stat& operator=( stat const& s)
34 memcpy( this, &s, sizeof(*this));
47 item(int key, int val)
68 template <typename Hook>
78 base_item(int key, int val)
82 base_item(const base_item& v )
83 : item( static_cast<item const&>(v) )
88 template <typename Hook>
98 member_item(int key, int val)
102 member_item(const member_item& v )
103 : item( static_cast<item const&>(v))
117 size_t operator()( int i ) const
119 return co::v::hash<int>()( i );
121 template <typename Item>
122 size_t operator()( const Item& i ) const
124 return (*this)( i.key() );
126 size_t operator()( find_key const& i) const
128 return co::v::hash<int>()( i.nKey );
132 template <typename T>
135 bool operator ()(const T& v1, const T& v2 ) const
137 return v1.key() < v2.key();
140 template <typename Q>
141 bool operator ()(const T& v1, const Q& v2 ) const
143 return v1.key() < v2;
146 template <typename Q>
147 bool operator ()(const Q& v1, const T& v2 ) const
149 return v1 < v2.key();
153 template <typename T>
155 int operator ()(const T& v1, const T& v2 ) const
157 if ( v1.key() < v2.key() )
159 return v1.key() > v2.key() ? 1 : 0;
162 template <typename Q>
163 int operator ()(const T& v1, const Q& v2 ) const
167 return v1.key() > v2 ? 1 : 0;
170 template <typename Q>
171 int operator ()(const Q& v1, const T& v2 ) const
175 return v1 > v2.key() ? 1 : 0;
179 struct faked_disposer
181 template <typename T>
182 void operator ()( T * p )
188 struct insert_functor {
189 template <typename Item>
190 void operator()( Item& e)
196 struct ensure_functor {
197 template <typename Item>
198 void operator()( bool bNew, Item& e, Item& arg )
202 CPPUNIT_ASSERT_CURRENT( &e == &arg );
209 struct erase_functor {
210 template< typename Item >
211 void operator()( Item& e )
217 struct find_functor {
218 template <typename Item, typename What>
219 void operator()( Item& e, What& )
224 template <typename Item>
225 void operator()( Item& e, Item& w )
233 template <typename Item>
234 bool operator()( Item const& e, find_key const& k ) const
236 return e.key() < k.nKey;
238 template <typename Item>
239 bool operator()( find_key const& k, Item const& e ) const
241 return k.nKey < e.key();
243 template <typename Item>
244 bool operator()( Item const& e, int k ) const
248 template <typename Item>
249 bool operator()( int k, Item const& e ) const
256 template <typename Item>
257 bool operator()( Item const& e, find_key const& k ) const
259 return e.key() == k.nKey;
261 template <typename Item>
262 bool operator()( find_key const& k, Item const& e ) const
264 return k.nKey == e.key();
266 template <typename Item>
267 bool operator()( Item const& e, int k ) const
271 template <typename Item>
272 bool operator()( int k, Item const& e ) const
278 template <typename T>
279 struct auto_dispose {
281 auto_dispose( T * pArr ): m_pArr( pArr ) {}
282 ~auto_dispose() { delete[] m_pArr; }
286 void test_with(Set& s)
288 typedef typename Set::value_type value_type;
298 value_type e1( k1, v1 );
299 value_type e2( k2, v2 );
300 value_type e3( k3, v3);
306 CPPUNIT_ASSERT( s.empty() );
307 CPPUNIT_ASSERT( s.size() == 0 );
309 CPPUNIT_ASSERT( !s.find(k1));
310 CPPUNIT_ASSERT( !s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
311 CPPUNIT_ASSERT( !s.find(k3));
313 CPPUNIT_ASSERT( s.insert(e1));
314 CPPUNIT_ASSERT( s.find(e1));
315 CPPUNIT_ASSERT( s.find(k1));
316 CPPUNIT_ASSERT( s.find_with(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type()));
317 CPPUNIT_ASSERT( !s.find(e2));
318 CPPUNIT_ASSERT( !s.find(e3));
320 CPPUNIT_ASSERT( e2.nInsertCount == 0 );
321 CPPUNIT_ASSERT( s.insert(e2, insert_functor() ));
322 CPPUNIT_ASSERT( e2.nInsertCount == 1 );
323 CPPUNIT_ASSERT( s.find(e1, find_functor() ));
324 CPPUNIT_ASSERT( e1.nFindCount == 1 );
325 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
326 CPPUNIT_ASSERT( s.find(k1, find_functor() ));
327 CPPUNIT_ASSERT( e1.nFindCount == 2 );
328 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
329 CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
330 CPPUNIT_ASSERT( e2.nFindCount == 1 );
331 CPPUNIT_ASSERT( e2.nFindArgCount == 0 );
332 CPPUNIT_ASSERT( s.find(e2, find_functor() ));
333 CPPUNIT_ASSERT( e2.nFindCount == 2 );
334 CPPUNIT_ASSERT( e2.nFindArgCount == 1 );
335 CPPUNIT_ASSERT( !s.find(k3, find_functor()));
336 CPPUNIT_ASSERT( e3.nFindCount == 0 );
337 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
338 CPPUNIT_ASSERT( !s.find(e3, find_functor()));
339 CPPUNIT_ASSERT( e3.nFindCount == 0 );
340 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
342 s1 = e1 ; s2 = e2 ; s3 = e3;
344 CPPUNIT_ASSERT( e3.nEnsureNewCount == 0 );
345 CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
346 CPPUNIT_ASSERT( s.ensure( e3, ensure_functor() ) == std::make_pair(true, true));
347 CPPUNIT_ASSERT( e3.nEnsureNewCount == 1 );
348 CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
349 CPPUNIT_ASSERT( s.find_with(find_key(k1), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
350 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
351 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
352 CPPUNIT_ASSERT( s.find_with(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
353 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
354 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
355 CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
356 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
357 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
358 CPPUNIT_ASSERT( s.find_with(find_key(k2), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
359 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 ) ; // unchanged, no find_functor
360 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
361 CPPUNIT_ASSERT( s.find_with(k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
362 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount ) ; // unchanged, no find_functor
363 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
364 CPPUNIT_ASSERT( s.find_with(find_key(k3), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
365 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
366 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
368 s1 = e1 ; s2 = e2 ; s3 = e3;
370 // insert existing elements
372 value_type eu( k2, 1000 );
373 CPPUNIT_ASSERT( !s.insert( eu ));
374 CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
375 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
377 CPPUNIT_ASSERT( s.ensure( eu, ensure_functor()) == std::make_pair(true, false));
378 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
379 CPPUNIT_ASSERT( e2.nEnsureCount == s2.nEnsureCount + 1 );
380 CPPUNIT_ASSERT( e2.nEnsureNewCount == s2.nEnsureNewCount );
383 s1 = e1 ; s2 = e2 ; s3 = e3;
385 // unlink & erase test
387 value_type eu( k2, 10 );
388 CPPUNIT_ASSERT( !s.unlink(eu));
391 CPPUNIT_ASSERT( !s.empty() );
392 CPPUNIT_ASSERT( s.size() == 3 );
394 CPPUNIT_ASSERT( s.unlink( e1 ) );
395 CPPUNIT_ASSERT( s.erase_with( k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ) == &e2 );
396 CPPUNIT_ASSERT( s.erase( e2 ) == NULL );
397 CPPUNIT_ASSERT( e3.nEraseCount == 0 );
398 CPPUNIT_ASSERT( s.erase_with( k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), erase_functor()) == &e3 );
399 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
400 CPPUNIT_ASSERT( s.erase( k3, erase_functor()) == NULL );
401 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
403 CPPUNIT_ASSERT( s.insert( e3 ) );
404 CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
405 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
407 CPPUNIT_ASSERT( s.empty() );
408 CPPUNIT_ASSERT( s.size() == 0 );
410 s1 = e1 ; s2 = e2 ; s3 = e3;
412 // clear & clear_and_dispose test
413 CPPUNIT_ASSERT( s.insert(e1));
414 CPPUNIT_ASSERT( s.insert(e2));
415 CPPUNIT_ASSERT( s.insert(e3));
416 CPPUNIT_ASSERT( !s.empty() );
417 CPPUNIT_ASSERT( s.size() == 3 );
419 CPPUNIT_ASSERT( s.empty() );
420 CPPUNIT_ASSERT( s.size() == 0 );
422 CPPUNIT_ASSERT( s.insert(e1));
423 CPPUNIT_ASSERT( s.insert(e2));
424 CPPUNIT_ASSERT( s.insert(e3));
425 CPPUNIT_ASSERT( !s.empty() );
426 CPPUNIT_ASSERT( s.size() == 3 );
428 CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
429 CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
430 CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
431 s.clear_and_dispose( faked_disposer() );
432 CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
433 CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
434 CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
435 CPPUNIT_ASSERT( s.empty() );
436 CPPUNIT_ASSERT( s.size() == 0 );
438 // resize test (up to 64K elements)
439 size_t const nSize = 64 * 1024;
440 value_type * arr = new value_type[nSize];
441 auto_dispose<value_type> ad(arr);
442 for ( size_t i = 0; i < nSize; ++i ) {
443 value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
444 CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
445 CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
446 //for ( size_t j = 0; j <= i; ++j ) {
447 // if ( !s.find((int) j) ) {
448 // CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
453 for ( size_t i = 0; i < nSize; ++i )
454 CPPUNIT_ASSERT_EX( s.find((int) i), "Key " << i << " is not found" );
456 CPPUNIT_ASSERT( !s.empty() );
457 CPPUNIT_ASSERT( s.size() == nSize );
458 s.clear_and_dispose( faked_disposer() );
459 for ( size_t i = 0; i < nSize; ++i ) {
460 CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
473 // ctor with explicit initial capacity
483 unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
484 Set s( 256, nProbesetSize, nProbesetSize / 2 );
488 // ***********************************************************
489 // Cuckoo hashing (striped)
491 void Cuckoo_striped_list_basehook_equal();
492 void Cuckoo_striped_vector_basehook_equal();
493 void Cuckoo_striped_list_basehook_sort_cmp();
494 void Cuckoo_striped_vector_basehook_sort_cmp();
495 void Cuckoo_striped_list_basehook_sort_less();
496 void Cuckoo_striped_vector_basehook_sort_less();
497 void Cuckoo_striped_list_basehook_sort_cmpmix();
498 void Cuckoo_striped_vector_basehook_sort_cmpmix();
499 void Cuckoo_striped_vector_basehook_sort_cmpmix_stat();
501 void Cuckoo_striped_list_basehook_equal_storehash();
502 void Cuckoo_striped_vector_basehook_equal_storehash();
503 void Cuckoo_striped_list_basehook_sort_cmp_storehash();
504 void Cuckoo_striped_vector_basehook_sort_cmp_storehash();
505 void Cuckoo_striped_list_basehook_sort_less_storehash();
506 void Cuckoo_striped_vector_basehook_sort_less_storehash();
507 void Cuckoo_striped_list_basehook_sort_cmpmix_storehash();
508 void Cuckoo_striped_vector_basehook_sort_cmpmix_storehash();
510 void Cuckoo_striped_list_memberhook_equal();
511 void Cuckoo_striped_vector_memberhook_equal();
512 void Cuckoo_striped_list_memberhook_sort_cmp();
513 void Cuckoo_striped_vector_memberhook_sort_cmp();
514 void Cuckoo_striped_list_memberhook_sort_less();
515 void Cuckoo_striped_vector_memberhook_sort_less();
516 void Cuckoo_striped_list_memberhook_sort_cmpmix();
517 void Cuckoo_striped_vector_memberhook_sort_cmpmix();
519 void Cuckoo_striped_list_memberhook_equal_storehash();
520 void Cuckoo_striped_vector_memberhook_equal_storehash();
521 void Cuckoo_striped_list_memberhook_sort_cmp_storehash();
522 void Cuckoo_striped_vector_memberhook_sort_cmp_storehash();
523 void Cuckoo_striped_list_memberhook_sort_less_storehash();
524 void Cuckoo_striped_vector_memberhook_sort_less_storehash();
525 void Cuckoo_striped_list_memberhook_sort_cmpmix_storehash();
526 void Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash();
528 // ***********************************************************
529 // Cuckoo hashing (refinable)
531 void Cuckoo_refinable_list_basehook_equal();
532 void Cuckoo_refinable_vector_basehook_equal();
533 void Cuckoo_refinable_list_basehook_sort_cmp();
534 void Cuckoo_refinable_vector_basehook_sort_cmp();
535 void Cuckoo_refinable_list_basehook_sort_less();
536 void Cuckoo_refinable_vector_basehook_sort_less();
537 void Cuckoo_refinable_list_basehook_sort_cmpmix();
538 void Cuckoo_refinable_vector_basehook_sort_cmpmix();
539 void Cuckoo_refinable_vector_basehook_sort_cmpmix_stat();
541 void Cuckoo_refinable_list_basehook_equal_storehash();
542 void Cuckoo_refinable_vector_basehook_equal_storehash();
543 void Cuckoo_refinable_list_basehook_sort_cmp_storehash();
544 void Cuckoo_refinable_vector_basehook_sort_cmp_storehash();
545 void Cuckoo_refinable_list_basehook_sort_less_storehash();
546 void Cuckoo_refinable_vector_basehook_sort_less_storehash();
547 void Cuckoo_refinable_list_basehook_sort_cmpmix_storehash();
548 void Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash();
550 void Cuckoo_refinable_list_memberhook_equal();
551 void Cuckoo_refinable_vector_memberhook_equal();
552 void Cuckoo_refinable_list_memberhook_sort_cmp();
553 void Cuckoo_refinable_vector_memberhook_sort_cmp();
554 void Cuckoo_refinable_list_memberhook_sort_less();
555 void Cuckoo_refinable_vector_memberhook_sort_less();
556 void Cuckoo_refinable_list_memberhook_sort_cmpmix();
557 void Cuckoo_refinable_vector_memberhook_sort_cmpmix();
559 void Cuckoo_refinable_list_memberhook_equal_storehash();
560 void Cuckoo_refinable_vector_memberhook_equal_storehash();
561 void Cuckoo_refinable_list_memberhook_sort_cmp_storehash();
562 void Cuckoo_refinable_vector_memberhook_sort_cmp_storehash();
563 void Cuckoo_refinable_list_memberhook_sort_less_storehash();
564 void Cuckoo_refinable_vector_memberhook_sort_less_storehash();
565 void Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash();
566 void Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash();
568 CPPUNIT_TEST_SUITE(IntrusiveCuckooSetHdrTest)
569 // ***********************************************************
570 // Cuckoo hashing (striped)
572 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal)
573 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal)
574 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp)
575 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp)
576 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less)
577 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less)
578 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix)
579 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix)
580 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_stat)
582 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal_storehash)
583 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal_storehash)
584 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp_storehash)
585 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp_storehash)
586 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less_storehash)
587 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less_storehash)
588 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix_storehash)
589 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_storehash)
591 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal)
592 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal)
593 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp)
594 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp)
595 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less)
596 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less)
597 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix)
598 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix)
600 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal_storehash)
601 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal_storehash)
602 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp_storehash)
603 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp_storehash)
604 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less_storehash)
605 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less_storehash)
606 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix_storehash)
607 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash)
609 // ***********************************************************
610 // Cuckoo hashing (refinable)
612 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal)
613 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal)
614 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp)
615 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp)
616 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less)
617 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less)
618 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix)
619 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix)
620 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_stat)
622 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal_storehash)
623 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal_storehash)
624 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp_storehash)
625 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp_storehash)
626 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less_storehash)
627 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less_storehash)
628 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix_storehash)
629 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash)
631 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal)
632 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal)
633 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp)
634 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp)
635 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less)
636 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less)
637 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix)
638 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix)
640 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal_storehash)
641 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal_storehash)
642 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp_storehash)
643 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp_storehash)
644 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less_storehash)
645 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less_storehash)
646 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash)
647 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash)
649 CPPUNIT_TEST_SUITE_END()