// Copyright 2017, 2018 Peter Dimov. // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include #include #include template void test( R r ) { { Map m; for( int i = 0; i < 64; ++i ) { m.insert( typename Map::value_type( i, 3 * i + 1 ) ); } Hash h; Flavor f; hash_append( h, f, m ); BOOST_TEST_EQ( h.result(), r ); } { Map m; for( int i = 0; i < 64; ++i ) { int j = 63 - i; m.insert( typename Map::value_type( j, 3 * j + 1 ) ); } Hash h; Flavor f; hash_append( h, f, m ); BOOST_TEST_EQ( h.result(), r ); } { Map m; for( int i = 0; i < 64; ++i ) { int j = ( i * 17 ) % 64; m.insert( typename Map::value_type( j, 3 * j + 1 ) ); } Hash h; Flavor f; hash_append( h, f, m ); BOOST_TEST_EQ( h.result(), r ); } } int main() { using namespace boost::hash2; test< fnv1a_32, little_endian_flavor, std::map >( 3152726101ul ); test< fnv1a_64, little_endian_flavor, std::map >( 11386405661620022965ull ); test< fnv1a_32, little_endian_flavor, std::multimap >( 3152726101ul ); test< fnv1a_64, little_endian_flavor, std::multimap >( 11386405661620022965ull ); test< fnv1a_32, little_endian_flavor, std::unordered_map >( 3137657678ul ); test< fnv1a_64, little_endian_flavor, std::unordered_map >( 7026041901235387186ull ); test< fnv1a_32, little_endian_flavor, std::unordered_multimap >( 3137657678ul ); test< fnv1a_64, little_endian_flavor, std::unordered_multimap >( 7026041901235387186ull ); return boost::report_errors(); }