Improved intrusive::StripedSet unit tests
authorkhizmax <libcds.dev@gmail.com>
Mon, 21 Mar 2016 21:24:07 +0000 (00:24 +0300)
committerkhizmax <libcds.dev@gmail.com>
Mon, 21 Mar 2016 21:24:07 +0000 (00:24 +0300)
test/unit/striped-set/CMakeLists.txt
test/unit/striped-set/intrusive_boost_avl_set.cpp
test/unit/striped-set/intrusive_boost_set.cpp
test/unit/striped-set/intrusive_boost_sg_set.cpp
test/unit/striped-set/intrusive_boost_splay_set.cpp
test/unit/striped-set/intrusive_boost_treap_set.cpp
test/unit/striped-set/intrusive_cuckoo_set.cpp
test/unit/striped-set/test_intrusive_set.h
test/unit/striped-set/test_intrusive_striped_set.h

index 519aa3edde7a964d9fe0ad3d01d26a200b60427f..3f2a1cabd4ff8c674dd9569264b62d993a98bb69 100644 (file)
@@ -9,9 +9,9 @@ set(CDSGTEST_SET_SOURCES
     intrusive_boost_set.cpp
     intrusive_boost_sg_set.cpp
     intrusive_boost_slist.cpp
-    intrusive_cuckoo_set.cpp
     intrusive_boost_splay_set.cpp
     intrusive_boost_treap_set.cpp
+    intrusive_cuckoo_set.cpp
 )
 
 include_directories(
index faf832cded581a00a22f913698acc6cf9513d882..47e71b6c631ccd0aa318126c8a3d087e8ecc2a04 100644 (file)
 
 #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
 
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   define CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-#endif
-
 #include "test_intrusive_striped_set.h"
 #include <cds/intrusive/striped_set/boost_avl_set.h>
 
index 9baf14565a8bff9ccb0f76b4ebaf4ab8fbe0f5de..c0757e185fd374541fbc9cc152ec4d23a96f9fff 100644 (file)
 
 #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
 
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   define CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-#endif
+//#include <boost/version.hpp>
+//#if BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
+//#   define CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
+//#endif
 
 #include "test_intrusive_striped_set.h"
 #include <cds/intrusive/striped_set/boost_set.h>
index f16505170500311a67509e0a90037e5e570609d5..91247460820817253f76c327cb156b485a0f1318 100644 (file)
 
 #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
 
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   define CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-#endif
-
-#include <cds/details/defs.h>
-#if ( CDS_COMPILER == CDS_COMPILER_GCC || CDS_COMPILER == CDS_COMPILER_CLANG ) && BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   pragma message("boost 1.59 - 1.60 has a bug in boost::intrusive::sg_set, test skipped")
-#else
-
 #include "test_intrusive_striped_set.h"
 #include <cds/intrusive/striped_set/boost_sg_set.h>
 
@@ -67,5 +56,4 @@ namespace {
 
 } // namespace
 
-#endif
 #endif // CDSUNIT_ENABLE_BOOST_CONTAINER
index bb1555fb1645a4eabffd15260dfd1cb7540402f6..1b40df0b30bb5d257eb81dba5b9f5dc134fb0071 100644 (file)
 #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
 
 #include <boost/version.hpp>
-#if BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   define CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-#endif
-
-#include <cds/details/defs.h>
-#if ( CDS_COMPILER == CDS_COMPILER_GCC || CDS_COMPILER == CDS_COMPILER_CLANG ) && BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   pragma message("boost 1.59 - 1.60 has a bug in boost::intrusive::splay_set, test skipped")
-#else
 
 #include "test_intrusive_striped_set.h"
 #include <cds/intrusive/striped_set/boost_splay_set.h>
@@ -49,7 +41,7 @@ namespace {
 
     struct test_traits
     {
-#   if BOOST_VERSION < 105600
+#if BOOST_VERSION < 105600
         typedef bi::splay_set_member_hook<> splay_set_member_hook;
         typedef bi::splay_set_base_hook<> splay_set_base_hook;
 #else
@@ -73,5 +65,4 @@ namespace {
 
 } // namespace
 
-#endif
 #endif // CDSUNIT_ENABLE_BOOST_CONTAINER
index 115ac139e620fa00a0339548d96c3e5964f35aa1..a681e07a3a7aed19552e8cf9e1bbf9c57212487f 100644 (file)
 
 #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
 
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   define CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-#endif
-
-#include <cds/details/defs.h>
-#if ( CDS_COMPILER == CDS_COMPILER_GCC || CDS_COMPILER == CDS_COMPILER_CLANG ) && BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
-#   pragma message("boost 1.59 - 1.60 has a bug in boost::intrusive::treap_set, test skipped")
-#else
-
 #include "test_intrusive_striped_set.h"
 #include <cds/intrusive/striped_set/boost_treap_set.h>
 
@@ -81,5 +70,4 @@ namespace {
 
 } // namespace
 
-#endif
 #endif // CDSUNIT_ENABLE_BOOST_CONTAINER
index b1b9f969c7753839e4edff456e9b13c5e108b38d..05692fb86224280b90d2554b6dc93ee5de680b32 100644 (file)
@@ -44,21 +44,16 @@ namespace {
 
 
         template <typename Set>
-        void test( Set& s )
+        void test( Set& s, std::vector< typename Set::value_type >& data )
         {
             // Precondition: set is empty
             // Postcondition: set is empty
 
-            base_class::test_< Set::c_isSorted>( s );
+            base_class::test_< Set::c_isSorted>( s, data );
 
             typedef typename Set::value_type value_type;
             size_t const nSetSize = base_class::kSize;
 
-            std::vector< value_type > data;
-            data.reserve( nSetSize );
-            for ( size_t key = 0; key < nSetSize; ++key )
-                data.push_back( value_type( static_cast<int>(key) ) );
-
             // clear
             for ( auto& i : data ) {
                 i.clear_stat();
@@ -99,8 +94,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_basehook_unordered )
@@ -115,8 +113,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_cmp )
@@ -134,8 +135,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s( 32, 6, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_cmp )
@@ -153,9 +157,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_less )
@@ -173,9 +180,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 4, ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_less )
@@ -193,9 +203,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_cmpmix )
@@ -214,9 +227,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_cmpmix )
@@ -235,9 +251,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_stat )
@@ -257,8 +276,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_stat )
@@ -278,8 +300,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_basehook_unordered_storehash )
@@ -298,8 +323,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_basehook_unordered_storehash )
@@ -318,8 +346,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_storehash )
@@ -339,9 +370,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_storehash )
@@ -361,9 +395,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
 //************************************************************
