diff --git a/test/test_0F1.cpp b/test/test_0F1.cpp index 26e1e304b2..0c501a0c1c 100644 --- a/test/test_0F1.cpp +++ b/test/test_0F1.cpp @@ -16,7 +16,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept|cpp_bin_float_quad|dec_40"; } diff --git a/test/test_1F1.cpp b/test/test_1F1.cpp index f3b226efdd..f204e85322 100644 --- a/test/test_1F1.cpp +++ b/test/test_1F1.cpp @@ -15,7 +15,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept|cpp_bin_float_quad|dec_40|cpp_bin_float_double_extended"; } @@ -71,6 +71,8 @@ void expected_results() "Small.*", // test data group ".*", 1000, 300); // test function + if(boost::math::policies::promote_double<>()) + { #if (LDBL_MANT_DIG < DBL_MANT_DIG * 2) && (LDBL_MANT_DIG != DBL_MANT_DIG) // // long double has only a little extra precision and errors may creep @@ -116,6 +118,7 @@ void expected_results() ".*", 10, 5); // test function #endif + } add_expected_result( ".*", // compiler diff --git a/test/test_1F1_log.cpp b/test/test_1F1_log.cpp index b0ea07332b..f9b16008ef 100644 --- a/test/test_1F1_log.cpp +++ b/test/test_1F1_log.cpp @@ -15,7 +15,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept|cpp_bin_float_quad|dec_40|cpp_bin_float_double_extended"; } @@ -72,6 +72,8 @@ void expected_results() ".*", 1000, 300); // test function #if (LDBL_MANT_DIG < DBL_MANT_DIG * 2) && (LDBL_MANT_DIG != DBL_MANT_DIG) + if(boost::math::policies::promote_double<>()) + { // // long double has only a little extra precision and errors may creep // into the double results: @@ -106,7 +108,7 @@ void expected_results() "double", // test type(s) "Bug.*", // test data group ".*", 300, 50); // test function - + } #endif add_expected_result( diff --git a/test/test_1F1_regularized.cpp b/test/test_1F1_regularized.cpp index e16e32943f..315f2a4b83 100644 --- a/test/test_1F1_regularized.cpp +++ b/test/test_1F1_regularized.cpp @@ -17,7 +17,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept|cpp_bin_float_quad|dec_40|cpp_bin_float_double_extended"; } @@ -74,6 +74,8 @@ void expected_results() ".*", 1000, 300); // test function #if (LDBL_MANT_DIG < DBL_MANT_DIG * 2) && (LDBL_MANT_DIG != DBL_MANT_DIG) + if(boost::math::policies::promote_double<>()) + { // // long double has only a little extra precision and errors may creep // into the double results: @@ -108,7 +110,7 @@ void expected_results() "double", // test type(s) "Bug.*", // test data group ".*", 300, 50); // test function - + } #endif add_expected_result( diff --git a/test/test_2F0.cpp b/test/test_2F0.cpp index 4e5fe4bacf..1e8a1d25e1 100644 --- a/test/test_2F0.cpp +++ b/test/test_2F0.cpp @@ -16,7 +16,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept|cpp_bin_float_quad|dec_40"; } @@ -29,7 +29,7 @@ void expected_results() #endif #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if (boost::math::policies::digits >() != boost::math::policies::digits >()) + if (boost::math::policies::promote_double<>() && boost::math::policies::digits >() != boost::math::policies::digits >()) { add_expected_result( ".*", // compiler diff --git a/test/test_bessel_i.cpp b/test/test_bessel_i.cpp index 817569760a..119e9cddd3 100644 --- a/test/test_bessel_i.cpp +++ b/test/test_bessel_i.cpp @@ -51,7 +51,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_bessel_i_prime.cpp b/test/test_bessel_i_prime.cpp index 831cd7e0d6..508536825e 100644 --- a/test/test_bessel_i_prime.cpp +++ b/test/test_bessel_i_prime.cpp @@ -37,7 +37,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_bessel_j.cpp b/test/test_bessel_j.cpp index 1dd63a68a5..6d78c8c478 100644 --- a/test/test_bessel_j.cpp +++ b/test/test_bessel_j.cpp @@ -51,7 +51,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } @@ -197,6 +197,8 @@ void expected_results() BOOST_IF_CONSTEXPR ((std::numeric_limits::digits != std::numeric_limits::digits) && (std::numeric_limits::digits < 90)) { + if (boost::math::policies::promote_double<>()) + { // some errors spill over into type double as well: add_expected_result( ".*", // compiler @@ -226,6 +228,7 @@ void expected_results() "double", // test type(s) ".*", // test data group ".*", 30, 30); // test function + } // // and we have a few cases with higher limits as well: // @@ -251,7 +254,7 @@ void expected_results() ".*(JN|j).*|.*Tricky.*", // test data group ".*", 33000, 20000); // test function } - else BOOST_IF_CONSTEXPR (std::numeric_limits::digits >= 90) + else BOOST_IF_CONSTEXPR (boost::math::policies::promote_double<>() && std::numeric_limits::digits >= 90) { add_expected_result( ".*", // compiler diff --git a/test/test_bessel_j_prime.cpp b/test/test_bessel_j_prime.cpp index d4641bbd48..3a22434452 100644 --- a/test/test_bessel_j_prime.cpp +++ b/test/test_bessel_j_prime.cpp @@ -38,7 +38,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } @@ -177,7 +177,7 @@ void expected_results() #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if((std::numeric_limits::digits != std::numeric_limits::digits) + if(boost::math::policies::promote_double<>() && (std::numeric_limits::digits != std::numeric_limits::digits) && (std::numeric_limits::digits < 90)) { // some errors spill over into type double as well: diff --git a/test/test_bessel_k.cpp b/test/test_bessel_k.cpp index 6c31f5ab05..3926fd63b2 100644 --- a/test/test_bessel_k.cpp +++ b/test/test_bessel_k.cpp @@ -58,7 +58,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_bessel_k_prime.cpp b/test/test_bessel_k_prime.cpp index 6d69268f85..a9e03d0387 100644 --- a/test/test_bessel_k_prime.cpp +++ b/test/test_bessel_k_prime.cpp @@ -43,7 +43,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_bessel_y.cpp b/test/test_bessel_y.cpp index 8251920c5b..836c67b45f 100644 --- a/test/test_bessel_y.cpp +++ b/test/test_bessel_y.cpp @@ -51,7 +51,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } @@ -201,7 +201,7 @@ void expected_results() ".*", 2000, 2000); // test function #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - BOOST_IF_CONSTEXPR((std::numeric_limits::digits != std::numeric_limits::digits) + BOOST_IF_CONSTEXPR(boost::math::policies::promote_double<>() && (std::numeric_limits::digits != std::numeric_limits::digits) && (std::numeric_limits::digits < 90)) { // some errors spill over into type double as well: @@ -220,7 +220,7 @@ void expected_results() ".*Yv.*", // test data group ".*", 80, 70); // test function } - else BOOST_IF_CONSTEXPR(std::numeric_limits::digits >= 90) + else BOOST_IF_CONSTEXPR(boost::math::policies::promote_double<>() && std::numeric_limits::digits >= 90) { add_expected_result( ".*", // compiler diff --git a/test/test_bessel_y_prime.cpp b/test/test_bessel_y_prime.cpp index 9848b63356..4d99259cd6 100644 --- a/test/test_bessel_y_prime.cpp +++ b/test/test_bessel_y_prime.cpp @@ -38,7 +38,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } @@ -220,7 +220,7 @@ void expected_results() ".*", 2000, 2000); // test function #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if((std::numeric_limits::digits != std::numeric_limits::digits) + if(boost::math::policies::promote_double<>() && (std::numeric_limits::digits != std::numeric_limits::digits) && (std::numeric_limits::digits < 90)) { // some errors spill over into type double as well: diff --git a/test/test_binomial_coeff.cpp b/test/test_binomial_coeff.cpp index 552fcda946..3659da55ee 100644 --- a/test/test_binomial_coeff.cpp +++ b/test/test_binomial_coeff.cpp @@ -36,7 +36,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_carlson.cpp b/test/test_carlson.cpp index 41b16fae61..e4512f980a 100644 --- a/test/test_carlson.cpp +++ b/test/test_carlson.cpp @@ -43,7 +43,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_cbrt.cpp b/test/test_cbrt.cpp index 6abb9bd885..4b23d6390c 100644 --- a/test/test_cbrt.cpp +++ b/test/test_cbrt.cpp @@ -46,7 +46,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_ellint_1.cpp b/test/test_ellint_1.cpp index 9366e4545a..af953165ac 100644 --- a/test/test_ellint_1.cpp +++ b/test/test_ellint_1.cpp @@ -48,7 +48,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_ellint_2.cpp b/test/test_ellint_2.cpp index 0da012c133..8cc6317000 100644 --- a/test/test_ellint_2.cpp +++ b/test/test_ellint_2.cpp @@ -44,7 +44,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_ellint_3.cpp b/test/test_ellint_3.cpp index 18b82e6488..bad1d342ba 100644 --- a/test/test_ellint_3.cpp +++ b/test/test_ellint_3.cpp @@ -41,7 +41,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_ellint_d.cpp b/test/test_ellint_d.cpp index 420bc0c022..6930dc24b4 100644 --- a/test/test_ellint_d.cpp +++ b/test/test_ellint_d.cpp @@ -42,7 +42,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_gamma.cpp b/test/test_gamma.cpp index fb86080d72..98345e7f53 100644 --- a/test/test_gamma.cpp +++ b/test/test_gamma.cpp @@ -43,7 +43,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_hermite.cpp b/test/test_hermite.cpp index 60dafdb8f1..28fd2b02b7 100644 --- a/test/test_hermite.cpp +++ b/test/test_hermite.cpp @@ -47,7 +47,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_heuman_lambda.cpp b/test/test_heuman_lambda.cpp index cdcf39aa68..98b748026d 100644 --- a/test/test_heuman_lambda.cpp +++ b/test/test_heuman_lambda.cpp @@ -42,7 +42,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_hypergeometric_dist.cpp b/test/test_hypergeometric_dist.cpp index 961e5394a6..8a59ed1ed1 100644 --- a/test/test_hypergeometric_dist.cpp +++ b/test/test_hypergeometric_dist.cpp @@ -57,7 +57,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } @@ -69,7 +69,7 @@ void expected_results() largest_type = "(long\\s+)?double"; #endif #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if((boost::math::tools::digits() > boost::math::tools::digits()) + if(boost::math::policies::promote_double<>() && (boost::math::tools::digits() > boost::math::tools::digits()) && (boost::math::tools::digits() < 100)) { // diff --git a/test/test_ibeta.cpp b/test/test_ibeta.cpp index 987b361105..a53e4d0bfa 100644 --- a/test/test_ibeta.cpp +++ b/test/test_ibeta.cpp @@ -56,7 +56,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_ibeta_derivative.cpp b/test/test_ibeta_derivative.cpp index 5d6a312754..70081193d2 100644 --- a/test/test_ibeta_derivative.cpp +++ b/test/test_ibeta_derivative.cpp @@ -48,7 +48,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_ibeta_inv.cpp b/test/test_ibeta_inv.cpp index ab1f4267fc..9b4a7339af 100644 --- a/test/test_ibeta_inv.cpp +++ b/test/test_ibeta_inv.cpp @@ -67,7 +67,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } @@ -87,6 +87,8 @@ void expected_results() // if(std::numeric_limits::digits == 64) { + if(boost::math::policies::promote_double<>()) + { add_expected_result( ".*", // compiler ".*", // stdlib @@ -94,6 +96,7 @@ void expected_results() "double", // test type(s) ".*", // test data group ".*", 20, 10); // test function + } add_expected_result( ".*", // compiler ".*", // stdlib diff --git a/test/test_ibeta_inv_ab.cpp b/test/test_ibeta_inv_ab.cpp index fdf735ef1e..26d34ca80e 100644 --- a/test/test_ibeta_inv_ab.cpp +++ b/test/test_ibeta_inv_ab.cpp @@ -55,7 +55,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_igamma.cpp b/test/test_igamma.cpp index 6e034f3c60..3be05bb814 100644 --- a/test/test_igamma.cpp +++ b/test/test_igamma.cpp @@ -49,7 +49,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_igamma_inv.cpp b/test/test_igamma_inv.cpp index 80a553427c..c8ff058ef3 100644 --- a/test/test_igamma_inv.cpp +++ b/test/test_igamma_inv.cpp @@ -59,7 +59,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_jacobi.cpp b/test/test_jacobi.cpp index d4e7cc0aa8..6c5ccaadf8 100644 --- a/test/test_jacobi.cpp +++ b/test/test_jacobi.cpp @@ -39,7 +39,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_jacobi_zeta.cpp b/test/test_jacobi_zeta.cpp index c64f99580e..890d06f2e7 100644 --- a/test/test_jacobi_zeta.cpp +++ b/test/test_jacobi_zeta.cpp @@ -42,7 +42,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_laguerre.cpp b/test/test_laguerre.cpp index e4290c7a1a..3cde95bcf2 100644 --- a/test/test_laguerre.cpp +++ b/test/test_laguerre.cpp @@ -38,7 +38,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } @@ -54,7 +54,7 @@ void expected_results() // even though the implementation contains nothing but basic // arithmetic? // - if((std::numeric_limits::digits <= 64) + if(boost::math::policies::promote_double<>() && (std::numeric_limits::digits <= 64) && (std::numeric_limits::digits != std::numeric_limits::digits)) { #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS diff --git a/test/test_legendre.cpp b/test/test_legendre.cpp index 7551fdd605..f043b81400 100644 --- a/test/test_legendre.cpp +++ b/test/test_legendre.cpp @@ -38,7 +38,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } @@ -52,7 +52,7 @@ void expected_results() // // Linux: // - if((std::numeric_limits::digits <= 64) + if(boost::math::policies::promote_double<>() && (std::numeric_limits::digits <= 64) && (std::numeric_limits::digits != std::numeric_limits::digits)) { #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS diff --git a/test/test_nc_beta.cpp b/test/test_nc_beta.cpp index 105db62a3e..9e0f9a059e 100644 --- a/test/test_nc_beta.cpp +++ b/test/test_nc_beta.cpp @@ -63,22 +63,19 @@ void expected_results() // Define the max and mean errors expected for // various compilers and platforms. // - const char* largest_type; + const char* largest_type = "(long\\s+)?double|real_concept"; + const char* non_promoted_type = largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) - { - largest_type = "(long\\s+)?double|real_concept"; - } - else + if(boost::math::policies::digits >() != boost::math::policies::digits >()) { largest_type = "long double|real_concept"; + if (boost::math::policies::promote_double<>()) + non_promoted_type = largest_type; } -#else - largest_type = "(long\\s+)?double|real_concept"; #endif #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::tools::digits() == 64) + if(boost::math::policies::promote_double<>() && boost::math::tools::digits() == 64) { // // Allow a small amount of error leakage from long double to double: @@ -117,7 +114,7 @@ void expected_results() "[^|]*", // compiler "[^|]*", // stdlib "[^|]*", // platform - largest_type, // test type(s) + non_promoted_type, // test type(s) "[^|]*medium[^|]*", // test data group "[^|]*", 1500, 500); // test function add_expected_result( @@ -131,7 +128,7 @@ void expected_results() "[^|]*", // compiler "[^|]*", // stdlib "[^|]*", // platform - largest_type, // test type(s) + non_promoted_type, // test type(s) "[^|]*large[^|]*", // test data group "[^|]*", 20000, 2000); // test function // diff --git a/test/test_nc_chi_squared.cpp b/test/test_nc_chi_squared.cpp index 0d6f261fa3..a39d0fc9f0 100644 --- a/test/test_nc_chi_squared.cpp +++ b/test/test_nc_chi_squared.cpp @@ -68,7 +68,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_nc_t.cpp b/test/test_nc_t.cpp index 8a12635de7..d48c25115b 100644 --- a/test/test_nc_t.cpp +++ b/test/test_nc_t.cpp @@ -53,7 +53,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_owens_t.cpp b/test/test_owens_t.cpp index 11389dd205..9902da70e5 100644 --- a/test/test_owens_t.cpp +++ b/test/test_owens_t.cpp @@ -73,7 +73,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } diff --git a/test/test_polygamma.cpp b/test/test_polygamma.cpp index 276fc9fd14..d90baabe5a 100644 --- a/test/test_polygamma.cpp +++ b/test/test_polygamma.cpp @@ -15,7 +15,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } @@ -51,7 +51,7 @@ void expected_results() ".*negative.*", // test data group ".*", 800, 500); // test function #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if((std::numeric_limits::digits > std::numeric_limits::digits) + if(boost::math::policies::promote_double<>() && (std::numeric_limits::digits > std::numeric_limits::digits) && (std::numeric_limits::digits - std::numeric_limits::digits < 20)) { add_expected_result( diff --git a/test/test_spherical_harmonic.cpp b/test/test_spherical_harmonic.cpp index baeba51c22..cc0509a205 100644 --- a/test/test_spherical_harmonic.cpp +++ b/test/test_spherical_harmonic.cpp @@ -50,7 +50,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } @@ -62,7 +62,7 @@ void expected_results() largest_type = "(long\\s+)?double"; #endif #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if((std::numeric_limits::digits <= 64) && + if(boost::math::policies::promote_double<>() && (std::numeric_limits::digits <= 64) && (std::numeric_limits::digits != std::numeric_limits::digits)) { add_expected_result( diff --git a/test/test_tgamma_ratio.cpp b/test/test_tgamma_ratio.cpp index 4a7fa982a5..9da13c5137 100644 --- a/test/test_tgamma_ratio.cpp +++ b/test/test_tgamma_ratio.cpp @@ -35,7 +35,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; } diff --git a/test/test_zeta.cpp b/test/test_zeta.cpp index b1c4d23ac8..b1a1e4281b 100644 --- a/test/test_zeta.cpp +++ b/test/test_zeta.cpp @@ -39,7 +39,7 @@ void expected_results() // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS - if(boost::math::policies::digits >() == boost::math::policies::digits >()) + if(!boost::math::policies::promote_double<>() || boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double"; }