2
0
mirror of https://github.com/boostorg/math.git synced 2026-01-19 04:22:09 +00:00

Finish instantiation runners

This commit is contained in:
Christopher Kormanyos
2024-02-17 10:44:39 +01:00
parent 5b8569c78e
commit 988ebefc8a
2 changed files with 265 additions and 167 deletions

View File

@@ -13,13 +13,14 @@
#endif
template <class RealType>
struct instantiate_runner_result
{
static bool value;
};
struct instantiate_runner_result { static bool value; };
template <class RealType> bool instantiate_runner_result<RealType>::value;
template <class RealType>
bool instantiate_runner_result<RealType>::value;
struct instantiate_mixed_runner_result { static bool value; };
template <class RealType> bool instantiate_mixed_runner_result<RealType>::value;
#include <boost/math/tools/config.hpp>
@@ -33,6 +34,8 @@ bool instantiate_runner_result<RealType>::value;
#include <boost/math/concepts/distributions.hpp>
#endif
#include <memory>
#ifndef BOOST_MATH_INSTANTIATE_MINIMUM
typedef boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false> > test_policy;
@@ -79,12 +82,6 @@ void instantiate(RealType)
using namespace boost::math;
using namespace boost::math::concepts;
long l { };
static_cast<void>(l);
#ifdef BOOST_HAS_LONG_LONG
boost::long_long_type ll;
(void)ll;
#endif
#ifdef TEST_GROUP_1
#if !defined(BOOST_MATH_NO_DISTRIBUTION_CONCEPT_TESTS)
function_requires<DistributionConcept<arcsine_distribution<RealType> > >();
@@ -200,10 +197,12 @@ void instantiate(RealType)
#endif
int i { 1 };
int i_other { };
// Deal with unused variable warnings:
static_cast<void>(i);
auto v1(static_cast<RealType>(0.51));
auto v2(static_cast<RealType>(0.5));
auto v2(static_cast<RealType>(0.5));
auto v3(static_cast<RealType>(0.5));
boost::detail::dummy_constructor dc;
boost::output_iterator_archetype<RealType> oi(dc);
@@ -341,14 +340,7 @@ void instantiate(RealType)
boost::math::sinhc_pi(v1);
boost::math::asinh(v1);
{
using std::fabs;
auto v_special { v1 };
while(v_special < RealType(1))
{
v_special *= 2;
}
RealType v_special { 1.55L };
boost::math::acosh(v_special);
}
@@ -389,16 +381,7 @@ void instantiate(RealType)
boost::math::cyl_neumann_zero(v1, i, i, oi);
boost::math::lambert_w0(v1);
{
using std::fabs;
auto v_special { v1 };
using std::exp;
while(v_special > exp(RealType(-1)))
{
v_special /= 2;
}
RealType v_special { 0.234L };
boost::math::lambert_wm1(-v_special);
}
@@ -459,11 +442,15 @@ void instantiate(RealType)
boost::math::modf(v1, &l_other);
}
#ifdef BOOST_HAS_LONG_LONG
boost::math::lltrunc(v1);
boost::math::llround(v1);
boost::math::modf(v1, &ll);
#endif
{
long long ll_other { };
boost::math::modf(v1, &ll_other);
}
boost::math::pow<2>(v1);
boost::math::nextafter(v1, v1);
boost::math::float_next(v1);
@@ -476,19 +463,15 @@ void instantiate(RealType)
boost::math::unchecked_bernoulli_b2n<RealType>(i);
boost::math::bernoulli_b2n<RealType>(i);
{
RealType* v1_array = new RealType[i];
auto v1_array = std::make_unique<RealType[]>(i);
boost::math::bernoulli_b2n<RealType>(i, i, &v1_array[0U]);
delete [] v1_array;
}
boost::math::tangent_t2n<RealType>(i);
{
RealType* v1_array = new RealType[i];
auto v1_array = std::make_unique<RealType[]>(i);
boost::math::tangent_t2n<RealType>(i, i, &v1_array[0U]);
delete [] v1_array;
}
#endif
@@ -627,14 +610,7 @@ void instantiate(RealType)
boost::math::sinhc_pi(v1 * 1);
boost::math::asinh(v1 * 1);
{
using std::fabs;
auto v_special { v1 };
while(v_special < RealType(1))
{
v_special *= 2;
}
RealType v_special { 1.55L };
boost::math::acosh(v_special * 1);
}
@@ -673,18 +649,7 @@ void instantiate(RealType)
boost::math::cyl_neumann_zero(v1 * 1, i, i, oi);
boost::math::lambert_w0(v1 * 1);
{
using std::fabs;
auto v_special { v1 };
using std::exp;
while(v_special > exp(RealType(-1)))
{
v_special /= 2;
}
v_special = -v_special;
RealType v_special { -0.234L };
boost::math::lambert_wm1(v_special * 1);
}
@@ -718,19 +683,30 @@ void instantiate(RealType)
boost::math::round(v1 * 1);
boost::math::iround(v1 * 1);
boost::math::lround(v1 * 1);
//boost::math::modf(v1 * 1, &v1_other);
//boost::math::modf(v1 * 1, &i_other);
//{
// long l_other { };
//
// boost::math::modf(v1 * 1, &l_other);
//}
#ifdef BOOST_HAS_LONG_LONG
{
RealType v1_other { };
boost::math::modf(v1 * 1, &v1_other);
}
{
int i_other { };
boost::math::modf(v1 * 1, &i_other);
}
{
long l_other { };
boost::math::modf(v1 * 1, &l_other);
}
boost::math::lltrunc(v1 * 1);
boost::math::llround(v1 * 1);
//boost::long_long_type ll;
//boost::math::modf(v1 * 1, &ll);
#endif
{
long long ll_other { };
boost::math::modf(v1 * 1, &ll_other);
}
boost::math::pow<2>(v1 * 1);
boost::math::nextafter(v1 * 1, v1 + 0);
boost::math::float_next(v1 * 1);
@@ -860,14 +836,7 @@ void instantiate(RealType)
boost::math::sinhc_pi(v1, pol);
boost::math::asinh(v1, pol);
{
using std::fabs;
auto v_special { v1 };
while(v_special < RealType(1))
{
v_special *= 2;
}
RealType v_special { 1.55L };
boost::math::acosh(v_special, pol);
}
@@ -904,18 +873,7 @@ void instantiate(RealType)
boost::math::cyl_neumann_zero(v1, i, i, oi, pol);
boost::math::lambert_w0(v1, pol);
{
using std::fabs;
auto v_special { v1 };
using std::exp;
while(v_special > exp(RealType(-1)))
{
v_special /= 2;
}
v_special = -v_special;
RealType v_special { -0.234L };
boost::math::lambert_wm1(v_special, pol);
}
@@ -987,9 +945,9 @@ void instantiate(RealType)
iround(v1, pol);
lround(v1, pol);
{
RealType v1_to_get { v1 };
RealType v1_other { };
modf(v1, &v1_to_get, pol);
modf(v1, &v1_other, pol);
}
modf(v1, &i_other, pol);
{
@@ -997,13 +955,17 @@ void instantiate(RealType)
modf(v1, &l_other, pol);
}
#ifdef BOOST_HAS_LONG_LONG
using boost::math::lltrunc;
using boost::math::llround;
lltrunc(v1, pol);
llround(v1, pol);
modf(v1, &ll, pol);
#endif
{
long long ll_other { };
modf(v1, &ll_other, pol);
}
boost::math::pow<2>(v1, pol);
boost::math::nextafter(v1, v1, pol);
boost::math::float_next(v1, pol);
@@ -1013,20 +975,16 @@ void instantiate(RealType)
boost::math::bernoulli_b2n<RealType>(i, pol);
{
RealType* v1_array = new RealType[i];
auto v1_array = std::make_unique<RealType[]>(i);
boost::math::bernoulli_b2n<RealType>(i, i, &v1_array[0U], pol);
delete [] v1_array;
}
boost::math::tangent_t2n<RealType>(i, pol);
{
RealType* v1_array = new RealType[i];
auto v1_array = std::make_unique<RealType[]>(i);
boost::math::tangent_t2n<RealType>(i, i, &v1_array[0U], pol);
delete [] v1_array;
}
#endif
#ifdef TEST_GROUP_9
@@ -1162,14 +1120,7 @@ void instantiate(RealType)
test::sinhc_pi(v1);
test::asinh(v1);
{
using std::fabs;
auto v_special { v1 };
while(v_special < RealType(1))
{
v_special *= 2;
}
RealType v_special { 1.55L };
test::acosh(v_special);
}
@@ -1206,18 +1157,7 @@ void instantiate(RealType)
test::cyl_neumann_zero(v1, i, i, oi);
test::lambert_w0(v1);
{
using std::fabs;
auto v_special { v1 };
using std::exp;
while(v_special > exp(RealType(-1)))
{
v_special /= 2;
}
v_special = -v_special;
RealType v_special { -0.234L };
test::lambert_wm1(v_special);
}
@@ -1268,9 +1208,9 @@ void instantiate(RealType)
test::iround(v1);
test::lround(v1);
{
RealType v1_to_get { v1 };
RealType v1_other { };
test::modf(v1, &v1_to_get);
test::modf(v1, &v1_other);
}
test::modf(v1, &i_other);
{
@@ -1278,11 +1218,15 @@ void instantiate(RealType)
test::modf(v1, &l_other);
}
#ifdef BOOST_HAS_LONG_LONG
test::lltrunc(v1);
test::llround(v1);
test::modf(v1, &ll);
#endif
{
long long ll_other { };
test::modf(v1, &ll_other);
}
test::pow<2>(v1);
test::nextafter(v1, v1);
test::float_next(v1);
@@ -1298,25 +1242,27 @@ void instantiate(RealType)
template <class RealType>
void instantiate_mixed(RealType)
{
instantiate_mixed_runner_result<RealType>::value = false;
using namespace boost;
using namespace boost::math;
#ifndef BOOST_MATH_INSTANTIATE_MINIMUM
int i = 1;
(void)i;
static_cast<void>(i);
long l = 1;
(void)l;
static_cast<void>(l);
short s = 1;
(void)s;
static_cast<void>(s);
float fr = 0.5F;
(void)fr;
static_cast<void>(fr);
double dr = 0.5;
(void)dr;
static_cast<void>(dr);
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
long double lr = 0.5L;
(void)lr;
static_cast<void>(lr);
#else
double lr = 0.5L;
(void)lr;
double lr = static_cast<double>(0.5L);
static_cast<void>(lr);
#endif
#ifdef TEST_GROUP_10
boost::math::tgamma(i);
@@ -1350,7 +1296,11 @@ void instantiate_mixed(RealType)
boost::math::gamma_q_inva(i, lr);
boost::math::erf(i);
boost::math::erfc(i);
boost::math::erf_inv(i);
{
int i_zero { 0 };
boost::math::erf_inv(i_zero);
}
boost::math::erfc_inv(i);
boost::math::beta(i, s);
boost::math::beta(fr, lr);
@@ -1368,9 +1318,19 @@ void instantiate_mixed(RealType)
boost::math::ibetac_inv(fr, dr, lr);
boost::math::ibeta_inva(l, i, s);
boost::math::ibeta_inva(fr, dr, lr);
boost::math::ibetac_inva(l, i, s);
{
int i_zero { 0 };
short s_zero { 0 };
boost::math::ibetac_inva(l, i_zero, s_zero);
}
boost::math::ibetac_inva(fr, dr, lr);
boost::math::ibeta_invb(l, i, s);
{
int i_zero { 0 };
short s_zero { 0 };
boost::math::ibeta_invb(l, i_zero, s_zero);
}
boost::math::ibeta_invb(fr, dr, lr);
boost::math::ibetac_invb(l, i, s);
boost::math::ibetac_invb(fr, dr, lr);
@@ -1391,7 +1351,11 @@ void instantiate_mixed(RealType)
boost::math::powm1(fr, lr);
//boost::math::legendre_p(1, i);
boost::math::legendre_p(1, 0, s);
boost::math::legendre_q(1, i);
{
int i_zero { 0 };
boost::math::legendre_q(1, i_zero);
}
boost::math::laguerre(1, i);
boost::math::laguerre(2, 1, i);
boost::math::laguerre(2u, 1u, s);
@@ -1401,22 +1365,44 @@ void instantiate_mixed(RealType)
boost::math::chebyshev_t_prime(1, i);
boost::math::spherical_harmonic_r(2, 1, s, i);
boost::math::spherical_harmonic_i(2, 1, fr, lr);
boost::math::ellint_1(i);
{
int i_zero { 0 };
boost::math::ellint_1(i_zero);
}
boost::math::ellint_1(i, s);
boost::math::ellint_1(fr, lr);
boost::math::ellint_2(i);
boost::math::ellint_2(i, l);
boost::math::ellint_2(fr, lr);
boost::math::ellint_3(i, l);
{
int i_zero { 0 };
long l_zero { 0 };
boost::math::ellint_3(i_zero, l_zero);
}
boost::math::ellint_3(fr, lr);
boost::math::ellint_3(s, l, i);
{
int i_zero { 0 };
long l_zero { 0 };
boost::math::ellint_3(s, l_zero, i_zero);
}
boost::math::ellint_3(fr, dr, lr);
boost::math::ellint_d(i);
{
int i_zero { 0 };
boost::math::ellint_d(i_zero);
}
boost::math::ellint_d(i, l);
boost::math::ellint_d(fr, lr);
boost::math::jacobi_zeta(i, l);
boost::math::jacobi_zeta(fr, lr);
boost::math::heuman_lambda(i, l);
{
int i_zero { 0 };
boost::math::heuman_lambda(i_zero, l);
}
boost::math::heuman_lambda(fr, lr);
boost::math::ellint_rc(i, s);
boost::math::ellint_rc(fr, lr);
@@ -1458,7 +1444,11 @@ void instantiate_mixed(RealType)
boost::math::sinhc_pi(i);
boost::math::asinh(s);
boost::math::acosh(l);
boost::math::atanh(l);
{
long l_zero { 0 };
boost::math::atanh(l_zero);
}
boost::math::sin_pi(s);
boost::math::cos_pi(s);
boost::math::cyl_neumann(fr, dr);
@@ -1521,7 +1511,11 @@ void instantiate_mixed(RealType)
boost::math::gamma_q_inva(i, lr, pol);
boost::math::erf(i, pol);
boost::math::erfc(i, pol);
boost::math::erf_inv(i, pol);
{
int i_zero { 0 };
boost::math::erf_inv(i_zero, pol);
}
boost::math::erfc_inv(i, pol);
boost::math::beta(i, s, pol);
boost::math::beta(fr, lr, pol);
@@ -1539,9 +1533,19 @@ void instantiate_mixed(RealType)
boost::math::ibetac_inv(fr, dr, lr, pol);
boost::math::ibeta_inva(l, i, s, pol);
boost::math::ibeta_inva(fr, dr, lr, pol);
boost::math::ibetac_inva(l, i, s, pol);
{
int i_zero { 0 };
short s_zero { 0 };
boost::math::ibetac_inva(l, i_zero, s_zero, pol);
}
boost::math::ibetac_inva(fr, dr, lr, pol);
boost::math::ibeta_invb(l, i, s, pol);
{
int i_zero { 0 };
short s_zero { 0 };
boost::math::ibeta_invb(l, i_zero, s_zero, pol);
}
boost::math::ibeta_invb(fr, dr, lr, pol);
boost::math::ibetac_invb(l, i, s, pol);
boost::math::ibetac_invb(fr, dr, lr, pol);
@@ -1557,7 +1561,11 @@ void instantiate_mixed(RealType)
boost::math::powm1(fr, lr, pol);
//boost::math::legendre_p(1, i, pol);
boost::math::legendre_p(1, 0, s, pol);
boost::math::legendre_q(1, i, pol);
{
int i_zero { 0 };
boost::math::legendre_q(1, i_zero, pol);
}
boost::math::laguerre(1, i, pol);
boost::math::laguerre(2, 1, i, pol);
boost::math::laguerre(2u, 1u, s, pol);
@@ -1567,22 +1575,44 @@ void instantiate_mixed(RealType)
boost::math::chebyshev_t_prime(1, i, pol);
boost::math::spherical_harmonic_r(2, 1, s, i, pol);
boost::math::spherical_harmonic_i(2, 1, fr, lr, pol);
boost::math::ellint_1(i, pol);
{
int i_zero { 0 };
boost::math::ellint_1(i_zero, pol);
}
boost::math::ellint_1(i, s, pol);
boost::math::ellint_1(fr, lr, pol);
boost::math::ellint_2(i, pol);
boost::math::ellint_2(i, l, pol);
boost::math::ellint_2(fr, lr, pol);
boost::math::ellint_3(i, l, pol);
{
int i_zero { 0 };
long l_zero { 0 };
boost::math::ellint_3(i_zero, l_zero, pol);
}
boost::math::ellint_3(fr, lr, pol);
boost::math::ellint_3(s, l, i, pol);
{
int i_zero { 0 };
long l_zero { 0 };
boost::math::ellint_3(s, l_zero, i_zero, pol);
}
boost::math::ellint_3(fr, dr, lr, pol);
boost::math::ellint_d(i, pol);
{
int i_zero { 0 };
boost::math::ellint_d(i_zero, pol);
}
boost::math::ellint_d(i, l, pol);
boost::math::ellint_d(fr, lr, pol);
boost::math::jacobi_zeta(i, l, pol);
boost::math::jacobi_zeta(fr, lr, pol);
boost::math::heuman_lambda(i, l, pol);
{
int i_zero { 0 };
boost::math::heuman_lambda(i_zero, l, pol);
}
boost::math::heuman_lambda(fr, lr, pol);
boost::math::ellint_rc(i, s, pol);
boost::math::ellint_rc(fr, lr, pol);
@@ -1624,7 +1654,11 @@ void instantiate_mixed(RealType)
boost::math::sinhc_pi(i, pol);
boost::math::asinh(s, pol);
boost::math::acosh(l, pol);
boost::math::atanh(l, pol);
{
long l_zero { 0 };
boost::math::atanh(l_zero, pol);
}
boost::math::sin_pi(s, pol);
boost::math::cos_pi(s, pol);
boost::math::cyl_neumann(fr, dr, pol);
@@ -1654,7 +1688,11 @@ void instantiate_mixed(RealType)
boost::math::owens_t(fr, dr, pol);
boost::math::owens_t(i, s, pol);
boost::math::lambert_w0(i, pol);
boost::math::lambert_wm1(i, pol);
{
int i_zero { 0 };
boost::math::lambert_wm1(i_zero, pol);
}
boost::math::lambert_w0_prime(i, pol);
#endif
#ifdef TEST_GROUP_11
@@ -1689,7 +1727,11 @@ void instantiate_mixed(RealType)
test::gamma_q_inva(i, lr);
test::erf(i);
test::erfc(i);
test::erf_inv(i);
{
int i_zero { 0 };
test::erf_inv(i_zero);
}
test::erfc_inv(i);
test::beta(i, s);
test::beta(fr, lr);
@@ -1707,9 +1749,19 @@ void instantiate_mixed(RealType)
test::ibetac_inv(fr, dr, lr);
test::ibeta_inva(l, i, s);
test::ibeta_inva(fr, dr, lr);
test::ibetac_inva(l, i, s);
{
int i_zero { 0 };
short s_zero { 0 };
test::ibetac_inva(l, i_zero, s_zero);
}
test::ibetac_inva(fr, dr, lr);
test::ibeta_invb(l, i, s);
{
int i_zero { 0 };
short s_zero { 0 };
test::ibeta_invb(l, i_zero, s_zero);
}
test::ibeta_invb(fr, dr, lr);
test::ibetac_invb(l, i, s);
test::ibetac_invb(fr, dr, lr);
@@ -1730,7 +1782,11 @@ void instantiate_mixed(RealType)
test::powm1(fr, lr);
//test::legendre_p(1, i);
test::legendre_p(1, 0, s);
test::legendre_q(1, i);
{
int i_zero { 0 };
test::legendre_q(1, i_zero);
}
test::laguerre(1, i);
test::laguerre(2, 1, i);
test::laguerre(2u, 1u, s);
@@ -1740,22 +1796,44 @@ void instantiate_mixed(RealType)
test::chebyshev_t_prime(1, s);
test::spherical_harmonic_r(2, 1, s, i);
test::spherical_harmonic_i(2, 1, fr, lr);
test::ellint_1(i);
{
int i_zero { 0 };
test::ellint_1(i_zero);
}
test::ellint_1(i, s);
test::ellint_1(fr, lr);
test::ellint_2(i);
test::ellint_2(i, l);
test::ellint_2(fr, lr);
test::ellint_3(i, l);
{
int i_zero { 0 };
long l_zero { 0 };
test::ellint_3(i_zero, l_zero);
}
test::ellint_3(fr, lr);
test::ellint_3(s, l, i);
{
int i_zero { 0 };
long l_zero { 0 };
test::ellint_3(s, l_zero, i_zero);
}
test::ellint_3(fr, dr, lr);
test::ellint_d(i);
{
int i_zero { 0 };
test::ellint_d(i_zero);
}
test::ellint_d(i, l);
test::ellint_d(fr, lr);
test::jacobi_zeta(i, l);
test::jacobi_zeta(fr, lr);
test::heuman_lambda(i, l);
{
int i_zero { 0 };
test::heuman_lambda(i_zero, l);
}
test::heuman_lambda(fr, lr);
test::ellint_rc(i, s);
test::ellint_rc(fr, lr);
@@ -1773,7 +1851,11 @@ void instantiate_mixed(RealType)
test::sinhc_pi(i);
test::asinh(s);
test::acosh(l);
test::atanh(l);
{
long l_zero { 0 };
test::atanh(l_zero);
}
test::sin_pi(s);
test::cos_pi(s);
test::cyl_neumann(fr, dr);
@@ -1807,10 +1889,16 @@ void instantiate_mixed(RealType)
test::owens_t(fr, dr);
test::owens_t(i, s);
boost::math::lambert_w0(i);
boost::math::lambert_wm1(i);
{
int i_zero { 0 };
boost::math::lambert_wm1(i_zero);
}
boost::math::lambert_w0_prime(i);
#endif
#endif
instantiate_mixed_runner_result<RealType>::value = true;
}

View File

@@ -26,13 +26,23 @@ namespace local
BOOST_TEST(result_instantiate_and_run_is_ok);
}
auto instantiate_mixed_runner() -> void
{
instantiate_mixed(static_cast<detail::float64_t>(1.23L));
const bool result_instantiate_mixed_and_run_is_ok = instantiate_mixed_runner_result<detail::float64_t>::value;
BOOST_TEST(result_instantiate_mixed_and_run_is_ok);
}
} // namespace local
auto main() -> int
{
static_assert(std::numeric_limits<local::detail::float64_t>::digits == 53, "Error: rong digits in local::float64_t");
static_assert((std::numeric_limits<local::detail::float64_t>::digits == 53), "Error: wrong digits in local::detail::float64_t");
local::instantiate_runner();
local::instantiate_mixed_runner();
return boost::report_errors();
}