@@ -381,8 +418,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_unordered )
@@ -398,8 +438,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_cmp )
@@ -417,8 +460,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s( 32, 6, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_cmp )
@@ -436,9 +482,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_less )
@@ -456,9 +505,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 4, ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_less )
@@ -476,9 +528,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_cmpmix )
@@ -497,9 +552,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_cmpmix )
@@ -518,9 +576,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_stat )
@@ -540,8 +601,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_stat )
@@ -561,8 +625,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_memberhook_unordered_storehash )
@@ -581,8 +648,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_unordered_storehash )
@@ -601,8 +671,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_storehash )
@@ -622,9 +695,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_storehash )
@@ -644,9 +720,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
 //************************************************************
@@ -664,8 +743,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_unordered )
@@ -681,8 +763,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_cmp )
@@ -701,8 +786,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s( 32, 6, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_cmp )
@@ -721,9 +809,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_less )
@@ -742,9 +833,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 4, ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_less )
@@ -763,9 +857,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_cmpmix )
@@ -785,9 +882,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_cmpmix )
@@ -807,9 +907,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_stat )
@@ -830,8 +933,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_stat )
@@ -852,8 +958,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_basehook_unordered_storehash )
@@ -873,8 +982,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_unordered_storehash )
@@ -894,8 +1006,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_storehash )
@@ -916,9 +1031,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_storehash )
@@ -939,9 +1057,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
 //************************************************************
@@ -960,8 +1081,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_unordered )
@@ -978,8 +1102,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_cmp )
@@ -998,8 +1125,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s( 32, 6, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_cmp )
@@ -1018,9 +1148,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_less )
@@ -1039,9 +1172,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 4, ht );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_less )
@@ -1060,9 +1196,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_cmpmix )
@@ -1082,9 +1221,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_cmpmix )
@@ -1104,9 +1246,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_stat )
@@ -1127,8 +1272,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_stat )
@@ -1149,8 +1297,11 @@ namespace {
             >::type
         > set_type; 
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_unordered_storehash )
@@ -1170,8 +1321,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s;
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_unordered_storehash )
@@ -1191,8 +1345,11 @@ namespace {
         };
         typedef ci::CuckooSet< item_type, set_traits > set_type;
 
