Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / multiprecision / test / test_test.cpp
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_
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
13 void proc_that_throws()
14 {
15    throw std::runtime_error("");
16 }
17
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    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();
86
87    return boost::report_errors();
88 }
89