diff options
Diffstat (limited to 'src/boost/libs/math/test/special_functions_test.cpp')
-rw-r--r-- | src/boost/libs/math/test/special_functions_test.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/boost/libs/math/test/special_functions_test.cpp b/src/boost/libs/math/test/special_functions_test.cpp new file mode 100644 index 00000000..8ea88c19 --- /dev/null +++ b/src/boost/libs/math/test/special_functions_test.cpp @@ -0,0 +1,148 @@ +// test file for special functions. + +// (C) Copyright Hubert Holin 2003. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#include <iomanip> + + +#include <boost/mpl/list.hpp> + +#include <boost/test/unit_test.hpp> +#include <boost/test/unit_test_log.hpp> +#include <boost/math/tools/config.hpp> +#include <boost/math/tools/test.hpp> + + +template<typename T> +struct string_type_name; + +#define DEFINE_TYPE_NAME(Type) \ +template<> struct string_type_name<Type> \ +{ \ + static char const * _() \ + { \ + return #Type; \ + } \ +} + +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS +DEFINE_TYPE_NAME(float); +DEFINE_TYPE_NAME(double); +DEFINE_TYPE_NAME(long double); + +typedef boost::mpl::list<float,double,long double> test_types; +#else +DEFINE_TYPE_NAME(float); +DEFINE_TYPE_NAME(double); + +typedef boost::mpl::list<float,double> test_types; +#endif + +// Apple GCC 4.0 uses the "double double" format for its long double, +// which means that epsilon is VERY small but useless for +// comparisons. So, don't do those comparisons. +#if (defined(__APPLE_CC__) && defined(__GNUC__) && __GNUC__ == 4) || defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS) +typedef boost::mpl::list<float,double> near_eps_test_types; +#else +typedef boost::mpl::list<float,double,long double> near_eps_test_types; +#endif + +#include "sinc_test.hpp" +#include "sinhc_test.hpp" +#include "atanh_test.hpp" +#include "asinh_test.hpp" +#include "acosh_test.hpp" + + + +boost::unit_test::test_suite * init_unit_test_suite(int, char *[]) +{ + ::boost::unit_test::unit_test_log. + set_threshold_level(::boost::unit_test::log_messages); + + boost::unit_test::test_suite * test = + BOOST_TEST_SUITE("special_functions_test"); + + BOOST_TEST_MESSAGE("Results of special functions test."); + BOOST_TEST_MESSAGE(" "); + BOOST_TEST_MESSAGE("(C) Copyright Hubert Holin 2003-2005."); + BOOST_TEST_MESSAGE("Distributed under the Boost Software License, Version 1.0."); + BOOST_TEST_MESSAGE("(See accompanying file LICENSE_1_0.txt or copy at"); + BOOST_TEST_MESSAGE("http://www.boost.org/LICENSE_1_0.txt)"); + BOOST_TEST_MESSAGE(" "); + +#define BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR(fct) \ + test->add(BOOST_TEST_CASE_TEMPLATE(fct##_test, test_types)); + +#define BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR_NEAR_EPS(fct) \ + test->add(BOOST_TEST_CASE_TEMPLATE(fct##_test, near_eps_test_types)); + + +#define BOOST_SPECIAL_FUNCTIONS_COMMON_TEST \ + BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR(atanh) \ + BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR(asinh) \ + BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR(acosh) \ + BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR(sinc_pi) \ + BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR(sinhc_pi) + +#define BOOST_SPECIAL_FUNCTIONS_TEMPLATE_TEMPLATE_TEST \ + BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR_NEAR_EPS(sinc_pi_complex) \ + BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR_NEAR_EPS(sinhc_pi_complex) + + +#ifdef BOOST_NO_TEMPLATE_TEMPLATES + +#define BOOST_SPECIAL_FUNCTIONS_TEST \ + BOOST_SPECIAL_FUNCTIONS_COMMON_TEST \ + BOOST_TEST_MESSAGE("Warning: no template templates; curtailed functionality."); + +#else /* BOOST_NO_TEMPLATE_TEMPLATES */ + +#define BOOST_SPECIAL_FUNCTIONS_TEST \ + BOOST_SPECIAL_FUNCTIONS_COMMON_TEST \ + BOOST_SPECIAL_FUNCTIONS_TEMPLATE_TEMPLATE_TEST + +#endif /* BOOST_NO_TEMPLATE_TEMPLATES */ + + + BOOST_SPECIAL_FUNCTIONS_TEST + + +#undef BOOST_SPECIAL_FUNCTIONS_TEST + +#undef BOOST_SPECIAL_FUNCTIONS_TEMPLATE_TEMPLATE_TEST + +#undef BOOST_SPECIAL_FUNCTIONS_COMMON_TEST + +#undef BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR + +#undef BOOST_SPECIAL_FUNCTIONS_COMMON_GENERATOR_NEAR_EPS + +#ifdef BOOST_SPECIAL_FUNCTIONS_TEST_VERBOSE + + using ::std::numeric_limits; + + BOOST_TEST_MESSAGE("epsilon"); + + BOOST_TEST_MESSAGE( ::std::setw(15) << numeric_limits<float>::epsilon() + << ::std::setw(15) << numeric_limits<double>::epsilon() + << ::std::setw(15) << numeric_limits<long double>::epsilon()); + + BOOST_TEST_MESSAGE(" "); + + test->add(BOOST_TEST_CASE(atanh_manual_check)); + test->add(BOOST_TEST_CASE(asinh_manual_check)); + test->add(BOOST_TEST_CASE(acosh_manual_check)); + test->add(BOOST_TEST_CASE(sinc_pi_manual_check)); + test->add(BOOST_TEST_CASE(sinhc_pi_manual_check)); + +#endif /* BOOST_SPECIAL_FUNCTIONS_TEST_VERBOSE */ + + return test; +} + +#undef DEFINE_TYPE_NAME |