diff --git a/test/Jamfile b/test/Jamfile index 560b2b9..1633aae 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -80,6 +80,7 @@ run append_integer_cx.cpp ; run append_character_cx.cpp ; run append_floating_point_cx.cpp ; run append_container_cx.cpp ; +run append_string_cx.cpp ; # non-cryptographic diff --git a/test/append_container.cpp b/test/append_container.cpp index d794694..47c483c 100644 --- a/test/append_container.cpp +++ b/test/append_container.cpp @@ -1,4 +1,4 @@ -// Copyright 2017, 2024 Peter Dimov. +// Copyright 2017, 2024 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt diff --git a/test/append_container_cx.cpp b/test/append_container_cx.cpp index 5961277..691e9b5 100644 --- a/test/append_container_cx.cpp +++ b/test/append_container_cx.cpp @@ -1,4 +1,4 @@ -// Copyright 2017, 2024 Peter Dimov. +// Copyright 2017, 2024 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt @@ -39,7 +39,6 @@ BOOST_CXX14_CONSTEXPR typename Hash::result_type test() #endif - int main() { using namespace boost::hash2; diff --git a/test/append_string.cpp b/test/append_string.cpp index b3240f7..18e39d7 100644 --- a/test/append_string.cpp +++ b/test/append_string.cpp @@ -1,4 +1,4 @@ -// Copyright 2017, 2024 Peter Dimov. +// Copyright 2017, 2024 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt diff --git a/test/append_string_cx.cpp b/test/append_string_cx.cpp new file mode 100644 index 0000000..550fe14 --- /dev/null +++ b/test/append_string_cx.cpp @@ -0,0 +1,63 @@ +// 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 BOOST_CXX_VERSION < 202002L + +# 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 ); + +#if defined(__cpp_char8_t) && __cpp_char8_t >= 201811L + + TEST_EQ( (test()), 2227238665 ); + TEST_EQ( (test()), 3245468929 ); + +#endif + + TEST_EQ( (test()), 2981571797 ); + TEST_EQ( (test()), 1063054677 ); + + TEST_EQ( (test()), 1745310485 ); + TEST_EQ( (test()), 3959736277 ); + + return boost::report_errors(); +}