summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/multiprecision/test/concepts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/multiprecision/test/concepts
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/multiprecision/test/concepts')
-rw-r--r--src/boost/libs/multiprecision/test/concepts/number_concept_check.cpp251
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp165
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp132
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta.cpp120
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_2.cpp116
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_3.cpp118
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp136
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp140
-rw-r--r--src/boost/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp127
9 files changed, 1305 insertions, 0 deletions
diff --git a/src/boost/libs/multiprecision/test/concepts/number_concept_check.cpp b/src/boost/libs/multiprecision/test/concepts/number_concept_check.cpp
new file mode 100644
index 00000000..dc1e0239
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/number_concept_check.cpp
@@ -0,0 +1,251 @@
+// Copyright John Maddock 2011.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/concepts/real_type_concept.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T t = 1;
+ t = abs(t);
+ t = abs(t * t);
+
+ t = fabs(t);
+ t = fabs(t * t);
+
+ t = sqrt(t);
+ t = sqrt(t * t);
+
+ t = floor(t);
+ t = floor(t * t);
+
+ t = ceil(t);
+ t = ceil(t * t);
+
+ t = trunc(t);
+ t = trunc(t * t);
+
+ t = round(t);
+ t = round(t * t);
+
+ t = exp(t);
+ t = exp(t * t);
+
+ t = log(t);
+ t = log(t * t);
+
+ t = log10(t);
+ t = log10(t * t);
+
+ t = cos(t);
+ t = cos(t * t);
+
+ t = sin(t);
+ t = sin(t * t);
+
+ t = tan(t);
+ t = tan(t * t);
+
+ t = asin(t);
+ t = asin(t * t);
+
+ t = atan(t);
+ t = atan(t * t);
+
+ t = acos(t);
+ t = acos(t * t);
+
+ t = cosh(t);
+ t = cosh(t * t);
+
+ t = sinh(t);
+ t = sinh(t * t);
+
+ t = tanh(t);
+ t = tanh(t * t);
+
+ double dval = 2;
+ t = pow(t, t);
+ t = pow(t, t * t);
+ t = pow(t, dval);
+ t = pow(t * t, t);
+ t = pow(t * t, t * t);
+ t = pow(t * t, dval);
+ t = pow(dval, t);
+ t = pow(dval, t * t);
+
+ t = atan2(t, t);
+ t = atan2(t, t * t);
+ t = atan2(t, dval);
+ t = atan2(t * t, t);
+ t = atan2(t * t, t * t);
+ t = atan2(t * t, dval);
+ t = atan2(dval, t);
+ t = atan2(dval, t * t);
+
+ t = fmod(t, t);
+ t = fmod(t, t * t);
+ t = fmod(t, dval);
+ t = fmod(t * t, t);
+ t = fmod(t * t, t * t);
+ t = fmod(t * t, dval);
+ t = fmod(dval, t);
+ t = fmod(dval, t * t);
+
+ typedef typename T::backend_type backend_type;
+ typedef typename backend_type::exponent_type exp_type;
+ exp_type e = 0;
+ int i = 0;
+
+ t = ldexp(t, i);
+ t = ldexp(t * t, i);
+ t = ldexp(t, e);
+ t = ldexp(t * t, e);
+
+ t = frexp(t, &i);
+ t = frexp(t * t, &i);
+ t = frexp(t, &e);
+ t = frexp(t * t, &e);
+
+ t = scalbn(t, i);
+ t = scalbn(t * t, i);
+ t = scalbn(t, e);
+ t = scalbn(t * t, e);
+
+ t = logb(t);
+ t = logb(t * t);
+ e = ilogb(t);
+ e = ilogb(t * t);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+}
+
+int main()
+{
+#ifdef TEST_BACKEND
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::concepts::mp_number_float_architype>));
+#endif
+#ifdef TEST_MPF_50
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::mpf_float_50>));
+#endif
+#ifdef TEST_MPFR_50
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::mpfr_float_50>));
+#endif
+#ifdef TEST_MPFR_6
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> > >));
+#endif
+#ifdef TEST_MPFR_15
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> > >));
+#endif
+#ifdef TEST_MPFR_17
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> > >));
+#endif
+#ifdef TEST_MPFR_30
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> > >));
+#endif
+#ifdef TEST_MPFR_50
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::mpfr_float_50>));
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::cpp_dec_float_50>));
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::cpp_bin_float_50>));
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp
new file mode 100644
index 00000000..1defde71
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp
@@ -0,0 +1,165 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i;
+ (boost::math::fpclassify)(v1);
+ (boost::math::isfinite)(v1);
+ (boost::math::isnormal)(v1);
+ (boost::math::isnan)(v1);
+ (boost::math::isinf)(v1);
+ (boost::math::signbit)(v1);
+ (boost::math::copysign)(v1, v2);
+ (boost::math::changesign)(v1);
+ (boost::math::sign)(v1);
+ boost::math::log1p(v1);
+ boost::math::expm1(v1);
+ boost::math::cbrt(v1);
+ boost::math::sqrt1pm1(v1);
+ boost::math::powm1(v1, v2);
+ boost::math::hypot(v1, v2);
+ boost::math::sinc_pi(v1);
+ boost::math::sinhc_pi(v1);
+ boost::math::asinh(v1);
+ boost::math::acosh(v1);
+ boost::math::atanh(v1);
+ boost::math::sin_pi(v1);
+ boost::math::cos_pi(v1);
+ boost::math::trunc(v1);
+ boost::math::itrunc(v1);
+ boost::math::ltrunc(v1);
+ boost::math::round(v1);
+ boost::math::iround(v1);
+ boost::math::lround(v1);
+ boost::math::modf(v1, &v1);
+ boost::math::modf(v1, &i);
+ long l;
+ boost::math::modf(v1, &l);
+#ifdef BOOST_HAS_LONG_LONG
+ boost::math::lltrunc(v1);
+ boost::math::llround(v1);
+ boost::long_long_type ll;
+ boost::math::modf(v1, &ll);
+#endif
+ boost::math::pow<2>(v1);
+ boost::math::nextafter(v1, v1);
+ boost::math::float_next(v1);
+ boost::math::float_prior(v1);
+ boost::math::float_distance(v1, v1);
+ // Misc functions that don't fit elsewhere:
+ boost::math::expint(v1);
+ boost::math::expint(i);
+ boost::math::expint(i, v2);
+ boost::math::expint(i, i);
+ boost::math::zeta(v1);
+ boost::math::zeta(i);
+ boost::math::owens_t(v1, v2);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp
new file mode 100644
index 00000000..0a5002b2
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp
@@ -0,0 +1,132 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i(0);
+ boost::math::cyl_neumann(v1, v2);
+ boost::math::cyl_neumann(i, v2);
+#ifndef SLOW_COMPILER
+ boost::math::cyl_bessel_j(v1, v2);
+ boost::math::cyl_bessel_j(i, v2);
+ boost::math::cyl_bessel_i(v1, v2);
+ boost::math::cyl_bessel_i(i, v2);
+ boost::math::cyl_bessel_k(v1, v2);
+ boost::math::cyl_bessel_k(i, v2);
+ boost::math::sph_bessel(i, v2);
+ boost::math::sph_bessel(i, 1);
+ boost::math::sph_neumann(i, v2);
+ boost::math::sph_neumann(i, i);
+ boost::math::airy_ai(v1);
+ boost::math::airy_bi(v1);
+ boost::math::airy_ai_prime(v1);
+ boost::math::airy_bi_prime(v1);
+#endif
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta.cpp
new file mode 100644
index 00000000..61cbdf1b
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta.cpp
@@ -0,0 +1,120 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i;
+ boost::math::beta(v1, v2);
+ boost::math::beta(v1, v2, v3);
+ boost::math::betac(v1, v2, v3);
+ boost::math::ibeta(v1, v2, v3);
+ boost::math::ibetac(v1, v2, v3);
+ boost::math::ibeta_derivative(v1, v2, v3);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_2.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_2.cpp
new file mode 100644
index 00000000..aff7e5c8
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_2.cpp
@@ -0,0 +1,116 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i;
+ boost::math::ibeta_inv(v1, v2, v3);
+ boost::math::ibetac_inv(v1, v2, v3);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_3.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_3.cpp
new file mode 100644
index 00000000..fcae4078
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_beta_3.cpp
@@ -0,0 +1,118 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i;
+ boost::math::ibeta_inva(v1, v2, v3);
+ boost::math::ibetac_inva(v1, v2, v3);
+ boost::math::ibeta_invb(v1, v2, v3);
+ boost::math::ibetac_invb(v1, v2, v3);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp
new file mode 100644
index 00000000..4d3d24b9
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp
@@ -0,0 +1,136 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ boost::math::ellint_1(v1);
+ boost::math::ellint_1(v1, v2);
+ boost::math::ellint_2(v1);
+ boost::math::ellint_2(v1, v2);
+ boost::math::ellint_3(v1, v2);
+ boost::math::ellint_3(v1, v2, v3);
+ boost::math::ellint_rc(v1, v2);
+ boost::math::ellint_rd(v1, v2, v3);
+ boost::math::ellint_rf(v1, v2, v3);
+ boost::math::ellint_rj(v1, v2, v3, v1);
+ boost::math::jacobi_elliptic(v1, v2, &v1, &v2);
+ boost::math::jacobi_cd(v1, v2);
+ boost::math::jacobi_cn(v1, v2);
+ boost::math::jacobi_cs(v1, v2);
+ boost::math::jacobi_dc(v1, v2);
+ boost::math::jacobi_dn(v1, v2);
+ boost::math::jacobi_ds(v1, v2);
+ boost::math::jacobi_nc(v1, v2);
+ boost::math::jacobi_nd(v1, v2);
+ boost::math::jacobi_ns(v1, v2);
+ boost::math::jacobi_sc(v1, v2);
+ boost::math::jacobi_sd(v1, v2);
+ boost::math::jacobi_sn(v1, v2);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp
new file mode 100644
index 00000000..4d879abc
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp
@@ -0,0 +1,140 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i;
+ boost::math::tgamma(v1);
+ boost::math::tgamma1pm1(v1);
+ boost::math::lgamma(v1);
+ boost::math::lgamma(v1, &i);
+ boost::math::digamma(v1);
+ boost::math::tgamma_ratio(v1, v2);
+ boost::math::tgamma_delta_ratio(v1, v2);
+ boost::math::factorial<T>(i);
+ boost::math::unchecked_factorial<T>(i);
+ i = boost::math::max_factorial<T>::value;
+ boost::math::double_factorial<T>(i);
+ boost::math::rising_factorial(v1, i);
+ boost::math::falling_factorial(v1, i);
+ boost::math::gamma_p_derivative(v2, v3);
+ boost::math::tgamma(v1, v2);
+ boost::math::tgamma_lower(v1, v2);
+ boost::math::gamma_p(v1, v2);
+ boost::math::gamma_q(v1, v2);
+ boost::math::gamma_p_inv(v1, v2);
+ boost::math::gamma_q_inv(v1, v2);
+ boost::math::gamma_p_inva(v1, v2);
+ boost::math::gamma_q_inva(v1, v2);
+ boost::math::erf(v1);
+ boost::math::erfc(v1);
+ boost::math::erf_inv(v1);
+ boost::math::erfc_inv(v1);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/src/boost/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp
new file mode 100644
index 00000000..a67f1d98
--- /dev/null
+++ b/src/boost/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp
@@ -0,0 +1,127 @@
+// Copyright John Maddock 2012.
+// 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 that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#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/container_hash/hash.hpp>
+#include <libs/math/test/compile_test/poison.hpp>
+
+#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
+#define TEST_MPF_50
+#define TEST_BACKEND
+#define TEST_MPZ
+#define TEST_MPFR_50
+#define TEST_MPFR_6
+#define TEST_MPFR_15
+#define TEST_MPFR_17
+#define TEST_MPFR_30
+#define TEST_CPP_DEC_FLOAT
+#define TEST_CPP_DEC_FLOAT_NO_ET
+#define TEST_LOGGED_ADAPTER
+#define TEST_CPP_BIN_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+#if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ boost::math::legendre_p(1, v1);
+ boost::math::legendre_p(1, 0, v1);
+ boost::math::legendre_q(1, v1);
+ boost::math::legendre_next(2, v1, v2, v3);
+ boost::math::legendre_next(2, 2, v1, v2, v3);
+ boost::math::laguerre(1, v1);
+ boost::math::laguerre(2, 1, v1);
+ boost::math::laguerre(2u, 1u, v1);
+ boost::math::laguerre_next(2, v1, v2, v3);
+ boost::math::laguerre_next(2, 1, v1, v2, v3);
+ boost::math::hermite(1, v1);
+ boost::math::hermite_next(2, v1, v2, v3);
+ boost::math::spherical_harmonic_r(2, 1, v1, v2);
+ boost::math::spherical_harmonic_i(2, 1, v1, v2);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test_extra(boost::multiprecision::cpp_dec_float_50());
+#endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
+#ifdef TEST_CPP_DEC_FLOAT_NO_ET
+ test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
+#endif
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}