Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / multiprecision / test / test_hash.cpp
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
9 #define _SCL_SECURE_NO_WARNINGS
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"
37 #include <iostream>
38 #include <iomanip>
39
40 template <class T>
41 void test()
42 {
43    T           val = 23;
44    std::size_t t1  = boost::hash<T>()(val);
45    BOOST_CHECK(t1);
46
47 #ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
48    std::size_t t2 = std::hash<T>()(val);
49    BOOST_CHECK_EQUAL(t1, t2);
50 #endif
51    val            = -23;
52    std::size_t t3 = boost::hash<T>()(val);
53    BOOST_CHECK_NE(t1, t3);
54 #ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
55    t2 = std::hash<T>()(val);
56    BOOST_CHECK_EQUAL(t3, t2);
57 #endif
58 }
59
60 int main()
61 {
62    test<boost::multiprecision::cpp_int>();
63    test<boost::multiprecision::checked_int1024_t>();
64    //test<boost::multiprecision::checked_uint512_t >();
65    test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void> > >();
66
67    test<boost::multiprecision::cpp_bin_float_100>();
68    test<boost::multiprecision::cpp_dec_float_100>();
69
70    test<boost::multiprecision::cpp_rational>();
71
72    test<boost::multiprecision::number<boost::multiprecision::debug_adaptor<boost::multiprecision::cpp_int::backend_type> > >();
73
74    test<boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_int::backend_type> > >();
75
76 #ifdef TEST_FLOAT128
77    test<boost::multiprecision::float128>();
78 #endif
79 #ifdef TEST_GMP
80    test<boost::multiprecision::mpz_int>();
81    test<boost::multiprecision::mpq_rational>();
82    test<boost::multiprecision::mpf_float>();
83 #endif
84
85 #ifdef TEST_MPFR
86    test<boost::multiprecision::mpfr_float_50>();
87 #endif
88 #ifdef TEST_MPFI
89    test<boost::multiprecision::mpfi_float_50>();
90 #endif
91
92 #ifdef TEST_TOMMATH
93    test<boost::multiprecision::tom_int>();
94    test<boost::multiprecision::tom_rational>();
95 #endif
96
97    return boost::report_errors();
98 }