diff --git a/test/sinhc_test.hpp b/test/sinhc_test.hpp index b50bd2e67..912e8b548 100644 --- a/test/sinhc_test.hpp +++ b/test/sinhc_test.hpp @@ -13,9 +13,11 @@ #include +#include #define BOOST_TEST_MAIN #include +#include BOOST_TEST_CASE_TEMPLATE_FUNCTION(sinhc_pi_test, T) @@ -33,6 +35,19 @@ BOOST_TEST_CASE_TEMPLATE_FUNCTION(sinhc_pi_test, T) BOOST_CHECK_PREDICATE(::std::less_equal(), (abs(sinhc_pi(static_cast(0))-static_cast(1))) (numeric_limits::epsilon())); + + using mp_t = boost::multiprecision::cpp_bin_float_50; + T val = 2; + T tolerance = boost::math::tools::epsilon() * 100; + for (unsigned i = 0; i < 1000; ++i) + { + val /= 3; + if (val < boost::math::tools::min_value()) + break; + T r1 = sinhc_pi(val); + T r2 = static_cast(sinh(mp_t(val)) / mp_t(val)); + BOOST_CHECK_CLOSE_FRACTION(r1, r2, tolerance); + } } @@ -53,6 +68,19 @@ BOOST_TEST_CASE_TEMPLATE_FUNCTION(sinhc_pi_complex_test, T) (abs(sinhc_pi(::std::complex(0, 1))- ::std::complex(sin(static_cast(1))))) (numeric_limits::epsilon())); + + using mp_t = boost::multiprecision::cpp_complex_50; + std::complex val(2, 2.5); + for (unsigned i = 0; i < 50; ++i) + { + val /= 3; + if (val.real() < boost::math::tools::min_value()) + break; + std::complex r1 = sinhc_pi(val); + std::complex r2 = static_cast>(sinh(mp_t(val)) / mp_t(val)); + BOOST_CHECK_LE(std::abs(r1.real() - r2.real()), boost::math::tools::epsilon()); + BOOST_CHECK_LE(std::abs(r1.imag() - r2.imag()), boost::math::tools::epsilon()); + } }