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

Split the multiprecision concept checks into smaller chunks for lower compiler memory usage.

This commit is contained in:
jzmaddock
2021-02-02 15:34:13 +00:00
parent 8fe6b95e93
commit 46dacdbb3c
11 changed files with 316 additions and 13 deletions

View File

@@ -851,6 +851,12 @@ test-suite mp :
[ compile multiprc_concept_check_2.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_3.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_4.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_5.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_6.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_7.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_8.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_9.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile multiprc_concept_check_10.cpp : <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release <exception-handling>off:<build>no ]
[ compile ntl_concept_check.cpp : [ check-target-builds ../config//has_ntl_rr : : <build>no ] <debug-symbols>off ]
[ compile mpfr_concept_check.cpp : [ check-target-builds ../config//has_mpfr_class : : <build>no ] <debug-symbols>off ]
[ compile mpreal_concept_check.cpp : [ check-target-builds ../config//has_mpreal : : <build>no ] <debug-symbols>off ]

View File

@@ -35,8 +35,8 @@ BOOST_MATH_DECLARE_DISTRIBUTIONS(double, test_policy)
#endif
#if !defined(TEST_GROUP_1) && !defined(TEST_GROUP_2) && !defined(TEST_GROUP_3) \
&& !defined(TEST_GROUP_4) && !defined(TEST_GROUP_5) && !defined(TEST_GROUP_6) \
&& !defined(TEST_GROUP_7) && !defined(TEST_GROUP_8) && !defined(TEST_GROUP_9)
&& !defined(TEST_GROUP_4) && !defined(TEST_GROUP_5) && !defined(TEST_GROUP_6) && !defined(TEST_GROUP_7) && !defined(TEST_GROUP_8) && !defined(TEST_GROUP_9) \
&& !defined(TEST_GROUP_10) && !defined(TEST_GROUP_11) && !defined(TEST_GROUP_12) && !defined(TEST_GROUP_13) && !defined(TEST_GROUP_14) && !defined(TEST_GROUP_15)
# define TEST_GROUP_1
# define TEST_GROUP_2
# define TEST_GROUP_3
@@ -46,6 +46,12 @@ BOOST_MATH_DECLARE_DISTRIBUTIONS(double, test_policy)
# define TEST_GROUP_7
# define TEST_GROUP_8
# define TEST_GROUP_9
# define TEST_GROUP_10
# define TEST_GROUP_11
# define TEST_GROUP_12
# define TEST_GROUP_13
# define TEST_GROUP_14
# define TEST_GROUP_15
#endif
template <class RealType>
@@ -228,6 +234,8 @@ void instantiate(RealType)
boost::math::cbrt(v1);
boost::math::sqrt1pm1(v1);
boost::math::powm1(v1, v2);
#endif
#ifdef TEST_GROUP_5
boost::math::legendre_p(1, v1);
boost::math::legendre_p(1, 0, v1);
boost::math::legendre_q(1, v1);
@@ -296,6 +304,8 @@ void instantiate(RealType)
boost::math::atanh(v1);
boost::math::sin_pi(v1);
boost::math::cos_pi(v1);
#endif
#ifdef TEST_GROUP_6
boost::math::cyl_neumann(v1, v2);
boost::math::cyl_neumann(i, v2);
boost::math::cyl_bessel_j(v1, v2);
@@ -337,6 +347,8 @@ void instantiate(RealType)
boost::math::sph_hankel_2(v1, v2);
boost::math::sph_hankel_2(i, v2);
#endif
#endif
#ifdef TEST_GROUP_7
boost::math::airy_ai(v1);
boost::math::airy_bi(v1);
boost::math::airy_ai_prime(v1);
@@ -394,7 +406,7 @@ void instantiate(RealType)
boost::math::tangent_t2n<RealType>(i, i, &v1);
#endif
#ifdef TEST_GROUP_9
#ifdef TEST_GROUP_12
//
// Over again, but arguments may be expression templates:
//
@@ -452,6 +464,8 @@ void instantiate(RealType)
boost::math::cbrt(v1 * 1);
boost::math::sqrt1pm1(v1 * 1);
boost::math::powm1(v1 * 1, v2 + 0);
#endif
#ifdef TEST_GROUP_13
boost::math::legendre_p(1, v1 * 1);
boost::math::legendre_p(1, 0, v1 * 1);
boost::math::legendre_p_prime(1, v1 * 1);
@@ -520,6 +534,8 @@ void instantiate(RealType)
boost::math::atanh(v1 * 1);
boost::math::sin_pi(v1 * 1);
boost::math::cos_pi(v1 * 1);
#endif
#ifdef TEST_GROUP_14
boost::math::cyl_neumann(v1 * 1, v2 + 0);
boost::math::cyl_neumann(i, v2 * 1);
boost::math::cyl_bessel_j(v1 * 1, v2 + 0);
@@ -561,6 +577,8 @@ void instantiate(RealType)
boost::math::sph_hankel_2(v1, v2);
boost::math::sph_hankel_2(i, v2);
#endif
#endif
#ifdef TEST_GROUP_15
boost::math::airy_ai(v1 * 1);
boost::math::airy_bi(v1 * 1);
boost::math::airy_ai_prime(v1 * 1);
@@ -598,7 +616,7 @@ void instantiate(RealType)
boost::math::epsilon_difference(v1 * 1, v2 * 1);
#endif
#ifndef BOOST_MATH_INSTANTIATE_MINIMUM
#ifdef TEST_GROUP_5
#ifdef TEST_GROUP_8
//
// All over again, with a policy this time:
//
@@ -819,7 +837,7 @@ void instantiate(RealType)
boost::math::tangent_t2n<RealType>(i, pol);
boost::math::tangent_t2n<RealType>(i, i, &v1, pol);
#endif
#ifdef TEST_GROUP_6
#ifdef TEST_GROUP_9
//
// All over again with the versions in test::
//
@@ -1057,7 +1075,7 @@ void instantiate_mixed(RealType)
double lr = 0.5L;
(void)lr;
#endif
#ifdef TEST_GROUP_7
#ifdef TEST_GROUP_10
boost::math::tgamma(i);
boost::math::tgamma1pm1(i);
boost::math::lgamma(i);
@@ -1389,7 +1407,7 @@ void instantiate_mixed(RealType)
boost::math::lambert_wm1(i, pol);
boost::math::lambert_w0_prime(i, pol);
#endif
#ifdef TEST_GROUP_8
#ifdef TEST_GROUP_11
test::tgamma(i);
test::tgamma1pm1(i);
test::lgamma(i);

View File

@@ -0,0 +1,47 @@
// Copyright John Maddock 2020.
// Use, modification and distribution are subject to 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)
//
// This tests two things: that multiprecision::number meets our
// conceptual requirements, and that we can instantiate
// all our distributions and special functions on this type.
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_15
#ifdef _MSC_VER
# pragma warning(disable:4800)
# pragma warning(disable:4512)
# pragma warning(disable:4127)
# pragma warning(disable:4512)
# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;
typedef number<cpp_dec_float<50>, et_on> test_type;
// We get sporadic internal compiler errors from gcc-7.x when CI testing
// that don't appear to be reproducible locally. gcc-6.x and gcc-8.x are fine
// so for now it's a <shrug> and move on...
#if ! (defined(BOOST_GCC) && (__GNUC__ == 7))
void foo()
{
instantiate(test_type());
}
#endif
int main()
{
//BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<test_type>));
}

View File

@@ -11,7 +11,6 @@
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_4
#ifdef _MSC_VER
# pragma warning(disable:4800)
# pragma warning(disable:4512)
@@ -21,7 +20,6 @@
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/math/concepts/real_type_concept.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;

View File

@@ -10,7 +10,7 @@
// all our distributions and special functions on this type.
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_9
#define TEST_GROUP_5
#ifdef _MSC_VER
# pragma warning(disable:4800)
@@ -21,7 +21,6 @@
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/math/concepts/real_type_concept.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;

View File

@@ -0,0 +1,47 @@
// Copyright John Maddock 2020.
// Use, modification and distribution are subject to 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)
//
// This tests two things: that multiprecision::number meets our
// conceptual requirements, and that we can instantiate
// all our distributions and special functions on this type.
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_6
#ifdef _MSC_VER
# pragma warning(disable:4800)
# pragma warning(disable:4512)
# pragma warning(disable:4127)
# pragma warning(disable:4512)
# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;
typedef number<cpp_dec_float<50>, et_on> test_type;
// We get sporadic internal compiler errors from gcc-7.x when CI testing
// that don't appear to be reproducible locally. gcc-6.x and gcc-8.x are fine
// so for now it's a <shrug> and move on...
#if ! (defined(BOOST_GCC) && (__GNUC__ == 7))
void foo()
{
instantiate(test_type());
}
#endif
int main()
{
//BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<test_type>));
}

View File

@@ -0,0 +1,47 @@
// Copyright John Maddock 2020.
// Use, modification and distribution are subject to 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)
//
// This tests two things: that multiprecision::number meets our
// conceptual requirements, and that we can instantiate
// all our distributions and special functions on this type.
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_7
#ifdef _MSC_VER
# pragma warning(disable:4800)
# pragma warning(disable:4512)
# pragma warning(disable:4127)
# pragma warning(disable:4512)
# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;
typedef number<cpp_dec_float<50>, et_on> test_type;
// We get sporadic internal compiler errors from gcc-7.x when CI testing
// that don't appear to be reproducible locally. gcc-6.x and gcc-8.x are fine
// so for now it's a <shrug> and move on...
#if ! (defined(BOOST_GCC) && (__GNUC__ == 7))
void foo()
{
instantiate(test_type());
}
#endif
int main()
{
//BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<test_type>));
}

View File

@@ -0,0 +1,47 @@
// Copyright John Maddock 2020.
// Use, modification and distribution are subject to 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)
//
// This tests two things: that multiprecision::number meets our
// conceptual requirements, and that we can instantiate
// all our distributions and special functions on this type.
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_12
#ifdef _MSC_VER
# pragma warning(disable:4800)
# pragma warning(disable:4512)
# pragma warning(disable:4127)
# pragma warning(disable:4512)
# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;
typedef number<cpp_dec_float<50>, et_on> test_type;
// We get sporadic internal compiler errors from gcc-7.x when CI testing
// that don't appear to be reproducible locally. gcc-6.x and gcc-8.x are fine
// so for now it's a <shrug> and move on...
#if ! (defined(BOOST_GCC) && (__GNUC__ == 7))
void foo()
{
instantiate(test_type());
}
#endif
int main()
{
//BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<test_type>));
}

View File

@@ -0,0 +1,47 @@
// Copyright John Maddock 2020.
// Use, modification and distribution are subject to 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)
//
// This tests two things: that multiprecision::number meets our
// conceptual requirements, and that we can instantiate
// all our distributions and special functions on this type.
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_13
#ifdef _MSC_VER
# pragma warning(disable:4800)
# pragma warning(disable:4512)
# pragma warning(disable:4127)
# pragma warning(disable:4512)
# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;
typedef number<cpp_dec_float<50>, et_on> test_type;
// We get sporadic internal compiler errors from gcc-7.x when CI testing
// that don't appear to be reproducible locally. gcc-6.x and gcc-8.x are fine
// so for now it's a <shrug> and move on...
#if ! (defined(BOOST_GCC) && (__GNUC__ == 7))
void foo()
{
instantiate(test_type());
}
#endif
int main()
{
//BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<test_type>));
}

View File

@@ -0,0 +1,47 @@
// Copyright John Maddock 2020.
// Use, modification and distribution are subject to 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)
//
// This tests two things: that multiprecision::number meets our
// conceptual requirements, and that we can instantiate
// all our distributions and special functions on this type.
//
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
#define TEST_GROUP_14
#ifdef _MSC_VER
# pragma warning(disable:4800)
# pragma warning(disable:4512)
# pragma warning(disable:4127)
# pragma warning(disable:4512)
# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
#endif
#include <boost/multiprecision/cpp_dec_float.hpp>
#include "compile_test/instantiate.hpp"
using namespace boost::multiprecision;
typedef number<cpp_dec_float<50>, et_on> test_type;
// We get sporadic internal compiler errors from gcc-7.x when CI testing
// that don't appear to be reproducible locally. gcc-6.x and gcc-8.x are fine
// so for now it's a <shrug> and move on...
#if ! (defined(BOOST_GCC) && (__GNUC__ == 7))
void foo()
{
instantiate(test_type());
}
#endif
int main()
{
//BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<test_type>));
}

View File

@@ -90,8 +90,8 @@ long double sqrt(long double, void* = 0);
#define TEST_GROUP_5
#define TEST_GROUP_6
#define TEST_GROUP_8
#define TEST_GROUP_9
#include "compile_test/instantiate.hpp"
int main()