// 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::vector 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_vector) && __cpp_lib_constexpr_vector >= 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()), 2227238665 ); TEST_EQ( (test()), 3245468929 ); TEST_EQ( (test()), 1745310485 ); TEST_EQ( (test()), 3959736277 ); TEST_EQ( (test()), 1949716516 ); TEST_EQ( (test()), 2651227990 ); return boost::report_errors(); }