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_CUCKOO_SET_H
32 #define CDSTEST_HDR_INTRUSIVE_CUCKOO_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;
45 class IntrusiveCuckooSetHdrTest: public CppUnitMini::TestCase
50 unsigned int nDisposeCount ; // count of disposer calling
51 unsigned int nFindCount ; // count of find-functor calling
52 unsigned int nFindArgCount;
53 unsigned int nInsertCount;
54 unsigned int nEnsureNewCount;
55 unsigned int nEnsureCount;
56 unsigned int nEraseCount;
60 memset( this, 0, sizeof(*this));
63 stat& operator=( stat const& s)
65 memcpy( this, &s, sizeof(*this));
78 item(int key, int val)
99 template <typename Hook>
109 base_item(int key, int val)
113 base_item(const base_item& v )
114 : item( static_cast<item const&>(v) )
119 template <typename Hook>
129 member_item(int key, int val)
133 member_item(const member_item& v )
134 : item( static_cast<item const&>(v))
148 size_t operator()( int i ) const
150 return co::v::hash<int>()( i );
152 template <typename Item>
153 size_t operator()( const Item& i ) const
155 return (*this)( i.key() );
157 size_t operator()( find_key const& i) const
159 return co::v::hash<int>()( i.nKey );
163 template <typename T>
166 bool operator ()(const T& v1, const T& v2 ) const
168 return v1.key() < v2.key();
171 template <typename Q>
172 bool operator ()(const T& v1, const Q& v2 ) const
174 return v1.key() < v2;
177 template <typename Q>
178 bool operator ()(const Q& v1, const T& v2 ) const
180 return v1 < v2.key();
184 template <typename T>
186 int operator ()(const T& v1, const T& v2 ) const
188 if ( v1.key() < v2.key() )
190 return v1.key() > v2.key() ? 1 : 0;
193 template <typename Q>
194 int operator ()(const T& v1, const Q& v2 ) const
198 return v1.key() > v2 ? 1 : 0;
201 template <typename Q>
202 int operator ()(const Q& v1, const T& v2 ) const
206 return v1 > v2.key() ? 1 : 0;
210 struct faked_disposer
212 template <typename T>
213 void operator ()( T * p )
219 struct insert_functor {
220 template <typename Item>
221 void operator()( Item& e)
227 struct update_functor {
228 template <typename Item>
229 void operator()( bool bNew, Item& e, Item& arg )
233 CPPUNIT_ASSERT_CURRENT( &e == &arg );
240 struct erase_functor {
241 template< typename Item >
242 void operator()( Item& e )
248 struct find_functor {
249 template <typename Item, typename What>
250 void operator()( Item& e, What& )
255 template <typename Item>
256 void operator()( Item& e, Item& w )
264 template <typename Item>
265 bool operator()( Item const& e, find_key const& k ) const
267 return e.key() < k.nKey;
269 template <typename Item>
270 bool operator()( find_key const& k, Item const& e ) const
272 return k.nKey < e.key();
274 template <typename Item>
275 bool operator()( Item const& e, int k ) const
279 template <typename Item>
280 bool operator()( int k, Item const& e ) const
287 template <typename Item>
288 bool operator()( Item const& e, find_key const& k ) const
290 return e.key() == k.nKey;
292 template <typename Item>
293 bool operator()( find_key const& k, Item const& e ) const
295 return k.nKey == e.key();
297 template <typename Item>
298 bool operator()( Item const& e, int k ) const
302 template <typename Item>
303 bool operator()( int k, Item const& e ) const
309 template <typename T>
310 struct auto_dispose {
312 auto_dispose( T * pArr ): m_pArr( pArr ) {}
313 ~auto_dispose() { delete[] m_pArr; }
317 void test_with(Set& s)
319 typedef typename Set::value_type value_type;
329 value_type e1( k1, v1 );
330 value_type e2( k2, v2 );
331 value_type e3( k3, v3);
337 CPPUNIT_ASSERT( s.empty() );
338 CPPUNIT_ASSERT( s.size() == 0 );
340 CPPUNIT_ASSERT( !s.contains(k1));
341 CPPUNIT_ASSERT( !s.contains(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
342 CPPUNIT_ASSERT( !s.contains(k3));
344 CPPUNIT_ASSERT( s.insert(e1));
345 CPPUNIT_ASSERT( s.contains(e1));
346 CPPUNIT_ASSERT( s.contains(k1));
347 CPPUNIT_ASSERT( s.contains(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type()));
348 CPPUNIT_ASSERT( !s.contains(e2));
349 CPPUNIT_ASSERT( !s.contains(e3));
351 CPPUNIT_ASSERT( e2.nInsertCount == 0 );
352 CPPUNIT_ASSERT( s.insert(e2, insert_functor() ));
353 CPPUNIT_ASSERT( e2.nInsertCount == 1 );
354 CPPUNIT_ASSERT( s.find(e1, find_functor() ));
355 CPPUNIT_ASSERT( e1.nFindCount == 1 );
356 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
357 CPPUNIT_ASSERT( s.find(k1, find_functor() ));
358 CPPUNIT_ASSERT( e1.nFindCount == 2 );
359 CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
360 CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
361 CPPUNIT_ASSERT( e2.nFindCount == 1 );
362 CPPUNIT_ASSERT( e2.nFindArgCount == 0 );
363 CPPUNIT_ASSERT( s.find(e2, find_functor() ));
364 CPPUNIT_ASSERT( e2.nFindCount == 2 );
365 CPPUNIT_ASSERT( e2.nFindArgCount == 1 );
366 CPPUNIT_ASSERT( !s.find(k3, find_functor()));
367 CPPUNIT_ASSERT( e3.nFindCount == 0 );
368 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
369 CPPUNIT_ASSERT( !s.find(e3, find_functor()));
370 CPPUNIT_ASSERT( e3.nFindCount == 0 );
371 CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
373 s1 = e1 ; s2 = e2 ; s3 = e3;
375 CPPUNIT_ASSERT( e3.nEnsureNewCount == 0 );
376 CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
377 CPPUNIT_ASSERT(s.update(e3, update_functor(), false) == std::make_pair(false, false));
378 CPPUNIT_ASSERT(e3.nEnsureNewCount == 0);
379 CPPUNIT_ASSERT(e3.nEnsureCount == 0);
380 CPPUNIT_ASSERT( s.update( e3, update_functor() ) == std::make_pair(true, true));
381 CPPUNIT_ASSERT( e3.nEnsureNewCount == 1 );
382 CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
383 CPPUNIT_ASSERT( s.find_with(find_key(k1), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
384 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
385 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
386 CPPUNIT_ASSERT( s.find_with(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
387 CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
388 CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
389 CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
390 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
391 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
392 CPPUNIT_ASSERT( s.contains(find_key(k2), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
393 CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 ) ; // unchanged, no find_functor
394 CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
395 CPPUNIT_ASSERT( s.contains(k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
396 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount ) ; // unchanged, no find_functor
397 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
398 CPPUNIT_ASSERT( s.find_with(find_key(k3), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
399 CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
400 CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
402 s1 = e1 ; s2 = e2 ; s3 = e3;
404 // insert existing elements
406 value_type eu( k2, 1000 );
407 CPPUNIT_ASSERT( !s.insert( eu ));
408 CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
409 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
411 CPPUNIT_ASSERT( s.update( eu, update_functor()) == std::make_pair(true, false));
412 CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
413 CPPUNIT_ASSERT( e2.nEnsureCount == s2.nEnsureCount + 1 );
414 CPPUNIT_ASSERT( e2.nEnsureNewCount == s2.nEnsureNewCount );
417 s1 = e1 ; s2 = e2 ; s3 = e3;
419 // unlink & erase test
421 value_type eu( k2, 10 );
422 CPPUNIT_ASSERT( !s.unlink(eu));
425 CPPUNIT_ASSERT( !s.empty() );
426 CPPUNIT_ASSERT( s.size() == 3 );
428 CPPUNIT_ASSERT( s.unlink( e1 ) );
429 CPPUNIT_ASSERT( s.erase_with( k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ) == &e2 );
430 CPPUNIT_ASSERT( s.erase( e2 ) == nullptr );
431 CPPUNIT_ASSERT( e3.nEraseCount == 0 );
432 CPPUNIT_ASSERT( s.erase_with( k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), erase_functor()) == &e3 );
433 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
434 CPPUNIT_ASSERT( s.erase( k3, erase_functor() ) == nullptr );
435 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
437 CPPUNIT_ASSERT( s.insert( e3 ) );
438 CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
439 CPPUNIT_ASSERT( e3.nEraseCount == 1 );
441 CPPUNIT_ASSERT( s.empty() );
442 CPPUNIT_ASSERT( s.size() == 0 );
444 s1 = e1 ; s2 = e2 ; s3 = e3;
446 // clear & clear_and_dispose test
447 CPPUNIT_ASSERT( s.insert(e1));
448 CPPUNIT_ASSERT( s.insert(e2));
449 CPPUNIT_ASSERT( s.insert(e3));
450 CPPUNIT_ASSERT( !s.empty() );
451 CPPUNIT_ASSERT( s.size() == 3 );
453 CPPUNIT_ASSERT( s.empty() );
454 CPPUNIT_ASSERT( s.size() == 0 );
456 CPPUNIT_ASSERT( s.insert(e1));
457 CPPUNIT_ASSERT( s.insert(e2));
458 CPPUNIT_ASSERT( s.insert(e3));
459 CPPUNIT_ASSERT( !s.empty() );
460 CPPUNIT_ASSERT( s.size() == 3 );
462 CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
463 CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
464 CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
465 s.clear_and_dispose( faked_disposer() );
466 CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
467 CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
468 CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
469 CPPUNIT_ASSERT( s.empty() );
470 CPPUNIT_ASSERT( s.size() == 0 );
472 // resize test (up to 64K elements)
473 size_t const nSize = 64 * 1024;
474 value_type * arr = new value_type[nSize];
475 auto_dispose<value_type> ad(arr);
476 for ( size_t i = 0; i < nSize; ++i ) {
477 value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
478 CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
479 CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
480 //for ( size_t j = 0; j <= i; ++j ) {
481 // if ( !s.contains((int) j) ) {
482 // CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
487 for ( size_t i = 0; i < nSize; ++i )
488 CPPUNIT_ASSERT_EX( s.contains((int) i), "Key " << i << " is not found" );
490 CPPUNIT_ASSERT( !s.empty() );
491 CPPUNIT_ASSERT( s.size() == nSize );
492 s.clear_and_dispose( faked_disposer() );
493 for ( size_t i = 0; i < nSize; ++i ) {
494 CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
507 // ctor with explicit initial capacity
517 unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
518 Set s( 256, nProbesetSize, nProbesetSize / 2 );
522 // ***********************************************************
523 // Cuckoo hashing (striped)
525 void Cuckoo_striped_list_basehook_equal();
526 void Cuckoo_striped_vector_basehook_equal();
527 void Cuckoo_striped_list_basehook_sort_cmp();
528 void Cuckoo_striped_vector_basehook_sort_cmp();
529 void Cuckoo_striped_list_basehook_sort_less();
530 void Cuckoo_striped_vector_basehook_sort_less();
531 void Cuckoo_striped_list_basehook_sort_cmpmix();
532 void Cuckoo_striped_vector_basehook_sort_cmpmix();
533 void Cuckoo_striped_vector_basehook_sort_cmpmix_stat();
535 void Cuckoo_striped_list_basehook_equal_storehash();
536 void Cuckoo_striped_vector_basehook_equal_storehash();
537 void Cuckoo_striped_list_basehook_sort_cmp_storehash();
538 void Cuckoo_striped_vector_basehook_sort_cmp_storehash();
539 void Cuckoo_striped_list_basehook_sort_less_storehash();
540 void Cuckoo_striped_vector_basehook_sort_less_storehash();
541 void Cuckoo_striped_list_basehook_sort_cmpmix_storehash();
542 void Cuckoo_striped_vector_basehook_sort_cmpmix_storehash();
544 void Cuckoo_striped_list_memberhook_equal();
545 void Cuckoo_striped_vector_memberhook_equal();
546 void Cuckoo_striped_list_memberhook_sort_cmp();
547 void Cuckoo_striped_vector_memberhook_sort_cmp();
548 void Cuckoo_striped_list_memberhook_sort_less();
549 void Cuckoo_striped_vector_memberhook_sort_less();
550 void Cuckoo_striped_list_memberhook_sort_cmpmix();
551 void Cuckoo_striped_vector_memberhook_sort_cmpmix();
553 void Cuckoo_striped_list_memberhook_equal_storehash();
554 void Cuckoo_striped_vector_memberhook_equal_storehash();
555 void Cuckoo_striped_list_memberhook_sort_cmp_storehash();
556 void Cuckoo_striped_vector_memberhook_sort_cmp_storehash();
557 void Cuckoo_striped_list_memberhook_sort_less_storehash();
558 void Cuckoo_striped_vector_memberhook_sort_less_storehash();
559 void Cuckoo_striped_list_memberhook_sort_cmpmix_storehash();
560 void Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash();
562 // ***********************************************************
563 // Cuckoo hashing (refinable)
565 void Cuckoo_refinable_list_basehook_equal();
566 void Cuckoo_refinable_vector_basehook_equal();
567 void Cuckoo_refinable_list_basehook_sort_cmp();
568 void Cuckoo_refinable_vector_basehook_sort_cmp();
569 void Cuckoo_refinable_list_basehook_sort_less();
570 void Cuckoo_refinable_vector_basehook_sort_less();
571 void Cuckoo_refinable_list_basehook_sort_cmpmix();
572 void Cuckoo_refinable_vector_basehook_sort_cmpmix();
573 void Cuckoo_refinable_vector_basehook_sort_cmpmix_stat();
575 void Cuckoo_refinable_list_basehook_equal_storehash();
576 void Cuckoo_refinable_vector_basehook_equal_storehash();
577 void Cuckoo_refinable_list_basehook_sort_cmp_storehash();
578 void Cuckoo_refinable_vector_basehook_sort_cmp_storehash();
579 void Cuckoo_refinable_list_basehook_sort_less_storehash();
580 void Cuckoo_refinable_vector_basehook_sort_less_storehash();
581 void Cuckoo_refinable_list_basehook_sort_cmpmix_storehash();
582 void Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash();
584 void Cuckoo_refinable_list_memberhook_equal();
585 void Cuckoo_refinable_vector_memberhook_equal();
586 void Cuckoo_refinable_list_memberhook_sort_cmp();
587 void Cuckoo_refinable_vector_memberhook_sort_cmp();
588 void Cuckoo_refinable_list_memberhook_sort_less();
589 void Cuckoo_refinable_vector_memberhook_sort_less();
590 void Cuckoo_refinable_list_memberhook_sort_cmpmix();
591 void Cuckoo_refinable_vector_memberhook_sort_cmpmix();
593 void Cuckoo_refinable_list_memberhook_equal_storehash();
594 void Cuckoo_refinable_vector_memberhook_equal_storehash();
595 void Cuckoo_refinable_list_memberhook_sort_cmp_storehash();
596 void Cuckoo_refinable_vector_memberhook_sort_cmp_storehash();
597 void Cuckoo_refinable_list_memberhook_sort_less_storehash();
598 void Cuckoo_refinable_vector_memberhook_sort_less_storehash();
599 void Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash();
600 void Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash();
602 CPPUNIT_TEST_SUITE(IntrusiveCuckooSetHdrTest)
603 // ***********************************************************
604 // Cuckoo hashing (striped)
606 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal)
607 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal)
608 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp)
609 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp)
610 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less)
611 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less)
612 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix)
613 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix)
614 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_stat)
616 CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal_storehash)
617 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal_storehash)
618 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp_storehash)
619 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp_storehash)
620 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less_storehash)
621 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less_storehash)
622 CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix_storehash)
623 CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_storehash)
625 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal)
626 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal)
627 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp)
628 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp)
629 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less)
630 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less)
631 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix)
632 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix)
634 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal_storehash)
635 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal_storehash)
636 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp_storehash)
637 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp_storehash)
638 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less_storehash)
639 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less_storehash)
640 CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix_storehash)
641 CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash)
643 // ***********************************************************
644 // Cuckoo hashing (refinable)
646 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal)
647 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal)
648 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp)
649 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp)
650 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less)
651 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less)
652 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix)
653 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix)
654 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_stat)
656 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal_storehash)
657 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal_storehash)
658 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp_storehash)
659 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp_storehash)
660 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less_storehash)
661 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less_storehash)
662 CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix_storehash)
663 CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash)
665 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal)
666 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal)
667 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp)
668 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp)
669 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less)
670 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less)
671 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix)
672 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix)
674 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal_storehash)
675 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal_storehash)
676 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp_storehash)
677 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp_storehash)
678 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less_storehash)
679 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less_storehash)
680 CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash)
681 CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash)
683 CPPUNIT_TEST_SUITE_END()
687 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H