1 ///////////////////////////////////////////////////////////////
2 // Copyright 2011 John Maddock. Distributed under the Boost
3 // Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
7 # define _SCL_SECURE_NO_WARNINGS
11 #include <boost/multiprecision/cpp_dec_float.hpp>
13 void proc_that_throws()
15 throw std::runtime_error("");
20 boost::multiprecision::cpp_dec_float_50 a1(1), a2(1), b(3), c(-2);
26 BOOST_CHECK(boost::detail::test_errors() == 1);
27 --boost::detail::test_errors();
29 boost::multiprecision::cpp_dec_float_50 a_tol = a1 + a1 * 100 * std::numeric_limits<boost::multiprecision::cpp_dec_float_50>::epsilon();
30 boost::multiprecision::cpp_dec_float_50 tol = 100 * std::numeric_limits<boost::multiprecision::cpp_dec_float_50>::epsilon();
32 BOOST_CHECK_CLOSE(a1, a_tol, tol * 102); // Passes
33 BOOST_WARN_CLOSE(a1, a_tol, tol * 98); // fails
34 BOOST_CHECK_CLOSE(a1, a_tol, tol * 98); // fails
35 BOOST_CHECK(boost::detail::test_errors() == 1);
36 --boost::detail::test_errors();
38 BOOST_CHECK_CLOSE_FRACTION(a1, a_tol, tol * 1.02); // Passes
39 BOOST_WARN_CLOSE_FRACTION(a1, a_tol, tol * 0.98); // fails
40 BOOST_CHECK_CLOSE_FRACTION(a1, a_tol, tol * 0.98); // fails
41 BOOST_CHECK(boost::detail::test_errors() == 1);
42 --boost::detail::test_errors();
44 BOOST_CHECK_EQUAL(a1, a2);
45 BOOST_WARN_EQUAL(a1, b);
46 BOOST_CHECK_EQUAL(a1, b);
47 BOOST_CHECK(boost::detail::test_errors() == 1);
48 --boost::detail::test_errors();
50 BOOST_CHECK_NE(a1, b);
51 BOOST_WARN_NE(a1, a2);
52 BOOST_CHECK_NE(a1, a2);
53 BOOST_CHECK(boost::detail::test_errors() == 1);
54 --boost::detail::test_errors();
56 BOOST_CHECK_GT(a1, c);
57 BOOST_WARN_GT(a1, a2);
58 BOOST_CHECK_GT(a1, a2);
59 BOOST_CHECK(boost::detail::test_errors() == 1);
60 --boost::detail::test_errors();
62 BOOST_CHECK_LT(a1, b);
63 BOOST_WARN_LT(a1, a2);
64 BOOST_CHECK_LT(a1, a2);
65 BOOST_CHECK(boost::detail::test_errors() == 1);
66 --boost::detail::test_errors();
68 BOOST_CHECK_GE(a1, a2);
69 BOOST_CHECK_GE(a1, c);
71 BOOST_CHECK_GE(a1, b);
72 BOOST_CHECK(boost::detail::test_errors() == 1);
73 --boost::detail::test_errors();
75 BOOST_CHECK_LE(a1, a2);
76 BOOST_CHECK_LE(a1, b);
78 BOOST_CHECK_LE(a1, c);
79 BOOST_CHECK(boost::detail::test_errors() == 1);
80 --boost::detail::test_errors();
82 BOOST_CHECK_THROW(proc_that_throws(), std::runtime_error);
83 BOOST_CHECK_THROW(a1+b+c, std::runtime_error);
84 BOOST_CHECK(boost::detail::test_errors() == 1);
85 --boost::detail::test_errors();
87 return boost::report_errors();