From 99d49234968c94bbf37ee030e62e076b354825c8 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 28 Feb 2016 09:11:19 +0000 Subject: [PATCH 1/5] Add test for strings of null character. They're working, but wanted to make that explicitly clear. --- test/hash_string_test.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/hash_string_test.cpp b/test/hash_string_test.cpp index de8ca87..5f72d4e 100644 --- a/test/hash_string_test.cpp +++ b/test/hash_string_test.cpp @@ -38,6 +38,23 @@ void string_tests() #endif } +void string0_tests() +{ + std::string x1(1, '\0'); + std::string x2(2, '\0'); + std::string x3(3, '\0'); + std::string x4(10, '\0'); + + BOOST_HASH_TEST_NAMESPACE::hash hasher; + + BOOST_TEST(hasher(x1) != hasher(x2)); + BOOST_TEST(hasher(x1) != hasher(x3)); + BOOST_TEST(hasher(x1) != hasher(x4)); + BOOST_TEST(hasher(x2) != hasher(x3)); + BOOST_TEST(hasher(x2) != hasher(x4)); + BOOST_TEST(hasher(x3) != hasher(x4)); +} + #if !defined(BOOST_NO_STD_WSTRING) void wstring_tests() { @@ -66,6 +83,7 @@ void wstring_tests() int main() { string_tests(); + string0_tests(); #if !defined(BOOST_NO_STD_WSTRING) wstring_tests(); #endif From 8171dbb465a655f13766255da2d8148649a5e45a Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 28 Feb 2016 09:14:37 +0000 Subject: [PATCH 2/5] Fix the binary 32 and 64 bit hash functions. --- include/boost/functional/hash/hash.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/boost/functional/hash/hash.hpp b/include/boost/functional/hash/hash.hpp index 3e5ab5b..40954bc 100644 --- a/include/boost/functional/hash/hash.hpp +++ b/include/boost/functional/hash/hash.hpp @@ -212,7 +212,6 @@ namespace boost seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2); } - template inline void hash_combine_impl(boost::uint32_t& h1, boost::uint32_t k1) { @@ -234,7 +233,6 @@ namespace boost #if !defined(BOOST_NO_INT64_T) && \ !(defined(__GNUC__) && ULONG_MAX == 0xffffffff) - template inline void hash_combine_impl(boost::uint64_t& h, boost::uint64_t k) { @@ -247,6 +245,10 @@ namespace boost h ^= k; h *= m; + + // Completely arbitrary number, to prevent 0's + // from hashing to 0. + h += 0xe6546b64; } #endif // BOOST_NO_INT64_T From e76c3dc1a26928a4088adc3e6ba1efb6e3352901 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 26 May 2016 22:36:58 +0100 Subject: [PATCH 3/5] Travis --- .travis.yml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..657c9ac --- /dev/null +++ b/.travis.yml @@ -0,0 +1,39 @@ +# Copyright (C) 2016 Daniel James. +# Distributed under the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +# Use Trusty to get a reasonably recent version of Boost. +sudo: required +dist: trusty + +language: c++ + +addons: + apt: + packages: + - libboost-dev + - libboost-tools-dev + +matrix: + include: + - compiler: gcc + env: BJAM_TOOLSET=gcc + - compiler: gcc + env: BJAM_TOOLSET=gcc-std11 + - compiler: clang + env: BJAM_TOOLSET=clang + - compiler: clang + env: BJAM_TOOLSET=clang-std11 + +before_script: + - | + echo "using gcc : : g++-4.8 ;" > ~/user-config.jam + echo "using gcc : std11 : g++-4.8 --std=c++11 ;" >> ~/user-config.jam + echo "using clang : : clang++ ;" >> ~/user-config.jam + echo "using clang : std11 : clang++ --std=c++11 ;" >> ~/user-config.jam + - cat ~/user-config.jam + - touch Jamroot.jam + +script: + - cd ${TRAVIS_BUILD_DIR}/test + - bjam -q ${BJAM_TOOLSET} include=${TRAVIS_BUILD_DIR}/include From c8d8c7edd4aa881a81d4c8ca219bc5c94b4e70ca Mon Sep 17 00:00:00 2001 From: Daniel James Date: Mon, 30 May 2016 15:19:11 +0100 Subject: [PATCH 4/5] Fix some warnings in test/example code. --- examples/point.cpp | 5 +++++ examples/portable.cpp | 5 +++++ test/hash_number_test.cpp | 2 -- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/examples/point.cpp b/examples/point.cpp index 6943342..f3d30e1 100644 --- a/examples/point.cpp +++ b/examples/point.cpp @@ -3,6 +3,11 @@ // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// Force use of assert. +#if defined(NDEBUG) +#undef NDEBUG +#endif + #include #include diff --git a/examples/portable.cpp b/examples/portable.cpp index 88f2fc7..511133e 100644 --- a/examples/portable.cpp +++ b/examples/portable.cpp @@ -3,6 +3,11 @@ // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// Force use of assert. +#if defined(NDEBUG) +#undef NDEBUG +#endif + #include #include diff --git a/test/hash_number_test.cpp b/test/hash_number_test.cpp index 242c731..9adb5c6 100644 --- a/test/hash_number_test.cpp +++ b/test/hash_number_test.cpp @@ -58,8 +58,6 @@ void numeric_extra_tests(typename template void numeric_test(T*) { - typedef boost::hash_detail::limits limits; - compile_time_tests((T*) 0); BOOST_HASH_TEST_NAMESPACE::hash x1; From 468516ed714e2abb020966435ef2f4604f0289d7 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Tue, 14 Jun 2016 17:24:30 -0700 Subject: [PATCH 5/5] Fix a typo in a comment; fixes https://svn.boost.org/trac/boost/ticket/12270 --- include/boost/functional/hash/hash.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/functional/hash/hash.hpp b/include/boost/functional/hash/hash.hpp index 40954bc..6e86403 100644 --- a/include/boost/functional/hash/hash.hpp +++ b/include/boost/functional/hash/hash.hpp @@ -228,7 +228,7 @@ namespace boost } -// Don't define 64-bit hash combine on platforms with 64 bit integers, +// Don't define 64-bit hash combine on platforms without 64 bit integers, // and also not for 32-bit gcc as it warns about the 64-bit constant. #if !defined(BOOST_NO_INT64_T) && \ !(defined(__GNUC__) && ULONG_MAX == 0xffffffff)