// Copyright 2006-2009 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) #include "./config.hpp" #include #include namespace test { template struct custom { int value_; std::size_t hash() const { return static_cast(value_ * 10); } #if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) friend std::size_t hash_value(custom const& x) { return x.hash(); } #endif custom(int x) : value_(x) {} }; } #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) namespace boost { template std::size_t hash_value(test::custom x) { return x.hash(); } } #endif #include "./config.hpp" #ifdef BOOST_HASH_TEST_EXTENSIONS # ifdef BOOST_HASH_TEST_STD_INCLUDES # include # else # include # endif #endif #include #ifdef BOOST_HASH_TEST_EXTENSIONS #include #include #include void custom_tests() { BOOST_HASH_TEST_NAMESPACE::hash > custom_hasher; BOOST_TEST(custom_hasher(10) == 100u); test::custom x(55); BOOST_TEST(custom_hasher(x) == 550u); { using namespace BOOST_HASH_TEST_NAMESPACE; BOOST_TEST(custom_hasher(x) == hash_value(x)); } std::vector > custom_vector; custom_vector.push_back(5); custom_vector.push_back(25); custom_vector.push_back(35); std::size_t seed = 0; BOOST_HASH_TEST_NAMESPACE::hash_combine(seed, test::custom(5)); BOOST_HASH_TEST_NAMESPACE::hash_combine(seed, test::custom(25)); BOOST_HASH_TEST_NAMESPACE::hash_combine(seed, test::custom(35)); std::size_t seed2 = 0; BOOST_HASH_TEST_NAMESPACE::hash_combine(seed2, 50u); BOOST_HASH_TEST_NAMESPACE::hash_combine(seed2, 250u); BOOST_HASH_TEST_NAMESPACE::hash_combine(seed2, 350u); BOOST_TEST(seed == BOOST_HASH_TEST_NAMESPACE::hash_range( custom_vector.begin(), custom_vector.end())); BOOST_TEST(seed == seed2); } #endif // BOOST_HASH_TEST_EXTENSIONS int main() { #ifdef BOOST_HASH_TEST_EXTENSIONS custom_tests(); #endif return boost::report_errors(); }