123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #ifndef TEST_VALUE_HPP
- #define TEST_VALUE_HPP
- #include <boost/cstdfloat.hpp> // For float_64_t, float128_t. Must be first include!
- #include <boost/lexical_cast.hpp>
- #include <boost/type_traits/is_constructible.hpp>
- #include <boost/type_traits/is_convertible.hpp>
- #ifdef BOOST_MATH_INSTRUMENT_CREATE_TEST_VALUE
- #endif
- #ifdef BOOST_HAS_FLOAT128
- typedef __float128 largest_float;
- #define BOOST_MATH_TEST_LARGEST_FLOAT_SUFFIX(x) x##Q
- #define BOOST_MATH_TEST_LARGEST_FLOAT_DIGITS 113
- #else
- typedef long double largest_float;
- #define BOOST_MATH_TEST_LARGEST_FLOAT_SUFFIX(x) x##L
- #define BOOST_MATH_TEST_LARGEST_FLOAT_DIGITS std::numeric_limits<long double>::digits
- #endif
- template <class T, class T2>
- inline T create_test_value(largest_float val, const char*, const std::true_type&, const T2&)
- {
-
-
-
-
-
-
-
-
-
- #ifdef BOOST_MATH_INSTRUMENT_CREATE_TEST_VALUE
- create_type = 1;
- #endif
- return static_cast<T>(val);
- }
- template <class T>
- inline T create_test_value(largest_float, const char* str, const std::false_type&, const std::true_type&)
- {
-
-
-
- #ifdef BOOST_MATH_INSTRUMENT_CREATE_TEST_VALUE
- create_type = 2;
- #endif
- return T(str);
- }
- template <class T>
- inline T create_test_value(largest_float, const char* str, const std::false_type&, const std::false_type&)
- {
-
-
-
- #ifdef BOOST_MATH_INSTRUMENT_CREATE_TEST_VALUE
- create_type = 3;
- #endif
- return boost::lexical_cast<T>(str);
- }
- #define BOOST_MATH_TEST_VALUE(T, x) create_test_value<T>(\
- BOOST_MATH_TEST_LARGEST_FLOAT_SUFFIX(x),\
- #x,\
- std::integral_constant<bool, \
- std::numeric_limits<T>::is_specialized &&\
- (std::numeric_limits<T>::radix == 2)\
- && (std::numeric_limits<T>::digits <= BOOST_MATH_TEST_LARGEST_FLOAT_DIGITS)\
- && std::is_convertible<largest_float, T>::value>(),\
- std::integral_constant<bool, \
- std::is_constructible<T, const char*>::value>()\
- )
- #endif
|