Updated copyright
[libcds.git] / test / unit / striped-set / intrusive_cuckoo_set.cpp
index b1b9f969c7753839e4edff456e9b13c5e108b38d..7bed730b22d19e67ede13b882198af9ee5f9488d 100644 (file)
@@ -1,11 +1,11 @@
 /*
     This file is a part of libcds - Concurrent Data Structures library
 
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
 
     Source code repo: http://github.com/khizmax/libcds/
     Download: http://sourceforge.net/projects/libcds/files/
-    
+
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions are met:
 
@@ -25,7 +25,7 @@
     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 #include "test_intrusive_set.h"
@@ -44,35 +44,29 @@ 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();
-                ASSERT_TRUE( s.insert( i ) );
+                ASSERT_TRUE( s.insert( i ));
             }
-            ASSERT_FALSE( s.empty() );
+            ASSERT_FALSE( s.empty());
             ASSERT_CONTAINER_SIZE( s, nSetSize );
 
             s.clear();
 
-            ASSERT_TRUE( s.empty() );
+            ASSERT_TRUE( s.empty());
             ASSERT_CONTAINER_SIZE( s, 0 );
             for ( auto& i : data ) {
-                EXPECT_EQ( i.nDisposeCount, 1 );
+                EXPECT_EQ( i.nDisposeCount, 1u );
             }
 
         }
@@ -99,8 +93,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 +112,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 )
@@ -132,10 +132,13 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -151,11 +154,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 , ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -171,11 +177,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 , ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -191,11 +200,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -212,11 +224,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -233,11 +248,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -255,10 +273,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -276,10 +297,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -287,7 +311,7 @@ namespace {
         typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
         struct set_traits: public ci::cuckoo::traits
         {
-            typedef ci::cuckoo::base_hook< 
+            typedef ci::cuckoo::base_hook<
                 ci::cuckoo::probeset_type< item_type::probeset_type >
                 ,ci::cuckoo::store_hash< item_type::hash_array_size >
             > hook;
@@ -298,8 +322,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 )
@@ -307,7 +334,7 @@ namespace {
         typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 >> item_type;
         struct set_traits: public ci::cuckoo::traits
         {
-            typedef ci::cuckoo::base_hook< 
+            typedef ci::cuckoo::base_hook<
                 ci::cuckoo::probeset_type< item_type::probeset_type >
                 ,ci::cuckoo::store_hash< item_type::hash_array_size >
             > hook;
@@ -318,8 +345,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 )
@@ -337,11 +367,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -359,11 +392,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 +417,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 )
@@ -390,7 +429,7 @@ namespace {
         typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 >> item_type;
         struct set_traits: public ci::cuckoo::traits
         {
-            
+
             typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ), ci::cuckoo::probeset_type< item_type::member_type::probeset_type >> hook;
             typedef cds::opt::hash_tuple< hash1, hash2 > hash;
             typedef base_class::equal_to<item_type> equal_to;
@@ -398,8 +437,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 )
@@ -415,10 +457,13 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -434,11 +479,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 , ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -454,11 +502,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 , ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -474,11 +525,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -495,11 +549,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -516,11 +573,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -538,10 +598,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -559,10 +622,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 +647,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 +670,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 )
@@ -620,11 +692,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -642,11 +717,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 +742,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 +762,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 )
@@ -699,10 +783,13 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -719,11 +806,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 , ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -740,11 +830,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -761,11 +854,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -783,11 +879,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -805,11 +904,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -828,10 +930,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -850,10 +955,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -861,7 +969,7 @@ namespace {
         typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
         struct set_traits: public ci::cuckoo::traits
         {
-            typedef ci::cuckoo::base_hook< 
+            typedef ci::cuckoo::base_hook<
                 ci::cuckoo::probeset_type< item_type::probeset_type >
                 ,ci::cuckoo::store_hash< item_type::hash_array_size >
             > hook;
@@ -873,8 +981,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 )
@@ -882,7 +993,7 @@ namespace {
         typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 >> item_type;
         struct set_traits: public ci::cuckoo::traits
         {
-            typedef ci::cuckoo::base_hook< 
+            typedef ci::cuckoo::base_hook<
                 ci::cuckoo::probeset_type< item_type::probeset_type >
                 ,ci::cuckoo::store_hash< item_type::hash_array_size >
             > hook;
@@ -894,8 +1005,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 )
@@ -914,11 +1028,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -937,11 +1054,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 +1080,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 )
@@ -969,7 +1092,7 @@ namespace {
         typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 >> item_type;
         struct set_traits: public ci::cuckoo::traits
         {
-            
+
             typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ), ci::cuckoo::probeset_type< item_type::member_type::probeset_type >> hook;
             typedef ci::cuckoo::refinable<> mutex_policy;
             typedef cds::opt::hash_tuple< hash1, hash2 > hash;
@@ -978,8 +1101,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 )
@@ -996,10 +1122,13 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1016,11 +1145,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1037,11 +1169,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1058,11 +1193,14 @@ namespace {
                 ,ci::opt::less< less<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1080,11 +1218,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1102,11 +1243,14 @@ namespace {
                 ,ci::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1125,10 +1269,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1147,10 +1294,13 @@ namespace {
                 ,ci::opt::stat< ci::cuckoo::stat >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 +1320,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 +1344,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 )
@@ -1211,11 +1367,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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 )
@@ -1234,11 +1393,14 @@ namespace {
                 ,cds::opt::compare< cmp<item_type> >
                 ,ci::opt::disposer< mock_disposer >
             >::type
-        > set_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