Updated copyright
[libcds.git] / test / unit / map / feldman_hashmap_hp.cpp
index 92766e5034043ed2c93433b63cc344bf9c26e9d3..c04ae6a058861a9a9c55d5fdd436a3171a3df324 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_feldman_hashmap_hp.h"
@@ -74,8 +74,8 @@ namespace {
         > map_type;
 
         map_type m( 4, 5 );
-        EXPECT_GE( m.head_size(), 1 << 4 );
-        EXPECT_EQ( m.array_node_size(), 1 << 5 );
+        EXPECT_GE( m.head_size(), static_cast<size_t>( 1 << 4 ));
+        EXPECT_EQ( m.array_node_size(), static_cast<size_t>( 1 << 5 ));
         test( m );
     }
 
@@ -88,8 +88,8 @@ namespace {
         > map_type;
 
         map_type m( 3, 2 );
-        EXPECT_GE( m.head_size(), 1 << 4 ); // min = 2 ** 4
-        EXPECT_EQ( m.array_node_size(), 1 << 2 );
+        EXPECT_GE( m.head_size(), static_cast<size_t>( 1 << 4 )); // min = 2 ** 4
+        EXPECT_EQ( m.array_node_size(), static_cast<size_t>( 1 << 2 ));
         test( m );
     }
 
@@ -103,8 +103,8 @@ namespace {
         > map_type;
 
         map_type m( 4, 4 );
-        EXPECT_EQ( m.head_size(), 1 << 4 );
-        EXPECT_EQ( m.array_node_size(), 1 << 4 );
+        EXPECT_EQ( m.head_size(), static_cast<size_t>( 1 << 4 ));
+        EXPECT_EQ( m.array_node_size(), static_cast<size_t>( 1 << 4 ));
         test( m );
     }
 
@@ -119,8 +119,8 @@ namespace {
         typedef cc::FeldmanHashMap< gc_type, key_type, value_type, map_traits > map_type;
 
         map_type m( 8, 2 );
-        EXPECT_EQ( m.head_size(), 1 << 8 );
-        EXPECT_EQ( m.array_node_size(), 1 << 2 );
+        EXPECT_EQ( m.head_size(), static_cast<size_t>( 1 << 8 ));
+        EXPECT_EQ( m.array_node_size(), static_cast<size_t>( 1 << 2 ));
         test( m );
     }
 
@@ -134,8 +134,27 @@ namespace {
         typedef cc::FeldmanHashMap< gc_type, key_type, value_type, map_traits > map_type;
 
         map_type m( 1, 1 );
-        EXPECT_EQ( m.head_size(), 1 << 4 ); // min = 2**4
-        EXPECT_EQ( m.array_node_size(), 1 << 2 ); // min = 2**2
+        EXPECT_EQ( m.head_size(), static_cast<size_t>( 1 << 4 )); // min = 2**4
+        EXPECT_EQ( m.array_node_size(), static_cast<size_t>( 1 << 2 )); // min = 2**2
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_HP, explicit_key_size )
+    {
+        struct map_traits: public cc::feldman_hashmap::traits
+        {
+            enum: size_t {
+                hash_size = sizeof(int) + sizeof( uint16_t)
+            };
+            typedef hash2 hash;
+            typedef less2 less;
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+        typedef cc::FeldmanHashMap< gc_type, key_type2, value_type, map_traits > map_type;
+
+        map_type m( 5, 3 );
+        EXPECT_EQ( m.head_size(), static_cast<size_t>(1 << 6));
+        EXPECT_EQ( m.array_node_size(), static_cast<size_t>(1 << 3));
         test( m );
     }