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> test()41void 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 main()60int 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 } 99