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 https://www.boost.org/LICENSE_1_0.txt
5
6 #ifdef _MSC_VER
7 #define _SCL_SECURE_NO_WARNINGS
8 #endif
9
10 #include "test.hpp"
11 #include <boost/multiprecision/cpp_dec_float.hpp>
12
proc_that_throws()13 void proc_that_throws()
14 {
15 throw std::runtime_error("");
16 }
17
main()18 int main()
19 {
20 boost::multiprecision::cpp_dec_float_50 a1(1), a2(1), b(3), c(-2);
21
22 BOOST_WARN(a1);
23 BOOST_WARN(a1 == b);
24 BOOST_CHECK(a1);
25 BOOST_CHECK(a1 == b);
26 BOOST_CHECK(boost::detail::test_errors() == 1);
27 --boost::detail::test_errors();
28
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();
31
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();
37
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();
43
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();
49
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();
55
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();
61
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();
67
68 BOOST_CHECK_GE(a1, a2);
69 BOOST_CHECK_GE(a1, c);
70 BOOST_WARN_GE(a1, b);
71 BOOST_CHECK_GE(a1, b);
72 BOOST_CHECK(boost::detail::test_errors() == 1);
73 --boost::detail::test_errors();
74
75 BOOST_CHECK_LE(a1, a2);
76 BOOST_CHECK_LE(a1, b);
77 BOOST_WARN_LE(a1, c);
78 BOOST_CHECK_LE(a1, c);
79 BOOST_CHECK(boost::detail::test_errors() == 1);
80 --boost::detail::test_errors();
81
82 #ifndef BOOST_NO_EXCEPTIONS
83 BOOST_CHECK_THROW(proc_that_throws(), std::runtime_error);
84 BOOST_CHECK_THROW(a1 + b + c, std::runtime_error);
85 #endif
86 BOOST_CHECK(boost::detail::test_errors() == 1);
87 --boost::detail::test_errors();
88
89 return boost::report_errors();
90 }
91