1 // unit test file asinh.hpp for the special functions test suite
3 // (C) Copyright Hubert Holin 2003.
4 // Distributed under the Boost Software License, Version 1.0. (See
5 // accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
13 #define BOOST_TEST_MAiN
14 #include <boost/math/special_functions/asinh.hpp>
17 #include <boost/test/unit_test.hpp>
21 T asinh_error_evaluator(T x)
27 using ::std::numeric_limits;
29 using ::boost::math::asinh;
32 static T const epsilon = numeric_limits<float>::epsilon();
37 T absolute_error = abs(z-x);
38 T relative_error = absolute_error*cosh(x);
39 T scaled_error = relative_error/epsilon;
45 BOOST_TEST_CASE_TEMPLATE_FUNCTION(asinh_test, T)
47 BOOST_TEST_MESSAGE("Testing asinh in the real domain for "
48 << string_type_name<T>::_() << ".");
50 for (int i = 0; i <= 80; i++)
52 T x = static_cast<T>(i-40)/static_cast<T>(4);
54 BOOST_CHECK_PREDICATE(::std::less_equal<T>(),
55 (asinh_error_evaluator(x))
61 if(std::numeric_limits<T>::has_infinity)
63 T inf = std::numeric_limits<T>::infinity();
64 boost::math::policies::policy<boost::math::policies::overflow_error<boost::math::policies::ignore_error> > pol;
65 BOOST_CHECK_EQUAL(boost::math::asinh(inf, pol), inf);
66 BOOST_CHECK_EQUAL(boost::math::asinh(-inf, pol), -inf);
71 void asinh_manual_check()
73 BOOST_TEST_MESSAGE(" ");
74 BOOST_TEST_MESSAGE("asinh");
76 for (int i = 0; i <= 80; i++)
78 float xf = static_cast<float>(i-40)/static_cast<float>(4);
79 double xd = static_cast<double>(i-40)/static_cast<double>(4);
81 static_cast<long double>(i-40)/static_cast<long double>(4);
83 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
84 BOOST_TEST_MESSAGE( ::std::setw(15)
85 << asinh_error_evaluator(xf)
87 << asinh_error_evaluator(xd)
89 << asinh_error_evaluator(xl));
91 BOOST_TEST_MESSAGE( ::std::setw(15)
92 << asinh_error_evaluator(xf)
94 << asinh_error_evaluator(xd));
98 BOOST_TEST_MESSAGE(" ");