/*
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:
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"
> 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 );
}
> 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 );
}
> 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 );
}
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 );
}
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 );
}