-        set_type s( 32, 4 );
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_storehash )
@@ -1213,9 +1370,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( 32, 6, 0, std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
     }
 
     TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_storehash )
@@ -1236,9 +1396,12 @@ namespace {
             >::type
         > set_type; 
 
-        typename set_type::hash_tuple_type ht;
-        set_type s( std::move( ht ));
-        test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
     }
 
 } // namespace
index fe4f8ef187f5e9554bd9a1481cf0ce1b4afbcc48..14f672e17e7474694d2a4ba2c957d75719b54dc0 100644 (file)
 
 #include <cds/opt/hash.h>
 
-#ifdef CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-#   define CDSTEST_EXPLICIT
-#else
-#   define CDSTEST_EXPLICIT explicit
-#endif
-
 // forward declaration
 namespace cds { namespace intrusive {}}
 
@@ -86,7 +80,7 @@ namespace cds_test {
             base_int_item()
             {}
 
-            CDSTEST_EXPLICIT base_int_item( int key )
+            explicit base_int_item( int key )
                 : nKey( key )
                 , nVal( key )
             {}
@@ -124,7 +118,7 @@ namespace cds_test {
             member_int_item()
             {}
 
-            CDSTEST_EXPLICIT member_int_item( int key )
+            explicit member_int_item( int key )
                 : nKey( key )
                 , nVal( key )
             {}
@@ -331,13 +325,13 @@ namespace cds_test {
 
     protected:
         template <typename Set>
-        void test( Set& s )
+        void test( Set& s, std::vector< typename Set::value_type >& data )
         {
-            test_< true >( s );
+            test_< true >( s, data );
         }
 
         template <bool Sorted, class Set>
-        void test_( Set& s )
+        void test_( Set& s, std::vector< typename Set::value_type >& data )
         {
             // Precondition: set is empty
             // Postcondition: set is empty
@@ -349,7 +343,6 @@ namespace cds_test {
             typedef typename std::conditional< Sorted, other_less, other_equal_to >::type other_predicate;
             size_t const nSetSize = kSize;
 
-            std::vector< value_type > data;
             std::vector< size_t> indices;
             data.reserve( kSize );
             indices.reserve( kSize );
index b0493fd686a85b93bc12f4d7c244c68347f761d4..a85ad77d468876826ca761999186ed7a1e985a04 100644 (file)
@@ -70,8 +70,11 @@ namespace {
             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_less )
@@ -82,8 +85,11 @@ namespace {
             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
         > set_type;
 
-        set_type s( 32 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_cmpmix )
@@ -96,8 +102,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
         > set_type;
 
-        set_type s( 64 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold )
@@ -110,8 +119,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold_rt )
@@ -124,8 +136,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
         > set_type;
 
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
+            this->test( s, data );
+        }
     }
 
 // ****************************************************************
@@ -139,8 +154,11 @@ namespace {
             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_less )
@@ -151,8 +169,11 @@ namespace {
             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
         > set_type;
 
-        set_type s( 32 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32 );
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_cmpmix )
@@ -165,8 +186,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
         > set_type;
 
-        set_type s( 64 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold )
@@ -179,8 +203,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold_rt )
@@ -193,8 +220,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
         > set_type;
 
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
+            this->test( s, data );
+        }
     }
 
 
@@ -209,8 +239,11 @@ namespace {
             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_less )
@@ -221,8 +254,11 @@ namespace {
             ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
         > set_type;
 
-        set_type s( 32 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32 );
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_cmpmix )
@@ -235,8 +271,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
         > set_type;
 
-        set_type s( 64 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold )
@@ -249,8 +288,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold_rt )
@@ -263,8 +305,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
         > set_type;
 
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
+            this->test( s, data );
+        }
     }
 
 // ****************************************************************
@@ -278,8 +323,11 @@ namespace {
             ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_less )
@@ -290,8 +338,11 @@ namespace {
             ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
         > set_type;
 
-        set_type s( 32 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32 );
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_cmpmix )
@@ -304,8 +355,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
         > set_type;
 
-        set_type s( 64 );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold )
@@ -318,8 +372,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
         > set_type;
 
-        set_type s;
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
     }
 
     TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold_rt )
@@ -332,8 +389,11 @@ namespace {
             ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
         > set_type;
 
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
-        this->test( s );
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
+            this->test( s, data );
+        }
     }
 
     REGISTER_TYPED_TEST_CASE_P( IntrusiveStripedSet,