mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | // 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
 |