]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | |
2 | // Copyright 2012 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 | #include "./config.hpp" | |
7 | ||
8 | #ifdef BOOST_HASH_TEST_EXTENSIONS | |
9 | # ifdef BOOST_HASH_TEST_STD_INCLUDES | |
10 | # include <functional> | |
11 | # else | |
12 | # include <boost/functional/hash.hpp> | |
13 | # endif | |
14 | #endif | |
15 | ||
16 | #include <boost/config.hpp> | |
17 | #include <boost/detail/lightweight_test.hpp> | |
18 | ||
19 | #if defined(BOOST_HASH_TEST_EXTENSIONS) && !defined(BOOST_NO_CXX11_HDR_ARRAY) | |
20 | #define TEST_ARRAY | |
21 | #include <array> | |
22 | #include <vector> | |
23 | #endif | |
24 | ||
25 | #ifdef TEST_ARRAY | |
26 | ||
27 | template <typename T> | |
28 | void array_tests(T const& v) { | |
29 | boost::hash<typename T::value_type> hf; | |
30 | for(typename T::const_iterator i = v.begin(); i != v.end(); ++i) { | |
31 | for(typename T::const_iterator j = v.begin(); j != v.end(); ++j) { | |
32 | if (i != j) | |
33 | BOOST_TEST(hf(*i) != hf(*j)); | |
34 | else | |
35 | BOOST_TEST(hf(*i) == hf(*j)); | |
36 | } | |
37 | } | |
38 | } | |
39 | ||
40 | void empty_array_test() { | |
41 | /* | |
42 | boost::hash<std::array<int, 0> > empty_array_hash; | |
43 | std::array<int, 0> empty_array; | |
44 | BOOST_TEST(empty_array_hash(empty_array) == boost::hash_value(empty_array)); | |
45 | */ | |
46 | } | |
47 | ||
48 | void int_1_array_test() | |
49 | { | |
50 | std::vector<std::array<int, 1> > arrays; | |
51 | std::array<int, 1> val; | |
52 | val[0] = 0; | |
53 | arrays.push_back(val); | |
54 | val[0] = 1; | |
55 | arrays.push_back(val); | |
56 | val[0] = 2; | |
57 | arrays.push_back(val); | |
58 | array_tests(arrays); | |
59 | } | |
60 | ||
61 | void string_1_array_test() | |
62 | { | |
63 | std::vector<std::array<std::string, 1> > arrays; | |
64 | std::array<std::string, 1> val; | |
65 | arrays.push_back(val); | |
66 | val[0] = "one"; | |
67 | arrays.push_back(val); | |
68 | val[0] = "two"; | |
69 | arrays.push_back(val); | |
70 | array_tests(arrays); | |
71 | } | |
72 | ||
73 | void string_3_array_test() | |
74 | { | |
75 | std::vector<std::array<std::string,3 > > arrays; | |
76 | std::array<std::string, 3> val; | |
77 | arrays.push_back(val); | |
78 | val[0] = "one"; | |
79 | arrays.push_back(val); | |
80 | val[0] = ""; val[1] = "one"; val[2] = ""; | |
81 | arrays.push_back(val); | |
82 | val[0] = ""; val[1] = ""; val[2] = "one"; | |
83 | arrays.push_back(val); | |
84 | val[0] = "one"; val[1] = "one"; val[2] = "one"; | |
85 | arrays.push_back(val); | |
86 | val[0] = "one"; val[1] = "two"; val[2] = "three"; | |
87 | arrays.push_back(val); | |
88 | array_tests(arrays); | |
89 | } | |
90 | ||
91 | #endif // TEST_ARRAY | |
92 | ||
93 | int main() | |
94 | { | |
95 | #ifdef TEST_ARRAY | |
96 | empty_array_test(); | |
97 | int_1_array_test(); | |
98 | string_1_array_test(); | |
99 | string_3_array_test(); | |
100 | #endif | |
101 | ||
102 | return boost::report_errors(); | |
103 | } |