]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright John Maddock 2015. |
2 | ||
3 | // Use, modification and distribution are subject to the | |
4 | // Boost Software License, Version 1.0. | |
5 | // (See accompanying file LICENSE_1_0.txt | |
6 | // or copy at http://www.boost.org/LICENSE_1_0.txt) | |
7 | ||
8 | #ifdef _MSC_VER | |
92f5a8d4 | 9 | #define _SCL_SECURE_NO_WARNINGS |
7c673cae FG |
10 | #endif |
11 | ||
12 | #include <boost/multiprecision/cpp_int.hpp> | |
13 | #include <boost/multiprecision/cpp_bin_float.hpp> | |
14 | #include <boost/multiprecision/cpp_dec_float.hpp> | |
15 | #include <boost/multiprecision/debug_adaptor.hpp> | |
16 | #include <boost/multiprecision/logged_adaptor.hpp> | |
17 | ||
18 | #ifdef TEST_FLOAT128 | |
19 | #include <boost/multiprecision/float128.hpp> | |
20 | #endif | |
21 | #ifdef TEST_GMP | |
22 | #include <boost/multiprecision/gmp.hpp> | |
23 | #endif | |
24 | #ifdef TEST_MPFR | |
25 | #include <boost/multiprecision/mpfr.hpp> | |
26 | #endif | |
27 | #ifdef TEST_MPFI | |
28 | #include <boost/multiprecision/mpfi.hpp> | |
29 | #endif | |
30 | #ifdef TEST_TOMMATH | |
31 | #include <boost/multiprecision/tommath.hpp> | |
32 | #endif | |
33 | ||
34 | #include <boost/functional/hash.hpp> | |
35 | ||
36 | #include "test.hpp" | |
1e59de90 | 37 | #include <functional> // std::hash |
7c673cae FG |
38 | #include <iostream> |
39 | #include <iomanip> | |
40 | ||
41 | template <class T> | |
42 | void test() | |
43 | { | |
92f5a8d4 TL |
44 | T val = 23; |
45 | std::size_t t1 = boost::hash<T>()(val); | |
7c673cae FG |
46 | BOOST_CHECK(t1); |
47 | ||
7c673cae FG |
48 | std::size_t t2 = std::hash<T>()(val); |
49 | BOOST_CHECK_EQUAL(t1, t2); | |
92f5a8d4 | 50 | val = -23; |
7c673cae FG |
51 | std::size_t t3 = boost::hash<T>()(val); |
52 | BOOST_CHECK_NE(t1, t3); | |
7c673cae FG |
53 | t2 = std::hash<T>()(val); |
54 | BOOST_CHECK_EQUAL(t3, t2); | |
7c673cae FG |
55 | } |
56 | ||
7c673cae FG |
57 | int main() |
58 | { | |
59 | test<boost::multiprecision::cpp_int>(); | |
60 | test<boost::multiprecision::checked_int1024_t>(); | |
61 | //test<boost::multiprecision::checked_uint512_t >(); | |
62 | test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void> > >(); | |
63 | ||
64 | test<boost::multiprecision::cpp_bin_float_100>(); | |
65 | test<boost::multiprecision::cpp_dec_float_100>(); | |
66 | ||
67 | test<boost::multiprecision::cpp_rational>(); | |
68 | ||
69 | test<boost::multiprecision::number<boost::multiprecision::debug_adaptor<boost::multiprecision::cpp_int::backend_type> > >(); | |
70 | ||
71 | test<boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_int::backend_type> > >(); | |
72 | ||
73 | #ifdef TEST_FLOAT128 | |
74 | test<boost::multiprecision::float128>(); | |
75 | #endif | |
76 | #ifdef TEST_GMP | |
77 | test<boost::multiprecision::mpz_int>(); | |
78 | test<boost::multiprecision::mpq_rational>(); | |
79 | test<boost::multiprecision::mpf_float>(); | |
80 | #endif | |
81 | ||
82 | #ifdef TEST_MPFR | |
83 | test<boost::multiprecision::mpfr_float_50>(); | |
84 | #endif | |
85 | #ifdef TEST_MPFI | |
86 | test<boost::multiprecision::mpfi_float_50>(); | |
87 | #endif | |
88 | ||
89 | #ifdef TEST_TOMMATH | |
90 | test<boost::multiprecision::tom_int>(); | |
91 | test<boost::multiprecision::tom_rational>(); | |
92 | #endif | |
93 | ||
94 | return boost::report_errors(); | |
95 | } |