• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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