// 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 template class H { private: R r_; public: using result_type = R; explicit H( R const& r ): r_( r ) { } result_type result() { return r_; } }; template void test() { using boost::hash2::get_integral_result; { R r = {{ 0xEF, 0xCD, 0xAB, 0x89, 0x67, 0x45, 0x23, 0x01 }}; { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0xEF ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), -0x11 ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0xCDEF ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), -0x3211 ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0x89ABCDEF ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0x89ABCDEF ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0x0123456789ABCDEFull ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0x0123456789ABCDEFull ); } } { R r = {{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}; { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0xFF ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), -1 ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0xFFFF ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), -1 ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0xFFFFFFFFu ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), -1 ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), 0xFFFFFFFFFFFFFFFFull ); } { H h( r ); BOOST_TEST_EQ( get_integral_result( h ), -1 ); } } } int main() { test< std::array >(); test< boost::array >(); test< boost::hash2::digest<8> >(); return boost::report_errors(); }