// Copyright 2005-2009 Daniel James. // Copyright 2021 Peter Dimov. // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include #include #if defined(BOOST_MSVC) # pragma warning(disable: 4244) // conversion from int to float #endif #if defined(__GNUC__) || defined(__clang__) # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Wsign-conversion" #endif // This test checks for collisions in a small range of numbers template void collision_test_() { std::set hashes; for( int i = -128; i <= 127; ++i ) { hashes.insert( boost::hash()( i * M ) ); } BOOST_TEST_EQ( hashes.size(), 256u ); } template void collision_test() { collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); collision_test_(); } #define TEST(type) std::cerr << "Testing: " #type " (" << boost::core::type_name() << ")\n"; collision_test(); int main() { #ifndef BOOST_NO_INTRINSIC_WCHAR_T TEST(wchar_t) #endif #ifndef BOOST_NO_CXX11_CHAR16_T TEST(char16_t) #endif #ifndef BOOST_NO_CXX11_CHAR32_T TEST(char32_t) #endif TEST(short) TEST(unsigned short) TEST(int) TEST(unsigned int) TEST(long) TEST(unsigned long) #if !defined(BOOST_NO_LONG_LONG) TEST(boost::long_long_type) TEST(boost::ulong_long_type) #endif #if defined(BOOST_HAS_INT128) TEST(boost::int128_type) TEST(boost::uint128_type) #endif TEST(float) TEST(double) TEST(long double) TEST(std::size_t) TEST(std::ptrdiff_t) return boost::report_errors(); }