stress-test set/map: use hash_size option for FeldmanHashSet/Map
authorkhizmax <libcds.dev@gmail.com>
Sun, 13 Nov 2016 20:19:15 +0000 (23:19 +0300)
committerkhizmax <libcds.dev@gmail.com>
Sun, 13 Nov 2016 20:19:15 +0000 (23:19 +0300)
test/stress/map/delodd/map_delodd.h
test/stress/map/delodd/map_delodd_feldman_hashmap.cpp
test/stress/map/map_type_feldman_hashmap.h
test/stress/set/delodd/set_delodd.h
test/stress/set/delodd/set_delodd_feldman_hashset.cpp
test/stress/set/set_type_feldman_hashset.h

index e2ea79ac3ab3cb47dc3a66e5bb6dfe682cf2493a..af0c76de3254cd7abb93f04bce0072d05dff0d99 100644 (file)
@@ -37,18 +37,15 @@ namespace map {
         {
             uint32_t  nKey;
             uint16_t  nThread;
         {
             uint32_t  nKey;
             uint16_t  nThread;
-            uint16_t  pad_;
 
             key_thread( size_t key, size_t threadNo )
                 : nKey( static_cast<uint32_t>(key))
                 , nThread( static_cast<uint16_t>(threadNo))
 
             key_thread( size_t key, size_t threadNo )
                 : nKey( static_cast<uint32_t>(key))
                 , nThread( static_cast<uint16_t>(threadNo))
-                , pad_(0)
             {}
 
             key_thread()
                 : nKey()
                 , nThread()
             {}
 
             key_thread()
                 : nKey()
                 , nThread()
-                , pad_( 0 )
             {}
         };
 
             {}
         };
 
index 55ca039067749125e9550f6670b16aaebbec110c..9e2e3dd134fdf193d7edcc0859ac7680161fa669 100644 (file)
 
 namespace map {
 
 
 namespace map {
 
-    CDSSTRESS_FeldmanHashMap_fixed( Map_DelOdd, run_test_extract, key_thread, size_t )
+    namespace {
+        class Map_DelOdd2: public map::Map_DelOdd {
+        public:
+            template <typename Map>
+            void run()
+            {
+                typedef typename Map::traits original_traits;
+                struct traits: public original_traits {
+                    enum { hash_size = sizeof( uint32_t ) + sizeof( uint16_t ) };
+                };
+                typedef typename Map::template rebind_traits< traits >::result map_type;
+
+                run_test_extract<map_type>();
+            }
+        };
+
+        CDSSTRESS_FeldmanHashMap_fixed( Map_DelOdd2, run, key_thread, size_t )
+    }
 
 } // namespace map
 
 } // namespace map
index 77586405de04b447fde019c8e5cfd303f098248c..674b9ac872b1d556e7940578e7a4174ebfe56f2e 100644 (file)
@@ -47,6 +47,12 @@ namespace map {
     {
         typedef cc::FeldmanHashMap< GC, Key, T, Traits > base_class;
     public:
     {
         typedef cc::FeldmanHashMap< GC, Key, T, Traits > base_class;
     public:
+
+        template <typename OtherTraits>
+        struct rebind_traits {
+            typedef FeldmanHashMap<GC, Key, T, OtherTraits > result;
+        };
+
         template <typename Config>
         FeldmanHashMap( Config const& cfg)
             : base_class( cfg.s_nFeldmanMap_HeadBits, cfg.s_nFeldmanMap_ArrayBits )
         template <typename Config>
         FeldmanHashMap( Config const& cfg)
             : base_class( cfg.s_nFeldmanMap_HeadBits, cfg.s_nFeldmanMap_ArrayBits )
index 03bb671ab428a4ded42f613d6b6113e301f3233b..72c0c4ccc4f3d2c9d8f382d5a1b70a84759dbe63 100644 (file)
@@ -36,18 +36,15 @@ namespace set {
     {
         uint32_t  nKey;
         uint16_t  nThread;
     {
         uint32_t  nKey;
         uint16_t  nThread;
-        uint16_t  pad_;
 
         key_thread( size_t key, size_t threadNo )
             : nKey( static_cast<uint32_t>(key))
             , nThread( static_cast<uint16_t>(threadNo))
 
         key_thread( size_t key, size_t threadNo )
             : nKey( static_cast<uint32_t>(key))
             , nThread( static_cast<uint16_t>(threadNo))
-            , pad_(0)
         {}
 
         key_thread()
             : nKey()
             , nThread()
         {}
 
         key_thread()
             : nKey()
             , nThread()
-            , pad_( 0 )
         {}
     };
 
         {}
     };
 
index 6fd7e3496654a6e7b198df72ad40b3ec5370eaff..2d09f3c647d62d47cd2242acf7ace0f43715c0c6 100644 (file)
 
 namespace set {
 
 
 namespace set {
 
-    CDSSTRESS_FeldmanHashSet_fixed( Set_DelOdd, run_test_extract, key_thread, size_t )
+    namespace {
+        class Set_DelOdd2: public set::Set_DelOdd
+        {
+        public:
+            template <typename Set>
+            void run()
+            {
+                typedef typename Set::traits original_traits;
+                struct traits: public original_traits
+                {
+                    enum { hash_size = sizeof(uint32_t) + sizeof(uint16_t) };
+                };
+
+                typedef typename Set::template rebind_traits< traits >::result set_type;
+                run_test_extract< set_type >();
+            }
+        };
+
+        CDSSTRESS_FeldmanHashSet_fixed( Set_DelOdd2, run, key_thread, size_t )
+    }
 
 } // namespace set
 
 } // namespace set
index 44c3ddf4c806bdb4c569387295b3c2c7c0402ade..ab20e1f638e9972509d87f9b8215c908af6527f5 100644 (file)
@@ -63,6 +63,11 @@ namespace set {
         typedef typename T::hasher hasher;
         typedef typename get_extracted_ptr<GC>::extracted_ptr extracted_ptr;
 
         typedef typename T::hasher hasher;
         typedef typename get_extracted_ptr<GC>::extracted_ptr extracted_ptr;
 
+        template <typename OtherTraits>
+        struct rebind_traits {
+            typedef FeldmanHashSet<GC, T, OtherTraits > result;
+        };
+
         template <class Config>
         FeldmanHashSet( Config const& cfg )
             : base_class( cfg.s_nFeldmanSet_HeadBits, cfg.s_nFeldmanSet_ArrayBits )
         template <class Config>
         FeldmanHashSet( Config const& cfg )
             : base_class( cfg.s_nFeldmanSet_HeadBits, cfg.s_nFeldmanSet_ArrayBits )