2 // Copyright 2006-2009 Daniel James.
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #include "./config.hpp"
8 #include <boost/config.hpp>
18 std::size_t hash() const
23 #if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
24 friend std::size_t hash_value(custom const& x)
30 custom(int x) : value_(x) {}
34 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
38 std::size_t hash_value(test::custom<T> x)
45 #include "./config.hpp"
47 #ifdef TEST_EXTENSIONS
48 # ifdef TEST_STD_INCLUDES
49 # include <functional>
51 # include <boost/functional/hash.hpp>
55 #include <boost/detail/lightweight_test.hpp>
57 #ifdef TEST_EXTENSIONS
65 HASH_NAMESPACE::hash<test::custom<int> > custom_hasher;
66 BOOST_TEST(custom_hasher(10) == 100u);
67 test::custom<int> x(55);
68 BOOST_TEST(custom_hasher(x) == 550u);
71 using namespace HASH_NAMESPACE;
72 BOOST_TEST(custom_hasher(x) == hash_value(x));
75 std::vector<test::custom<int> > custom_vector;
76 custom_vector.push_back(5);
77 custom_vector.push_back(25);
78 custom_vector.push_back(35);
81 HASH_NAMESPACE::hash_combine(seed, test::custom<int>(5));
82 HASH_NAMESPACE::hash_combine(seed, test::custom<int>(25));
83 HASH_NAMESPACE::hash_combine(seed, test::custom<int>(35));
85 std::size_t seed2 = 0;
86 HASH_NAMESPACE::hash_combine(seed2, 50u);
87 HASH_NAMESPACE::hash_combine(seed2, 250u);
88 HASH_NAMESPACE::hash_combine(seed2, 350u);
90 BOOST_TEST(seed == HASH_NAMESPACE::hash_range(
91 custom_vector.begin(), custom_vector.end()));
92 BOOST_TEST(seed == seed2);
95 #endif // TEST_EXTENSIONS
99 #ifdef TEST_EXTENSIONS
102 return boost::report_errors();