1 #define BOOST_TEST_MAIN
2 // Copyright John Maddock 2007.
4 // Use, modification and distribution are subject to the
5 // Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt
7 // or copy at http://www.boost.org/LICENSE_1_0.txt)
9 #include <boost/math/policies/policy.hpp>
10 #include <boost/math/policies/error_handling.hpp>
11 #include <boost/math/tools/precision.hpp>
15 using namespace boost::math::policies
;
16 using namespace boost
;
18 #if !defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_MATH_DISABLE_CONSTEXPR)
20 constexpr auto p1
= make_policy();
21 constexpr auto p2
= make_policy(promote_double
<false>());
22 constexpr auto p3
= make_policy(domain_error
<user_error
>(), pole_error
<user_error
>(), overflow_error
<user_error
>(), underflow_error
<user_error
>(),
23 denorm_error
<user_error
>(), evaluation_error
<user_error
>(), rounding_error
<user_error
>(), indeterminate_result_error
<user_error
>());
24 constexpr auto p4
= make_policy(promote_float
<false>(), promote_double
<false>(), assert_undefined
<true>(), discrete_quantile
<real
>(),
25 digits10
<10>(), max_series_iterations
<100>(), max_root_iterations
<20>());
26 constexpr auto p5
= make_policy(digits2
<20>());
28 constexpr int d
= digits
<double, policy
<> >() + digits_base10
<double, policy
<> >();
29 constexpr unsigned long s
= get_max_series_iterations
<policy
<> >();
30 constexpr unsigned long r
= get_max_root_iterations
<policy
<> >();
32 constexpr double ep
= get_epsilon
<double, policy
<> >();
33 constexpr double ep2
= get_epsilon
<double, policy
<digits10
<7> > >();
35 constexpr auto p6
= make_policy(domain_error
<ignore_error
>(), pole_error
<ignore_error
>(), overflow_error
<ignore_error
>(), underflow_error
<ignore_error
>(),
36 denorm_error
<ignore_error
>(), evaluation_error
<ignore_error
>(), rounding_error
<ignore_error
>(), indeterminate_result_error
<ignore_error
>());
38 constexpr double r1
= raise_domain_error
<double>("foo", "Out of range", 0.0, p6
);
39 constexpr double r2
= raise_pole_error
<double>("func", "msg", 0.0, p6
);
40 constexpr double r3
= raise_overflow_error
<double>("func", "msg", p6
);
41 constexpr double r4
= raise_overflow_error("func", "msg", 0.0, p6
);
42 constexpr double r5
= raise_underflow_error
<double>("func", "msg", p6
);
43 constexpr double r6
= raise_denorm_error("func", "msg", 0.0, p6
);
44 constexpr double r7
= raise_evaluation_error("func", "msg", 0.0, p6
);
45 constexpr float r8
= raise_rounding_error("func", "msg", 0.0, 0.0f
, p6
);
46 constexpr float r9
= raise_indeterminate_result_error("func", "msg", 0.0, 0.0f
, p6
);
50 #ifndef BOOST_NO_CXX11_NOEXCEPT
52 static_assert(noexcept(make_policy()), "This expression should be noexcept");
53 static_assert(noexcept(make_policy(promote_double
<false>())), "This expression should be noexcept");
54 static_assert(noexcept(make_policy(domain_error
<user_error
>(), pole_error
<user_error
>(), overflow_error
<user_error
>(), underflow_error
<user_error
>(),
55 denorm_error
<user_error
>(), evaluation_error
<user_error
>(), rounding_error
<user_error
>(), indeterminate_result_error
<user_error
>())), "This expression should be noexcept");
56 static_assert(noexcept(make_policy(promote_float
<false>(), promote_double
<false>(), assert_undefined
<true>(), discrete_quantile
<real
>(),
57 digits10
<10>(), max_series_iterations
<100>(), max_root_iterations
<20>())), "This expression should be noexcept");
59 static_assert(noexcept(digits
<double, policy
<> >() + digits_base10
<double, policy
<> >()), "This expression should be noexcept");
60 static_assert(noexcept(get_max_series_iterations
<policy
<> >()), "This expression should be noexcept");
61 static_assert(noexcept(get_max_root_iterations
<policy
<> >()), "This expression should be noexcept");
63 static_assert(noexcept(get_epsilon
<double, policy
<> >()), "This expression should be noexcept");
67 } // BOOST_AUTO_TEST_CASE( test_main )