// Copyright 2017, 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 #if defined(BOOST_MSVC) && BOOST_MSVC < 1920 # pragma warning(disable: 4307) // integral constant overflow #endif template BOOST_CXX14_CONSTEXPR typename Hash::result_type test() { unsigned char w[] = { 1, 2, 3, 4 }; std::basic_string v( w, w + sizeof(w) / sizeof(w[0]) ); Hash h; Flavor f{}; boost::hash2::hash_append( h, f, v ); return h.result(); } #define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) #if !( defined(__cpp_lib_constexpr_string) && __cpp_lib_constexpr_string >= 201907L ) # define TEST_EQ(x1, x2) BOOST_TEST_EQ(x1, x2) #else # define TEST_EQ(x1, x2) BOOST_TEST_EQ(x1, x2); STATIC_ASSERT(x1 == x2) #endif int main() { using namespace boost::hash2; TEST_EQ( (test()), 2468847257 ); TEST_EQ( (test()), 78451921 ); #if defined(__cpp_char8_t) && __cpp_char8_t >= 201811L TEST_EQ( (test()), 2468847257 ); TEST_EQ( (test()), 78451921 ); #endif TEST_EQ( (test()), 634283301 ); TEST_EQ( (test()), 1469224165 ); TEST_EQ( (test()), 2374676325 ); TEST_EQ( (test()), 2877134693 ); return boost::report_errors(); }