• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
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)
5 
6 // This checks that template code implemented using hash_fwd will work.
7 
8 #include "./config.hpp"
9 
10 #include "./hash_fwd_test.hpp"
11 
12 #include <boost/core/lightweight_test.hpp>
13 
14 #if defined(BOOST_HASH_TEST_EXTENSIONS) && !defined(BOOST_HASH_TEST_STD_INCLUDES)
15 
16 #include <boost/container_hash/hash.hpp>
17 #include <string>
18 
fwd_test1()19 void fwd_test1()
20 {
21     test::test_type1<int> x(5);
22     test::test_type1<std::string> y("Test");
23 
24     BOOST_HASH_TEST_NAMESPACE::hash<int> hasher_int;
25     BOOST_HASH_TEST_NAMESPACE::hash<std::string> hasher_string;
26     BOOST_HASH_TEST_NAMESPACE::hash<test::test_type1<int> > hasher_test_int;
27     BOOST_HASH_TEST_NAMESPACE::hash<test::test_type1<std::string> > hasher_test_string;
28 
29     BOOST_TEST(hasher_int(5) == hasher_test_int(x));
30     BOOST_TEST(hasher_string("Test") == hasher_test_string(y));
31 }
32 
fwd_test2()33 void fwd_test2()
34 {
35     test::test_type2<int> x(5, 10);
36     test::test_type2<std::string> y("Test1", "Test2");
37 
38     std::size_t seed1 = 0;
39     BOOST_HASH_TEST_NAMESPACE::hash_combine(seed1, 5);
40     BOOST_HASH_TEST_NAMESPACE::hash_combine(seed1, 10);
41 
42     std::size_t seed2 = 0;
43     BOOST_HASH_TEST_NAMESPACE::hash_combine(seed2, std::string("Test1"));
44     BOOST_HASH_TEST_NAMESPACE::hash_combine(seed2, std::string("Test2"));
45 
46     BOOST_HASH_TEST_NAMESPACE::hash<test::test_type2<int> > hasher_test_int;
47     BOOST_HASH_TEST_NAMESPACE::hash<test::test_type2<std::string> > hasher_test_string;
48 
49     BOOST_TEST(seed1 == hasher_test_int(x));
50     BOOST_TEST(seed2 == hasher_test_string(y));
51 }
52 
fwd_test3()53 void fwd_test3()
54 {
55     std::vector<int> values1;
56     values1.push_back(10);
57     values1.push_back(15);
58     values1.push_back(20);
59     values1.push_back(3);
60 
61     std::vector<std::string> values2;
62     values2.push_back("Chico");
63     values2.push_back("Groucho");
64     values2.push_back("Harpo");
65     values2.push_back("Gummo");
66     values2.push_back("Zeppo");
67 
68     test::test_type3<int> x(values1.begin(), values1.end());
69     test::test_type3<std::string> y(values2.begin(), values2.end());
70 
71     std::size_t seed1 =
72         BOOST_HASH_TEST_NAMESPACE::hash_range(values1.begin(), values1.end());
73     BOOST_HASH_TEST_NAMESPACE::hash_range(seed1, values1.begin(), values1.end());
74 
75     std::size_t seed2 =
76         BOOST_HASH_TEST_NAMESPACE::hash_range(values2.begin(), values2.end());
77     BOOST_HASH_TEST_NAMESPACE::hash_range(seed2, values2.begin(), values2.end());
78 
79     BOOST_HASH_TEST_NAMESPACE::hash<test::test_type3<int> > hasher_test_int;
80     BOOST_HASH_TEST_NAMESPACE::hash<test::test_type3<std::string> > hasher_test_string;
81 
82     BOOST_TEST(seed1 == hasher_test_int(x));
83     BOOST_TEST(seed2 == hasher_test_string(y));
84 }
85 
86 #endif
87 
main()88 int main()
89 {
90 #ifdef BOOST_HASH_TEST_EXTENSIONS
91     fwd_test1();
92     fwd_test2();
93     fwd_test3();
94 #endif
95     return boost::report_errors();
96 }
97