// 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 #include #include #include #include #include #include template void test() { using boost::hash2::get_integral_result; Hash h; { Hash h2( h ); auto t1 = get_integral_result( h ); auto t2 = get_integral_result( h2 ); BOOST_TEST_EQ( static_cast( t1 ), t2 ); } { Hash h2( h ); auto t1 = get_integral_result( h ); auto t2 = get_integral_result( h2 ); BOOST_TEST_EQ( static_cast( t1 ), t2 ); } { Hash h2( h ); auto t1 = get_integral_result( h ); auto t2 = get_integral_result( h2 ); BOOST_TEST_EQ( static_cast( t1 ), t2 ); } { Hash h2( h ); auto t1 = get_integral_result( h ); auto t2 = get_integral_result( h2 ); BOOST_TEST_EQ( static_cast( t1 ), t2 ); } { Hash h2( h ); auto t1 = get_integral_result( h ); auto t2 = get_integral_result( h2 ); BOOST_TEST_EQ( static_cast( t1 ), t2 ); } } template struct H1: private boost::hash2::fnv1a_64 { using result_type = R; result_type result() { return static_cast( boost::hash2::fnv1a_64::result() ); } }; template struct H2: private boost::hash2::md5_128 { using result_type = R; result_type result() { boost::hash2::md5_128::result_type r1 = boost::hash2::md5_128::result(); R r2 = {{}}; std::memcpy( &r2[0], &r1[0], std::min( r1.size(), r2.size() ) ); return r2; } }; int main() { test(); test(); test(); test(); test(); test(); test(); test(); test(); test(); test< H1 >(); test< H1 >(); test< H1 >(); test< H1 >(); test< H2> >(); test< H2> >(); test< H2> >(); return boost::report_errors(); }