// Copyright 2017, 2018, 2024 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include #include #include using T = std::uint32_t; void test_identity() { using boost::hash2::get_integral_result; using R = T; for( unsigned i = 0; i < 65536; ++i ) { R r = static_cast( i * 0x9E3779B9u ); T t = get_integral_result( r ); BOOST_TEST_EQ( t, r ); } } template void test_permutation( R offset = 0, R scale = 1 ) { using boost::hash2::get_integral_result; std::set dist; for( unsigned i = 0; i < 65536; ++i ) { R r = static_cast( i * 0x9E3779B9u * scale + offset ); T t = get_integral_result( r ); dist.insert( t ); } BOOST_TEST_EQ( dist.size(), 65536u ); } template void test_roundtrip() { using boost::hash2::get_integral_result; std::set dist; for( unsigned i = 0; i < 65536; ++i ) { T t1 = static_cast( i * 0x9E3779B9u ); R r = get_integral_result( t1 ); T t2 = get_integral_result( r ); dist.insert( t2 ); } BOOST_TEST_EQ( dist.size(), 65536u ); } int main() { test_identity(); test_permutation(); test_permutation(); test_roundtrip(); test_roundtrip(); return boost::report_errors(); }