]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/multiprecision/test/Jamfile.v2
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / multiprecision / test / Jamfile.v2
index b4856e2aabdd90919cfc68cdda6a6e98877b075b..ac4d4845ba0fa873dcf0f2792cbbd30771a70344 100644 (file)
@@ -14,6 +14,33 @@ local mpfr_path = [ modules.peek : MPFR_PATH ] ;
 local mpfi_path = [ modules.peek : MPFI_PATH ] ;
 local tommath_path = [ modules.peek : TOMMATH_PATH ] ;
 
+
+#######################################################################################
+#
+#  NOTE: Because these tests take a fair while to build and run, they are split up into
+#        multiple smaller test suites which are:
+#
+#        arithmetic_tests
+#        functions_and_limits
+#        conversions
+#        cpp_int_tests
+#        misc
+#        specfun
+#        compile_fail
+#        concepts
+#        examples
+#        
+#        You can run an individual suite by passing it's name to b2 on the command line.
+#        Or you can run all except the "specfun" tests (which are very slow) by not specifying anything.
+#
+#        Please make sure that any new tests are added to one of the test suites, and that the
+#        build times for the various suites are reasonably balanced: otherwise the CI builds
+#        will time out if one suite contains too many.
+#
+#######################################################################################################
+
+path-constant here : . ;
+
 project : requirements
    <include>$(gmp_path)
    <include>$(gmp_path)/mpfr
@@ -28,9 +55,19 @@ project : requirements
    <toolset>msvc:<runtime-link>static
    <toolset>msvc:<link>static
    <toolset>msvc:<warnings>all
-   <toolset>msvc:<cxxflags>/fp:precise
+   <toolset>msvc:<cxxflags>/fp\:precise
    <toolset>intel-win:<runtime-link>static
    <toolset>intel-win:<link>static
+   <toolset>clang-win:<link>static
+   
+   # Assembler error "File too big" caused by lots of C++ templates, for example, math/floating_point_examples.cpp.
+   # Some projects on some toolsets may require
+   #   <toolset>gcc-mingw:<cxxflags>\"-Wa,-mbig-obj\"
+   # See https://digitalkarabela.com/mingw-w64-how-to-fix-file-too-big-too-many-sections/
+   # <toolset>gcc-mingw:<cxxflags>-Wa,-mbig-obj # Some projects may overflow assembler and require equivalent of MSVC /bigobj.
+   # Requires version 2.30 of GNU binutils.
+   # Best applied only to projects that require this, see multiprecision/example  run math/floating_point_examples.cpp.
+   
    # Speed up compiles:
    <toolset>msvc:<debug-symbols>off
    <toolset>intel:<debug-symbols>off
@@ -50,6 +87,7 @@ lib gmp : : <search>$(gmp_path) ;
 lib mpfr : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug ;
 lib mpfi : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug <search>$(mpfi_path) <search>$(mpfi_path)/src ;
 lib quadmath ;
+lib mpc ;
 
 if $(tommath_path)
 {
@@ -64,440 +102,896 @@ else
 
 lib no_eh_support : no_eh_test_support.cpp ;
 
-run test_arithmetic_backend_concept.cpp no_eh_support ;
-
-run test_arithmetic_cpp_dec_float_1.cpp no_eh_support ;
-run test_arithmetic_cpp_dec_float_2.cpp no_eh_support ;
-run test_arithmetic_cpp_dec_float_3.cpp no_eh_support ;
-
-run test_arithmetic_cpp_bin_float_1.cpp no_eh_support ;
-run test_arithmetic_cpp_bin_float_2.cpp no_eh_support ;
-run test_arithmetic_cpp_bin_float_3.cpp no_eh_support ;
-
-run test_arithmetic_mpf_50.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-run test_arithmetic_mpf.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-run test_arithmetic_mpz.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-run test_arithmetic_mpz_rat.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-run test_arithmetic_mpz_br.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-run test_arithmetic_mpq.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-
-run test_arithmetic_mpfr.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
-run test_arithmetic_mpfr_50.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
-run test_arithmetic_mpfr_50_static.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
-
-run test_arithmetic_tommath.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ;
-run test_arithmetic_tommath_rat.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ;
-run test_arithmetic_tommath_br.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ;
-
-run test_arithmetic_cpp_int_1.cpp no_eh_support ;
-run test_arithmetic_cpp_int_2.cpp no_eh_support ;
-run test_arithmetic_cpp_int_3.cpp no_eh_support ;
-run test_arithmetic_cpp_int_4.cpp no_eh_support ;
-run test_arithmetic_cpp_int_5.cpp no_eh_support ;
-run test_arithmetic_cpp_int_6.cpp no_eh_support ;
-run test_arithmetic_cpp_int_7.cpp no_eh_support ;
-run test_arithmetic_cpp_int_8.cpp no_eh_support ;
-run test_arithmetic_cpp_int_9.cpp no_eh_support ;
-run test_arithmetic_cpp_int_10.cpp no_eh_support ;
-run test_arithmetic_cpp_int_11.cpp no_eh_support ;
-run test_arithmetic_cpp_int_12.cpp no_eh_support ;
-run test_arithmetic_cpp_int_13.cpp no_eh_support ;
-run test_arithmetic_cpp_int_14.cpp no_eh_support ;
-run test_arithmetic_cpp_int_15.cpp no_eh_support ;
-run test_arithmetic_cpp_int_16.cpp no_eh_support ;
-run test_arithmetic_cpp_int_17.cpp no_eh_support ;
-run test_arithmetic_cpp_int_18.cpp no_eh_support ;
-run test_arithmetic_cpp_int_br.cpp no_eh_support ;
-
-run test_arithmetic_ab_1.cpp no_eh_support ;
-run test_arithmetic_ab_2.cpp no_eh_support ;
-run test_arithmetic_ab_3.cpp no_eh_support ;
-
-run test_cpp_dec_float_round.cpp no_eh_support ;
-
-run test_arithmetic_logged_1.cpp no_eh_support ;
-run test_arithmetic_logged_2.cpp no_eh_support ;
-
-run test_arithmetic_dbg_adptr1.cpp no_eh_support ;
-run test_arithmetic_dbg_adptr2.cpp no_eh_support ;
-
-run test_arithmetic_mpfi_50.cpp mpfi mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ;
-
-run test_arithmetic_float_128.cpp quadmath no_eh_support : : : [ check-target-builds ../config//has_float128 : : <build>no ] ;
-run test_arithmetic_float_128.cpp no_eh_support : : : [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ] : test_arithmetic_intel_quad ;
-
-run test_numeric_limits.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_BACKEND
-        : test_numeric_limits_backend_concept ;
-
-run test_numeric_limits.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPF_50
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_numeric_limits_mpf50 ;
-
-run test_numeric_limits.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPF
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_numeric_limits_mpf ;
-
-run test_numeric_limits.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPZ
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_numeric_limits_mpz ;
-
-run test_numeric_limits.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPQ
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_numeric_limits_mpq ;
-
-run test_numeric_limits.cpp mpfr gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFR
-         [ check-target-builds ../config//has_mpfr : : <build>no ]
-        : test_numeric_limits_mpfr ;
-
-run test_numeric_limits.cpp mpfr gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFR_50
-         [ check-target-builds ../config//has_mpfr : : <build>no ]
-        : test_numeric_limits_mpfr_50 ;
-
-run test_numeric_limits.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_DEC_FLOAT
-        : test_numeric_limits_cpp_dec_float ;
-
-run test_numeric_limits.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_BIN_FLOAT
-        : test_numeric_limits_cpp_bin_float ;
-
-run test_numeric_limits.cpp $(TOMMATH) no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_TOMMATH
-         [ check-target-builds ../config//has_tommath : : <build>no ]
-        : test_numeric_limits_tommath ;
-
-run test_numeric_limits.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_INT
-        : test_numeric_limits_cpp_int ;
-
-run test_numeric_limits.cpp mpfi mpfr gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFI_50
-         [ check-target-builds ../config//has_mpfi : : <build>no ]
-        : test_numeric_limits_mpfi_50 ;
-
-
-run test_numeric_limits.cpp quadmath no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_FLOAT128
-         [ check-target-builds ../config//has_float128 : : <build>no ]
-        : test_numeric_limits_float128 ;
-run test_numeric_limits.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_FLOAT128
-         [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
-        : test_numeric_limits_intel_quad ;
-
-for local source in test_exp.cpp test_log.cpp test_pow.cpp test_sinh.cpp test_sqrt.cpp test_cosh.cpp test_tanh.cpp test_sin.cpp test_cos.cpp test_tan.cpp test_asin.cpp test_acos.cpp test_atan.cpp test_round.cpp test_fpclassify.cpp test_sf_import_c99.cpp
+test-suite arithmetic_tests :
+
+   [ run test_arithmetic_backend_concept.cpp no_eh_support ]
+
+   [ run test_arithmetic_cpp_dec_float_1.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_dec_float_2.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_dec_float_3.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_dec_float_3m.cpp no_eh_support ]
+
+   [ run test_arithmetic_cpp_bin_float_1.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_bin_float_2.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_bin_float_2m.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_bin_float_3.cpp no_eh_support ]
+
+   [ run test_arithmetic_mpf_50.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+   [ run test_arithmetic_mpf.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+   [ run test_arithmetic_mpz.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+   [ run test_arithmetic_mpz_rat.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+   [ run test_arithmetic_mpz_br.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+   [ run test_arithmetic_mpq.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+
+   [ run test_arithmetic_mpfr.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+   [ run test_arithmetic_mpfr_50.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+   [ run test_arithmetic_mpfr_50_static.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+
+   [ run test_arithmetic_tommath.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ]
+   [ run test_arithmetic_tommath_rat.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ]
+   [ run test_arithmetic_tommath_br.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ]
+
+   [ run test_arithmetic_cpp_int_1.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj ]
+   [ run test_arithmetic_cpp_int_2.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_3.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_4.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_5.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_6.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_7.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_8.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_9.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_10.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_11.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_12.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_13.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_14.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_15.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_16.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_17.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_18.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_19.cpp no_eh_support ]
+   [ run test_arithmetic_cpp_int_br.cpp no_eh_support ]
+
+   [ run test_arithmetic_ab_1.cpp no_eh_support ]
+   [ run test_arithmetic_ab_2.cpp no_eh_support ]
+   [ run test_arithmetic_ab_3.cpp no_eh_support ]
+
+   [ run test_cpp_dec_float_round.cpp no_eh_support ]
+
+   [ run test_arithmetic_logged_1.cpp no_eh_support ]
+   [ run test_arithmetic_logged_2.cpp no_eh_support ]
+
+   [ run test_arithmetic_dbg_adptr1.cpp no_eh_support ]
+   [ run test_arithmetic_dbg_adptr1m.cpp no_eh_support ]
+   [ run test_arithmetic_dbg_adptr2.cpp no_eh_support ]
+
+   [ run test_arithmetic_mpfi_50.cpp mpfi mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ]
+
+   [ run test_arithmetic_float_128.cpp quadmath no_eh_support : : : [ check-target-builds ../config//has_float128 : : <build>no ] ]
+   [ run test_arithmetic_float_128.cpp no_eh_support : : : [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ] : test_arithmetic_intel_quad ]
+
+   [ run test_arithmetic_mpc.cpp mpc mpfr gmp : : : [ check-target-builds ../config//has_mpc : : <build>no ] ]
+   [ run test_mpfr_mpc_precisions.cpp mpc mpfr gmp : : : [ check-target-builds ../config//has_mpc : : <build>no ] ]
+   [ run test_mpfi_precisions.cpp mpfi mpfr gmp : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ]
+   [ run test_mpf_precisions.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+   [ run test_complex.cpp : : : [ check-target-builds ../config//has_mpc : <define>TEST_MPC <source>mpc <source>mpfr <source>gmp ] [ check-target-builds ../config//has_float128 : <source>quadmath ] ]
+   [ run test_arithmetic_complex_adaptor.cpp ]
+   [ run test_arithmetic_complex_adaptor_2.cpp ]
+   [ run test_arithmetic_complex128.cpp : : : [ check-target-builds ../config//has_float128 : <source>quadmath ] ]
+
+;
+
+rule get_function_tests
 {
-      run $(source) gmp no_eh_support
+   local result ;
+   for local source in test_exp.cpp test_log.cpp test_pow.cpp test_sinh.cpp test_sqrt.cpp test_cosh.cpp test_tanh.cpp test_sin.cpp test_cos.cpp test_tan.cpp test_asin.cpp test_acos.cpp test_atan.cpp test_round.cpp test_fpclassify.cpp test_sf_import_c99.cpp
+   {
+         result += [ run $(source) gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+               <define>TEST_MPF_50
+              : $(source:B)_mpf50 ] ;
+         result += [ run $(source) mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_mpfr : : <build>no ]
+               <define>TEST_MPFR_50
+              : $(source:B)_mpfr50 ] ;
+         result += [ run $(source) mpfi mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_mpfi : : <build>no ]
+               <define>TEST_MPFI_50
+              : $(source:B)_mpfi50 ] ;
+         result += [ run $(source) no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               <define>TEST_CPP_DEC_FLOAT
+              : $(source:B)_cpp_dec_float ] ;
+         result += [ run $(source) no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               <define>TEST_CPP_BIN_FLOAT
+              : $(source:B)_cpp_bin_float ] ;
+         result += [ run $(source) quadmath no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_float128 : : <build>no ]
+               <define>TEST_FLOAT128
+              : $(source:B)_float128 ] ;
+         result += [ run $(source) no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
+               <define>TEST_FLOAT128
+              : $(source:B)_intel_quad ] ;
+   }
+   return $(result) ;
+}
+
+test-suite functions_and_limits :
+
+      [ run test_numeric_limits.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_BACKEND
+              : test_numeric_limits_backend_concept ]
+
+      [ run test_numeric_limits.cpp gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPF_50
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+              : test_numeric_limits_mpf50 ]
+
+      [ run test_numeric_limits.cpp gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPF
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+              : test_numeric_limits_mpf ]
+
+      [ run test_numeric_limits.cpp gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPZ
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+              : test_numeric_limits_mpz ]
+
+      [ run test_numeric_limits.cpp gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPQ
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+              : test_numeric_limits_mpq ]
+
+      [ run test_numeric_limits.cpp mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPFR
+               [ check-target-builds ../config//has_mpfr : : <build>no ]
+              : test_numeric_limits_mpfr ]
+
+      [ run test_numeric_limits.cpp mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPFR_50
+               [ check-target-builds ../config//has_mpfr : : <build>no ]
+              : test_numeric_limits_mpfr_50 ]
+
+      [ run test_numeric_limits.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_DEC_FLOAT
+              : test_numeric_limits_cpp_dec_float ]
+
+      [ run test_numeric_limits.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_BIN_FLOAT
+              : test_numeric_limits_cpp_bin_float ]
+
+      [ run test_numeric_limits.cpp $(TOMMATH) no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_TOMMATH
+               [ check-target-builds ../config//has_tommath : : <build>no ]
+              : test_numeric_limits_tommath ]
+
+      [ run test_numeric_limits.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_INT
+              : test_numeric_limits_cpp_int ]
+
+      [ run test_numeric_limits.cpp mpfi mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPFI_50
+               [ check-target-builds ../config//has_mpfi : : <build>no ]
+              : test_numeric_limits_mpfi_50 ]
+
+
+      [ run test_numeric_limits.cpp quadmath no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_FLOAT128
+               [ check-target-builds ../config//has_float128 : : <build>no ]
+              : test_numeric_limits_float128 ]
+      [ run test_numeric_limits.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_FLOAT128
+               [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
+              : test_numeric_limits_intel_quad ]
+
+      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_2 : test_sf_import_c99_cpp_dec_float_2 ]
+      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_3 : test_sf_import_c99_cpp_dec_float_3 ]
+      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_4 : test_sf_import_c99_cpp_dec_float_4 ]
+      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_5 : test_sf_import_c99_cpp_dec_float_5 ]
+      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_6 : test_sf_import_c99_cpp_dec_float_6 ]
+
+      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_BIN_FLOAT_2 : test_sf_import_c99_cpp_bin_float_2 ]
+      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_BIN_FLOAT_2 : test_sf_import_c99_cpp_bin_float_3 ]
+
+      [ run test_move.cpp mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPFR
+               [ check-target-builds ../config//has_mpfr : : <build>no ]
+              : test_move_mpfr ]
+
+      [ run test_move.cpp mpc mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPC
+               [ check-target-builds ../config//has_mpc : : <build>no ]
+              : test_move_mpc ]
+
+      [ run test_move.cpp gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_GMP
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+              : test_move_gmp ]
+
+      [ run test_move.cpp $(TOMMATH) no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_TOMMATH
+               [ check-target-builds ../config//has_tommath : : <build>no ]
+              : test_move_tommath ]
+
+      [ run test_move.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_INT
+              : test_move_cpp_int ]
+
+      [ get_function_tests ]
+;
+
+test-suite conversions :
+
+   [ run test_gmp_conversions.cpp gmp no_eh_support
+           : # command line
+           : # input files
+           : # requirements
+            [ check-target-builds ../config//has_gmp : : <build>no ] ]
+
+   [ run test_mpfr_conversions.cpp gmp mpfr no_eh_support
            : # command line
            : # input files
            : # requirements
+            [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+
+   [ run test_mpc_conversions.cpp gmp mpfr mpc no_eh_support
+           : # command line
+           : # input files
+           : # requirements
+            [ check-target-builds ../config//has_mpc : : <build>no ] ]
+
+   [ run test_constants.cpp gmp no_eh_support
+           : # command line
+           : # input files
+           : # requirements
+           <define>TEST_MPF_50
             [ check-target-builds ../config//has_gmp : : <build>no ]
-            <define>TEST_MPF_50
-           : $(source:B)_mpf50 ;
-      run $(source) mpfr gmp no_eh_support
+           : test_constants_mpf50 ]
+
+   [ run test_constants.cpp mpfr gmp no_eh_support
            : # command line
            : # input files
            : # requirements
+           <define>TEST_MPFR_50
             [ check-target-builds ../config//has_mpfr : : <build>no ]
-            <define>TEST_MPFR_50
-           : $(source:B)_mpfr50 ;
-      run $(source) mpfi mpfr gmp no_eh_support
+           : test_constants_mpfr_50 ]
+
+   [ run test_constants.cpp no_eh_support
            : # command line
            : # input files
            : # requirements
-            [ check-target-builds ../config//has_mpfi : : <build>no ]
-            <define>TEST_MPFI_50
-           : $(source:B)_mpfi50 ;
-      run $(source) no_eh_support
+           <define>TEST_CPP_DEC_FLOAT
+           : test_constants_cpp_dec_float ]
+
+
+   [ run test_test.cpp ]
+   [ run test_cpp_int_lit.cpp no_eh_support ]
+
+      #
+      # Interconversion tests:
+      #
+      [ run test_convert_from_cpp_int.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_mpz_int.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_tom_int.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_cpp_rational.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_gmp_rational.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_tom_rational.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_cpp_bin_float.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_cpp_dec_float.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_mpf_float.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_mpfr_float.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_mpfi_float.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+      [ run test_convert_from_float128.cpp
+              : # command line
+              : # input files
+              : # requirements
+              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
+              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
+              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
+               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
+              ]
+
+      [ run test_cpp_bin_float_conv.cpp ]
+
+      [ run test_cpp_bin_float_io.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_BIN_FLOAT
+               <define>TEST1
+               release # Otherwise [ runtime is slow
+              : test_cpp_bin_float_io_1
+              ]
+
+      [ run test_cpp_bin_float_io.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_BIN_FLOAT
+               <define>TEST2
+               release # Otherwise [ runtime is slow
+              : test_cpp_bin_float_io_2
+              ]
+
+      [ run test_cpp_bin_float.cpp no_eh_support mpfr gmp /boost/system//boost_system /boost/chrono//boost_chrono
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPFR
+               [ check-target-builds ../config//has_mpfr : : <build>no ]
+               release # Otherwise [ runtime is slow
+              ]
+
+      [ run test_float_io.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_DEC_FLOAT
+               release # Otherwise [ runtime is slow
+              : test_float_io_cpp_dec_float ]
+
+      [ run test_float_io.cpp gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPF_50
+               release # Otherwise [ runtime is slow
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+              : test_float_io_mpf ]
+
+      [ run test_float_io.cpp mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPFR_50
+               release # Otherwise [ runtime is slow
+               [ check-target-builds ../config//has_mpfr : : <build>no ]
+              : test_float_io_mpfr ]
+
+      [ run test_float_io.cpp mpfi mpfr gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPFI_50
+               release # Otherwise [ runtime is slow
+               [ check-target-builds ../config//has_mpfi : : <build>no ]
+              : test_float_io_mpfi ]
+
+      [ run test_float_io.cpp quadmath no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_FLOAT128
+               release # Otherwise [ runtime is slow
+               [ check-target-builds ../config//has_float128 : : <build>no ]
+              : test_float_io_float128 ]
+      [ run test_float_io.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_FLOAT128
+               release # Otherwise [ runtime is slow
+               [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
+              : test_float_io_intel_quad ]
+
+      [ run test_int_io.cpp no_eh_support $(TOMMATH)
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_TOMMATH
+               release # Otherwise [ runtime is slow
+               [ check-target-builds ../config//has_tommath : : <build>no ]
+              : test_int_io_tommath ]
+
+      [ run test_int_io.cpp no_eh_support gmp
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPZ
+               release # Otherwise [ runtime is slow
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+              : test_int_io_mpz ]
+
+;
+
+
+test-suite cpp_int_tests :
+
+      [ run test_int_io.cpp no_eh_support
            : # command line
            : # input files
            : # requirements
-            <define>TEST_CPP_DEC_FLOAT
-           : $(source:B)_cpp_dec_float ;
-      run $(source) no_eh_support
+           <define>TEST_CPP_INT
+            release # Otherwise    [ runtime is slow
+           : test_int_io_cpp_int ]
+
+      [ run test_cpp_int_left_shift.cpp gmp no_eh_support
            : # command line
            : # input files
            : # requirements
-            <define>TEST_CPP_BIN_FLOAT
-           : $(source:B)_cpp_bin_float ;
-      run $(source) quadmath no_eh_support
+            [ check-target-builds ../config//has_gmp : : <build>no ]
+            release  # otherwise    [ runtime is too slow!!
+            ]
+
+      [ run test_cpp_int.cpp gmp no_eh_support
            : # command line
            : # input files
            : # requirements
-            [ check-target-builds ../config//has_float128 : : <build>no ]
-            <define>TEST_FLOAT128
-           : $(source:B)_float128 ;
-      run $(source) no_eh_support
+            [ check-target-builds ../config//has_gmp : : <build>no ]
+            release  # otherwise    [ runtime is too slow!!
+            <define>TEST1
+            : test_cpp_int_1
+            ]
+
+      [ run test_cpp_int.cpp gmp no_eh_support
            : # command line
            : # input files
            : # requirements
-            [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
-            <define>TEST_FLOAT128
-           : $(source:B)_intel_quad ;
-}
+            [ check-target-builds ../config//has_gmp : : <build>no ]
+            release  # otherwise    [ runtime is too slow!!
+            <define>TEST2
+            : test_cpp_int_2
+            ]
 
-run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_2 : test_sf_import_c99_cpp_dec_float_2 ;
-run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_3 : test_sf_import_c99_cpp_dec_float_3 ;
-run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_4 : test_sf_import_c99_cpp_dec_float_4 ;
-run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_5 : test_sf_import_c99_cpp_dec_float_5 ;
-
-run test_sf_import_c99.cpp : : : <define>TEST_CPP_BIN_FLOAT_2 : test_sf_import_c99_cpp_bin_float_2 ;
-run test_sf_import_c99.cpp : : : <define>TEST_CPP_BIN_FLOAT_2 : test_sf_import_c99_cpp_bin_float_3 ;
-
-run test_gmp_conversions.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ] ;
-
-run test_mpfr_conversions.cpp gmp mpfr no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_mpfr : : <build>no ] ;
-
-run test_constants.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPF_50
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_constants_mpf50 ;
-
-run test_constants.cpp mpfr gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFR_50
-         [ check-target-builds ../config//has_mpfr : : <build>no ]
-        : test_constants_mpfr_50 ;
-
-run test_constants.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_DEC_FLOAT
-        : test_constants_cpp_dec_float ;
-
-
-run test_move.cpp mpfr gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFR
-         [ check-target-builds ../config//has_mpfr : : <build>no ]
-        : test_move_mpfr ;
-
-run test_move.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_GMP
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_move_gmp ;
-
-run test_move.cpp $(TOMMATH) no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_TOMMATH
-         [ check-target-builds ../config//has_tommath : : <build>no ]
-        : test_move_tommath ;
-
-run test_move.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_INT
-        : test_move_cpp_int ;
-
-run test_test.cpp ;
-run test_cpp_int_lit.cpp no_eh_support ;
-compile test_constexpr.cpp : 
-   [ check-target-builds ../config//has_float128 : <define>HAVE_FLOAT128 : ] 
-   [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type <define>HAVE_FLOAT128 : ] 
-   [ requires cxx11_constexpr cxx11_user_defined_literals ] ;
-
-compile test_nothrow_cpp_int.cpp ;
-compile test_nothrow_cpp_rational.cpp ;
-compile test_nothrow_cpp_bin_float.cpp ;
-compile test_nothrow_cpp_dec_float.cpp ;
-compile test_nothrow_float128.cpp : [ check-target-builds ../config//has_float128 : : <build>no ] ;
-compile test_nothrow_gmp.cpp : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-compile test_nothrow_mpfr.cpp : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
+      [ run test_cpp_int.cpp gmp no_eh_support
+           : # command line
+           : # input files
+           : # requirements
+            [ check-target-builds ../config//has_gmp : : <build>no ]
+            release  # otherwise    [ runtime is too slow!!
+            <define>TEST3
+            : test_cpp_int_3
+            ]
 
-#
-# Interconversion tests:
-#
-run test_convert_from_cpp_int.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_mpz_int.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_tom_int.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_cpp_rational.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_gmp_rational.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_tom_rational.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_cpp_bin_float.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_cpp_dec_float.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_mpf_float.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_mpfr_float.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_mpfi_float.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
-run test_convert_from_float128.cpp
-        : # command line
-        : # input files
-        : # requirements
-             [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
-             [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
-             [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-             [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
-         [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ] 
-        ;
+      [ run test_cpp_int.cpp gmp no_eh_support
+           : # command line
+           : # input files
+           : # requirements
+            [ check-target-builds ../config//has_gmp : : <build>no ]
+            release  # otherwise    [ runtime is too slow!!
+            <define>TEST4
+            : test_cpp_int_4
+            ]
+
+      [ run test_cpp_int.cpp gmp no_eh_support
+           : # command line
+           : # input files
+           : # requirements
+            [ check-target-builds ../config//has_gmp : : <build>no ]
+            release  # otherwise    [ runtime is too slow!!
+            <define>TEST5
+            : test_cpp_int_5
+            ]
+
+      [ run test_checked_cpp_int.cpp no_eh_support ]
+      [ run test_unchecked_cpp_int.cpp no_eh_support : : : release ]
+
+      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_1 ]
+      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_2 ]
+      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST3 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_3 ]
+      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST4 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_4 ]
+      [ run test_cpp_int_deserial.cpp ../../serialization/build//boost_serialization ../../filesystem/build//boost_filesystem : $(here)/serial_txts : : release <toolset>gcc-mingw:<link>static  ]
+      [ run test_cpp_rat_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  ]
+
+;
+
+test-suite misc :
+
+      [ compile test_constexpr.cpp : 
+         [ check-target-builds ../config//has_float128 : <define>HAVE_FLOAT128 : ] 
+         [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type <define>HAVE_FLOAT128 : ] 
+         [ requires cxx11_constexpr cxx11_user_defined_literals ] ]
+
+      [ compile constexpr_test_arithmetic_backend.cpp : 
+         [ requires cxx14_constexpr cxx17_if_constexpr ] ]
+      [ compile constexpr_test_float128.cpp : 
+         [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_float128 : <source>quadmath : <build>no ] ]
+
+      [ run constexpr_test_cpp_int.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
+      [ run constexpr_test_cpp_int_2.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
+      [ run constexpr_test_cpp_int_3.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
+      [ run constexpr_test_cpp_int_4.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
+      [ run constexpr_test_cpp_int_5.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
+      [ run constexpr_test_cpp_int_6.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : <toolset>clang:<cxxflags>-fconstexpr-steps=268435456 : <build>no ] [ check-target-builds ../config//has_constexpr_limits : <cxxflags>-fconstexpr-ops-limit=268435456 ] ]
+      [ run constexpr_test_cpp_int_7.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : <toolset>clang:<cxxflags>-fconstexpr-steps=268435456 : <build>no ] ]
+
+      [ compile test_nothrow_cpp_int.cpp ]
+      [ compile test_nothrow_cpp_rational.cpp ]
+      [ compile test_nothrow_cpp_bin_float.cpp ]
+      [ compile test_nothrow_cpp_dec_float.cpp ]
+      [ compile test_nothrow_float128.cpp : [ check-target-builds ../config//has_float128 : : <build>no ] ]
+      [ compile test_nothrow_gmp.cpp : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+      [ compile test_nothrow_mpfr.cpp : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+
+      [ run test_miller_rabin.cpp no_eh_support gmp
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+               release  # otherwise [ runtime is too slow!!
+               ]
+
+      [ run test_rational_io.cpp $(TOMMATH) no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_TOMMATH
+               [ check-target-builds ../config//has_tommath : : <build>no ]
+               release # Otherwise [ runtime is slow
+              : test_rational_io_tommath ]
+
+      [ run test_rational_io.cpp gmp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_MPQ
+               [ check-target-builds ../config//has_gmp : : <build>no ]
+               release # Otherwise [ runtime is slow
+              : test_rational_io_mpz ]
+
+      [ run test_rational_io.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST_CPP_INT
+               release # Otherwise [ runtime is slow
+              : test_rational_io_cpp_int ]
+
+      [ run test_generic_conv.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp :  ]
+               [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>$(TOMMATH) :  ]
+               [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>mpfr :  ]
+               release # Otherwise [ runtime is slow
+               ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST1
+              release 
+              : test_rat_float_interconv_1 ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST2
+              release 
+              : test_rat_float_interconv_2 ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST3
+              release 
+              : test_rat_float_interconv_3 ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST4
+              release 
+              : test_rat_float_interconv_4 ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST5
+              [ check-target-builds ../config//has_mpfr : : <build>no ]
+              release 
+              : test_rat_float_interconv_5 ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST6
+              [ check-target-builds ../config//has_mpfr : : <build>no ]
+              release 
+              : test_rat_float_interconv_6 ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST7
+              [ check-target-builds ../config//has_mpfr : : <build>no ]
+              release 
+              : test_rat_float_interconv_7 ]
+
+      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+              : # command line
+              : # input files
+              : # requirements
+              <define>TEST8
+              [ check-target-builds ../config//has_mpfr : : <build>no ]
+              release 
+              : test_rat_float_interconv_8 ]
+
+      [ run test_cpp_int_conv.cpp no_eh_support ]
+      [ run test_cpp_int_import_export.cpp no_eh_support ]
+      [ run test_native_integer.cpp no_eh_support ]
+
+      [ run test_mixed_cpp_int.cpp no_eh_support ]
+      [ run test_mixed_float.cpp no_eh_support
+              : # command line
+              : # input files
+              : # requirements
+               [ check-target-builds ../config//has_gmp : <define>TEST_GMP <library>gmp : ]
+               [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <library>mpfr <library>gmp : ] ]
+      [ compile include_test/mpfr_include_test.cpp
+                    : # requirements
+                     [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+      [ compile include_test/gmp_include_test.cpp
+                    : # requirements
+                     [ check-target-builds ../config//has_gmp : : <build>no ] ]
+      [ compile include_test/tommath_include_test.cpp
+                    : # requirements
+                     [ check-target-builds ../config//has_tommath : : <build>no ] ]
+      [ compile include_test/cpp_int_include_test.cpp ]
+      [ compile include_test/cpp_dec_float_include_test.cpp ]
+      [ compile include_test/cpp_bin_float_include_test.cpp ]
+
+      [ run ublas_interop/test1.cpp ublas_interop/test11.cpp ublas_interop/test12.cpp ublas_interop/test13.cpp no_eh_support ]
+      [ run ublas_interop/test2.cpp ublas_interop/test21.cpp ublas_interop/test22.cpp ublas_interop/test23.cpp no_eh_support ]
+      #[ run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp ]
+      [ run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp no_eh_support ]
+      [ run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp no_eh_support ]
+      [ run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp no_eh_support ]
+      #[ run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp ]
+
+      [ run ublas_interop/test1.cpp ublas_interop/test11.cpp ublas_interop/test12.cpp ublas_interop/test13.cpp no_eh_support : : : <define>TEST_ET=1 : ublas1_et ]
+      [ run ublas_interop/test2.cpp ublas_interop/test21.cpp ublas_interop/test22.cpp ublas_interop/test23.cpp no_eh_support : : : <define>TEST_ET=1 : ublas2_et ]
+      #[ run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp : : : <define>TEST_ET=1 : ublas3_et ]
+      [ run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp no_eh_support : : : <define>TEST_ET=1 : ublas3_et ]
+      [ run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp no_eh_support : : : <define>TEST_ET=1 : ublas4_et ]
+      [ run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp no_eh_support : : : <define>TEST_ET=1 : ublas5_et ]
+      #[ run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp : : : <define>TEST_ET=1 : ublas6_et ]
+
+      #
+      # Serialization tests, run in release mode so we cycle through more values:
+      #
+      [ run test_adapt_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  ]
+      [ run test_cpp_dec_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 <toolset>gcc-mingw:<link>static  : test_cpp_dec_float_serial_1 ]
+      [ run test_cpp_dec_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 <toolset>gcc-mingw:<link>static  : test_cpp_dec_float_serial_2 ]
+      [ run test_float128_serial.cpp ../../serialization/build//boost_serialization quadmath : : : release <toolset>gcc-mingw:<link>static  [ check-target-builds ../config//has_float128 : : <build>no ]  ]
+      [ run test_cpp_bin_float_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  <define>TEST1 : test_bin_dec_float_serial_1 ]
+      [ run test_cpp_bin_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 <toolset>gcc-mingw:<link>static  : test_bin_dec_float_serial_2 ]
+
+      #
+      # Mixed mode comparison tests, see: https://svn.boost.org/trac/boost/ticket/11328
+      #
+      [ run test_checked_mixed_cpp_int.cpp no_eh_support ]
+      [ run test_mixed_cpp_bin_float.cpp no_eh_support ]
+      [ run test_mixed_cpp_dec_float.cpp no_eh_support ]
+      [ run test_mixed_mpf_float.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
+      [ run test_mixed_mpfr_float.cpp  mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+      #
+      # Check for narrowing conversions:
+      #
+      [ run test_float_conversions.cpp no_eh_support ]
+      #
+      # specific bug cases:
+      #
+      [ compile bug11922.cpp ]
+      [ run bug12039.cpp no_eh_support ]
+      [ compile git_issue_30.cpp ]
+      [ compile git_issue_98.cpp : 
+         [ check-target-builds ../config//has_float128 : <define>TEST_FLOAT128 <source>quadmath : ]
+         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp : ]
+         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr : ]
+         [ check-target-builds ../config//has_mpc : <define>TEST_MPC <source>gmp <source>mpfr <source>mpc : ] ]
+      [ run issue_13301.cpp ]
+      [ run issue_13148.cpp ]
+      [ run test_hash.cpp : : : 
+         [ check-target-builds ../config//has_float128 : <define>TEST_FLOAT128 <source>quadmath : ]
+         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp : ]
+         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr : ]
+         [ check-target-builds ../config//has_mpfi : <define>TEST_MPFI <source>gmp <source>mpfr <source>mpfi : ]
+         [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>tommath : ]
+          ]
+      [ run test_optional_compat.cpp ]
+      #
+      # Eigen interoperability:
+      #
+      [ run test_eigen_interop_cpp_int.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
+      [ run test_eigen_interop_cpp_dec_float.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
+      [ run test_eigen_interop_cpp_dec_float_2.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
+      [ run test_eigen_interop_cpp_dec_float_3.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
+      [ run test_eigen_interop_cpp_bin_float_1.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
+      [ run test_eigen_interop_cpp_bin_float_2.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
+      [ run test_eigen_interop_cpp_bin_float_3.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
+      [ run test_eigen_interop_mpfr_1.cpp mpfr gmp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+      [ run test_eigen_interop_mpfr_2.cpp mpfr gmp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+      [ run test_eigen_interop_mpfr_3.cpp mpfr gmp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] [ check-target-builds ../config//has_mpfr : : <build>no ] ]
+      [ run test_eigen_interop_gmp.cpp gmp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] [ check-target-builds ../config//has_gmp : : <build>no ] ]
+      [ run test_eigen_interop_mpc.cpp mpc mpfr gmp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] [ check-target-builds ../config//has_mpc : : <build>no ] ]
+;
 
 
 #
@@ -506,383 +1000,12 @@ run test_convert_from_float128.cpp
 run test_cpp_bin_float_round.cpp mpfr gmp ;
 explicit test_cpp_bin_float_round ;
 
-run test_cpp_bin_float_conv.cpp ;
-
-run test_cpp_bin_float_io.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_BIN_FLOAT
-         <define>TEST1
-         release # Otherwise runtime is slow
-        : test_cpp_bin_float_io_1
-        ;
-
-run test_cpp_bin_float_io.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_BIN_FLOAT
-         <define>TEST2
-         release # Otherwise runtime is slow
-        : test_cpp_bin_float_io_2
-        ;
-
-run test_cpp_bin_float.cpp no_eh_support mpfr gmp /boost/system//boost_system /boost/chrono//boost_chrono
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFR
-         [ check-target-builds ../config//has_mpfr : : <build>no ]
-         release # Otherwise runtime is slow
-        ;
-
-run test_float_io.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_DEC_FLOAT
-         release # Otherwise runtime is slow
-        : test_float_io_cpp_dec_float ;
-
-run test_float_io.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPF_50
-         release # Otherwise runtime is slow
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_float_io_mpf ;
-
-run test_float_io.cpp mpfr gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFR_50
-         release # Otherwise runtime is slow
-         [ check-target-builds ../config//has_mpfr : : <build>no ]
-        : test_float_io_mpfr ;
-
-run test_float_io.cpp mpfi mpfr gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPFI_50
-         release # Otherwise runtime is slow
-         [ check-target-builds ../config//has_mpfi : : <build>no ]
-        : test_float_io_mpfi ;
-
-run test_float_io.cpp quadmath no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_FLOAT128
-         release # Otherwise runtime is slow
-         [ check-target-builds ../config//has_float128 : : <build>no ]
-        : test_float_io_float128 ;
-run test_float_io.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_FLOAT128
-         release # Otherwise runtime is slow
-         [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
-        : test_float_io_intel_quad ;
-
-run test_int_io.cpp no_eh_support $(TOMMATH)
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_TOMMATH
-         release # Otherwise runtime is slow
-         [ check-target-builds ../config//has_tommath : : <build>no ]
-        : test_int_io_tommath ;
-
-run test_int_io.cpp no_eh_support gmp
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPZ
-         release # Otherwise runtime is slow
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-        : test_int_io_mpz ;
-
-run test_int_io.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_INT
-         release # Otherwise runtime is slow
-        : test_int_io_cpp_int ;
-
-run test_cpp_int_left_shift.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release  # otherwise runtime is too slow!!
-         ;
-
-run test_cpp_int.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release  # otherwise runtime is too slow!!
-         <define>TEST1
-         : test_cpp_int_1
-         ;
-
-run test_cpp_int.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release  # otherwise runtime is too slow!!
-         <define>TEST2
-         : test_cpp_int_2
-         ;
-
-run test_cpp_int.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release  # otherwise runtime is too slow!!
-         <define>TEST3
-         : test_cpp_int_3
-         ;
-
-run test_cpp_int.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release  # otherwise runtime is too slow!!
-         <define>TEST4
-         : test_cpp_int_4
-         ;
-
-run test_cpp_int.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release  # otherwise runtime is too slow!!
-         <define>TEST5
-         : test_cpp_int_5
-         ;
-
-run test_checked_cpp_int.cpp no_eh_support ;
-run test_unchecked_cpp_int.cpp no_eh_support : : : release ;
-
-run test_miller_rabin.cpp no_eh_support gmp
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release  # otherwise runtime is too slow!!
-         ;
-
-run test_rational_io.cpp $(TOMMATH) no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_TOMMATH
-         [ check-target-builds ../config//has_tommath : : <build>no ]
-         release # Otherwise runtime is slow
-        : test_rational_io_tommath ;
-
-run test_rational_io.cpp gmp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_MPQ
-         [ check-target-builds ../config//has_gmp : : <build>no ]
-         release # Otherwise runtime is slow
-        : test_rational_io_mpz ;
-
-run test_rational_io.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-             <define>TEST_CPP_INT
-         release # Otherwise runtime is slow
-        : test_rational_io_cpp_int ;
-
-run test_generic_conv.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp :  ]
-         [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>$(TOMMATH) :  ]
-         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>mpfr :  ]
-         release # Otherwise runtime is slow
-         ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST1
-        release 
-        : test_rat_float_interconv_1 ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST2
-        release 
-        : test_rat_float_interconv_2 ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST3
-        release 
-        : test_rat_float_interconv_3 ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST4
-        release 
-        : test_rat_float_interconv_4 ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST5
-        [ check-target-builds ../config//has_mpfr : : <build>no ]
-        release 
-        : test_rat_float_interconv_5 ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST6
-        [ check-target-builds ../config//has_mpfr : : <build>no ]
-        release 
-        : test_rat_float_interconv_6 ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST7
-        [ check-target-builds ../config//has_mpfr : : <build>no ]
-        release 
-        : test_rat_float_interconv_7 ;
-
-run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
-        : # command line
-        : # input files
-        : # requirements
-        <define>TEST8
-        [ check-target-builds ../config//has_mpfr : : <build>no ]
-        release 
-        : test_rat_float_interconv_8 ;
-
-build-project ../example ;
-
-
-run test_cpp_int_conv.cpp no_eh_support ;
-run test_cpp_int_import_export.cpp no_eh_support ;
-run test_native_integer.cpp no_eh_support ;
-
-run test_mixed_cpp_int.cpp no_eh_support ;
-run test_mixed_float.cpp no_eh_support
-        : # command line
-        : # input files
-        : # requirements
-         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <library>gmp : ]
-         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <library>mpfr <library>gmp : ] ;
-
-compile include_test/mpfr_include_test.cpp
-              : # requirements
-               [ check-target-builds ../config//has_mpfr : : <build>no ] ;
-compile include_test/gmp_include_test.cpp
-              : # requirements
-               [ check-target-builds ../config//has_gmp : : <build>no ] ;
-compile include_test/tommath_include_test.cpp
-              : # requirements
-               [ check-target-builds ../config//has_tommath : : <build>no ] ;
-compile include_test/cpp_int_include_test.cpp ;
-compile include_test/cpp_dec_float_include_test.cpp ;
-compile include_test/cpp_bin_float_include_test.cpp ;
-
-run ublas_interop/test1.cpp ublas_interop/test11.cpp ublas_interop/test12.cpp ublas_interop/test13.cpp no_eh_support ;
-run ublas_interop/test2.cpp ublas_interop/test21.cpp ublas_interop/test22.cpp ublas_interop/test23.cpp no_eh_support ;
-#run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp ;
-run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp no_eh_support ;
-run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp no_eh_support ;
-run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp no_eh_support ;
-#run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp ;
-
-run ublas_interop/test1.cpp ublas_interop/test11.cpp ublas_interop/test12.cpp ublas_interop/test13.cpp no_eh_support : : : <define>TEST_ET=1 : ublas1_et ;
-run ublas_interop/test2.cpp ublas_interop/test21.cpp ublas_interop/test22.cpp ublas_interop/test23.cpp no_eh_support : : : <define>TEST_ET=1 : ublas2_et ;
-#run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp : : : <define>TEST_ET=1 : ublas3_et ;
-run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp no_eh_support : : : <define>TEST_ET=1 : ublas3_et ;
-run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp no_eh_support : : : <define>TEST_ET=1 : ublas4_et ;
-run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp no_eh_support : : : <define>TEST_ET=1 : ublas5_et ;
-#run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp : : : <define>TEST_ET=1 : ublas6_et ;
-
-#
-# Serialization tests, run in release mode so we cycle through more values:
-#
-path-constant here : . ;
-run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_1 ;
-run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_2 ;
-run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST3 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_3 ;
-run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST4 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_4 ;
-run test_cpp_int_deserial.cpp ../../serialization/build//boost_serialization ../../filesystem/build//boost_filesystem : $(here) : : release <toolset>gcc-mingw:<link>static  ;
-run test_cpp_rat_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  ;
-run test_adapt_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  ;
-run test_cpp_dec_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 <toolset>gcc-mingw:<link>static  : test_cpp_dec_float_serial_1 ;
-run test_cpp_dec_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 <toolset>gcc-mingw:<link>static  : test_cpp_dec_float_serial_2 ;
-run test_float128_serial.cpp ../../serialization/build//boost_serialization quadmath : : : release <toolset>gcc-mingw:<link>static  [ check-target-builds ../config//has_float128 : : <build>no ]  ;
-run test_cpp_bin_float_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  <define>TEST1 : test_bin_dec_float_serial_1 ;
-run test_cpp_bin_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 <toolset>gcc-mingw:<link>static  : test_bin_dec_float_serial_2 ;
-
-#
-# Mixed mode comparison tests, see: https://svn.boost.org/trac/boost/ticket/11328
-#
-run test_checked_mixed_cpp_int.cpp no_eh_support ;
-run test_mixed_cpp_bin_float.cpp no_eh_support ;
-run test_mixed_cpp_dec_float.cpp no_eh_support ;
-run test_mixed_mpf_float.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
-run test_mixed_mpfr_float.cpp  mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
-#
-# Check for narrowing conversions:
-#
-run test_float_conversions.cpp no_eh_support ;
-#
-# specific bug cases:
-#
-compile bug11922.cpp ;
-run bug12039.cpp no_eh_support ;
-compile git_issue_30.cpp ;
-run issue_13301.cpp ;
-run issue_13148.cpp ;
-run test_hash.cpp : : : 
-   [ check-target-builds ../config//has_float128 : <define>TEST_FLOAT128 <source>quadmath : ]
-   [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp : ]
-   [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr : ]
-   [ check-target-builds ../config//has_mpfi : <define>TEST_MPFI <source>gmp <source>mpfr <source>mpfi : ]
-   [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>tommath : ]
-    ;
-
-if $(enable-specfun)
+rule get_specfun_tests
 {
-
+   local result ;
    for local source in [ glob math/*.cpp ]
    {
-      run $(source) mpfr gmp 
+      result += [ run $(source) mpfr gmp 
             /boost/test//boost_unit_test_framework/<link>static 
             /boost/regex//boost_regex/<link>static 
             math/instances//test_instances_mpfr/<link>static
@@ -897,8 +1020,8 @@ if $(enable-specfun)
             <toolset>msvc:<cxxflags>-bigobj
             <include>../../math/include_private
             release
-           : $(source:B)_mpfr ;
-      run $(source) gmp 
+           : $(source:B)_mpfr ;
+      result += [ run $(source) gmp 
             /boost/test//boost_unit_test_framework/<link>static 
             /boost/regex//boost_regex/<link>static
             math/instances//test_instances_mpf/<link>static
@@ -913,8 +1036,8 @@ if $(enable-specfun)
             <toolset>msvc:<cxxflags>-bigobj
             <include>../../math/include_private
             release
-           : $(source:B)_mpf ;
-      run $(source) /boost/test//boost_unit_test_framework/<link>static 
+           : $(source:B)_mpf ;
+      result += [ run $(source) /boost/test//boost_unit_test_framework/<link>static 
                /boost/regex//boost_regex/<link>static
                math/instances//test_instances_cpp_dec_float/<link>static
            : # command line
@@ -927,8 +1050,8 @@ if $(enable-specfun)
             <toolset>msvc:<cxxflags>-bigobj
             <include>../../math/include_private
             release
-           : $(source:B)_cpp_dec_float ;
-      run $(source) /boost/test//boost_unit_test_framework/<link>static 
+           : $(source:B)_cpp_dec_float ;
+      result += [ run $(source) /boost/test//boost_unit_test_framework/<link>static 
                /boost/regex//boost_regex/<link>static
                math/instances//test_instances_cpp_bin_float/<link>static
            : # command line
@@ -941,8 +1064,8 @@ if $(enable-specfun)
             <toolset>msvc:<cxxflags>-bigobj
             <include>../../math/include_private
             release
-           : $(source:B)_cpp_bin_float ;
-      run $(source) quadmath 
+           : $(source:B)_cpp_bin_float ;
+      result += [ run $(source) quadmath 
             /boost/test//boost_unit_test_framework/<link>static 
             /boost/regex//boost_regex/<link>static
             math/instances//test_instances_float128/<link>static
@@ -957,8 +1080,8 @@ if $(enable-specfun)
             <toolset>msvc:<cxxflags>-bigobj
             <include>../../math/include_private
             release
-           : $(source:B)_float128 ;
-      run $(source)
+           : $(source:B)_float128 ;
+      result += [ run $(source)
             /boost/test//boost_unit_test_framework/<link>static 
             /boost/regex//boost_regex/<link>static
             math/instances//test_instances_intel_quad/<link>static
@@ -973,7 +1096,7 @@ if $(enable-specfun)
             <toolset>msvc:<cxxflags>-bigobj
             <include>../../math/include_private
             release
-           : $(source:B)_intel_quad ;
+           : $(source:B)_intel_quad ;
    }
    #
    # High precision tests are rather different, as they test only one
@@ -981,7 +1104,7 @@ if $(enable-specfun)
    #
    for local source in [ glob math/high_prec/*.cpp ]
    {
-      run $(source)
+      result += [ run $(source)
             /boost/test//boost_unit_test_framework/<link>static 
             /boost/regex//boost_regex/<link>static 
            : # command line
@@ -993,417 +1116,125 @@ if $(enable-specfun)
             <toolset>msvc:<cxxflags>-bigobj
             [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr :  ]
             <include>../../math/include_private
-            release ;
+            release ;
    }
+   return $(result) ;
 }
 
-local compile_fail_tests ;
+test-suite specfun : [ get_specfun_tests ] ;
+explicit specfun ;
 
-for local source in [ glob compile_fail/*.cpp ]
+rule get_compile_fail_tests
 {
-   compile_fail_tests +=  $(source:B) ;
-   compile-fail $(source)
-   :
-      [ check-target-builds ../config//has_gmp : <define>TEST_GMP <debug-symbols>off : ]
-      [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <debug-symbols>off : ]
-   ;
+
+   local compile_fail_tests ;
+
+   for local source in [ glob compile_fail/*.cpp ]
+   {
+      compile_fail_tests +=  $(source:B) ;
+      compile-fail $(source)
+      :
+         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <debug-symbols>off : ]
+         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <debug-symbols>off : ]
+      ;
+   }
+   return $(compile_fail_tests) ;
 }
 
-alias compile_fail :  $(compile_fail_tests) ;
+test-suite compile_fail :  [ get_compile_fail_tests ] ;
 
-if ! $(disable-concepts)
+rule get_concept_checks
 {
-
+   local result ;
    for local source in [ glob concepts/*.cpp ]
    {
 
-      compile $(source)  mpfr
+      result += [ compile $(source)  mpfr
               : # requirements
-                   <define>TEST_MPFR_50
+              <define>TEST_MPFR_50
                [ check-target-builds ../config//has_mpfr : : <build>no ]
                <debug-symbols>off
-              : $(source:B)_mpfr_50 ;
+               <optimization>space
+              : $(source:B)_mpfr_50 ] ;
 
-      compile $(source)  mpfr
+      result += [ compile $(source)  mpfr
               : # requirements
-                   <define>TEST_MPFR_6
+              <define>TEST_MPFR_6
                [ check-target-builds ../config//has_mpfr : : <build>no ]
                <debug-symbols>off
-              : $(source:B)_mpfr_6 ;
+               <optimization>space
+              : $(source:B)_mpfr_6 ] ;
 
-      compile $(source)  mpfr
+      result += [ compile $(source)  mpfr
               : # requirements
-                   <define>TEST_MPFR_15
+              <define>TEST_MPFR_15
                [ check-target-builds ../config//has_mpfr : : <build>no ]
                <debug-symbols>off
-              : $(source:B)_mpfr_15 ;
+               <optimization>space
+              : $(source:B)_mpfr_15 ] ;
 
-      compile $(source)  mpfr
+      result += [ compile $(source)  mpfr
               : # requirements
-                   <define>TEST_MPFR_17
+              <define>TEST_MPFR_17
                [ check-target-builds ../config//has_mpfr : : <build>no ]
                <debug-symbols>off
-              : $(source:B)_mpfr_17 ;
+               <optimization>space
+              : $(source:B)_mpfr_17 ] ;
 
-      compile $(source)  mpfr
+      result += [ compile $(source)  mpfr
               : # requirements
-                   <define>TEST_MPFR_30
+              <define>TEST_MPFR_30
                [ check-target-builds ../config//has_mpfr : : <build>no ]
                <debug-symbols>off
-              : $(source:B)_mpfr_30 ;
+               <optimization>space
+              : $(source:B)_mpfr_30 ] ;
 
-      compile $(source)  gmp
+      result += [ compile $(source)  gmp
               : # requirements
-                   <define>TEST_MPF_50
+              <define>TEST_MPF_50
                [ check-target-builds ../config//has_gmp : : <build>no ]
                <debug-symbols>off
-              : $(source:B)_mpf50 ;
+               <optimization>space
+              : $(source:B)_mpf50 ] ;
 
-      compile $(source)
+      result += [ compile $(source)
               : # requirements
-                   <define>TEST_CPP_DEC_FLOAT
+              <define>TEST_CPP_DEC_FLOAT
                <debug-symbols>off
-              : $(source:B)_cpp_dec_float ;
+               <optimization>space
+              : $(source:B)_cpp_dec_float ] ;
 
-      compile $(source)
+      result += [ compile $(source)
               : # requirements
-                   <define>TEST_CPP_BIN_FLOAT
+              <define>TEST_CPP_BIN_FLOAT
                <debug-symbols>off
-              : $(source:B)_cpp_bin_float ;
+               <optimization>space
+              : $(source:B)_cpp_bin_float ] ;
 
-      compile $(source)
+      result += [ compile $(source)
               : # requirements
-                   <define>TEST_CPP_DEC_FLOAT_NO_ET
+              <define>TEST_CPP_DEC_FLOAT_NO_ET
                <debug-symbols>off
-              : $(source:B)_cpp_dec_float_no_et ;
+               <optimization>space
+              : $(source:B)_cpp_dec_float_no_et ] ;
 
-      compile $(source)
+      result += [ compile $(source)
               : # requirements
-                   <define>TEST_BACKEND
+              <define>TEST_BACKEND
                <debug-symbols>off
-              : $(source:B)_backend_concept ;
+               <optimization>space
+              : $(source:B)_backend_concept ] ;
 
-      compile $(source)
+      result += [ compile $(source)
               : # requirements
-                   <define>TEST_LOGGED_ADAPTER
+              <define>TEST_LOGGED_ADAPTER
                <debug-symbols>off
-              : $(source:B)_logged_adaptor ;
+               <optimization>space
+              : $(source:B)_logged_adaptor ] ;
    }
+   return $(result) ;
 }
 
-alias arithmetic_tests : 
-       test_arithmetic_backend_concept 
-       test_arithmetic_cpp_dec_float_1 
-       test_arithmetic_cpp_dec_float_2 
-       test_arithmetic_cpp_dec_float_3
-       test_arithmetic_cpp_bin_float_1
-       test_arithmetic_cpp_bin_float_2
-       test_arithmetic_cpp_bin_float_3
-       test_arithmetic_mpf_50
-       test_arithmetic_mpf
-       test_arithmetic_mpz
-       test_arithmetic_mpz_rat
-       test_arithmetic_mpz_br
-       test_arithmetic_mpq
-       test_arithmetic_mpfr
-       test_arithmetic_mpfr_50 
-       test_arithmetic_mpfr_50_static
-       test_arithmetic_tommath
-       test_arithmetic_tommath_rat
-       test_arithmetic_tommath_br
-       test_arithmetic_cpp_int_1
-       test_arithmetic_cpp_int_2
-       test_arithmetic_cpp_int_3
-       test_arithmetic_cpp_int_4
-       test_arithmetic_cpp_int_5
-       test_arithmetic_cpp_int_6
-       test_arithmetic_cpp_int_7
-       test_arithmetic_cpp_int_8
-       test_arithmetic_cpp_int_9
-       test_arithmetic_cpp_int_10
-       test_arithmetic_cpp_int_11
-       test_arithmetic_cpp_int_12
-       test_arithmetic_cpp_int_13
-       test_arithmetic_cpp_int_14
-       test_arithmetic_cpp_int_15
-       test_arithmetic_cpp_int_16
-       test_arithmetic_cpp_int_17
-       test_arithmetic_cpp_int_18
-       test_arithmetic_cpp_int_br
-       test_arithmetic_ab_1
-       test_arithmetic_ab_2
-       test_arithmetic_ab_3
-       test_cpp_dec_float_round
-       test_arithmetic_logged_1
-       test_arithmetic_logged_2
-       test_arithmetic_dbg_adptr1
-       test_arithmetic_dbg_adptr2
-       test_arithmetic_mpfi_50
-       test_arithmetic_float_128
-       test_arithmetic_float_128 
-       ;
-
-alias cpp_int_tests :
-       test_cpp_int_left_shift
-       test_cpp_int_1
-       test_cpp_int_2
-       test_cpp_int_3
-       test_cpp_int_4
-       test_cpp_int_5
-       test_checked_cpp_int
-       test_unchecked_cpp_int
-       test_cpp_int_lit
-       test_cpp_int_serial_1
-       test_cpp_int_serial_2
-       test_cpp_int_serial_3
-       test_cpp_int_serial_4
-       test_cpp_int_deserial
-;
-
-alias functions_and_limits :
-       test_numeric_limits_backend_concept
-       test_numeric_limits_mpf50
-       test_numeric_limits_mpf
-       test_numeric_limits_mpz
-       test_numeric_limits_mpq
-       test_numeric_limits_mpfr
-       test_numeric_limits_mpfr_50
-       test_numeric_limits_cpp_dec_float
-       test_numeric_limits_cpp_bin_float
-       test_numeric_limits_tommath
-       test_numeric_limits_cpp_int
-       test_numeric_limits_mpfi_50
-       test_numeric_limits_float128
-
-       test_exp_mpf50
-       test_log_mpf50
-       test_pow_mpf50
-       test_sinh_mpf50
-       test_sqrt_mpf50
-       test_cosh_mpf50
-       test_tanh_mpf50
-       test_sin_mpf50
-       test_cos_mpf50
-       test_tan_mpf50
-       test_asin_mpf50
-       test_acos_mpf50
-       test_atan_mpf50
-       test_round_mpf50
-       test_fpclassify_mpf50
-       test_sf_import_c99_mpf50
-
-       test_exp_mpfr50
-       test_log_mpfr50
-       test_pow_mpfr50
-       test_sinh_mpfr50
-       test_sqrt_mpfr50
-       test_cosh_mpfr50
-       test_tanh_mpfr50
-       test_sin_mpfr50
-       test_cos_mpfr50
-       test_tan_mpfr50
-       test_asin_mpfr50
-       test_acos_mpfr50
-       test_atan_mpfr50
-       test_round_mpfr50
-       test_fpclassify_mpfr50
-       test_sf_import_c99_mpfr50
-
-       test_exp_mpfi50
-       test_log_mpfi50
-       test_pow_mpfi50
-       test_sinh_mpfi50
-       test_sqrt_mpfi50
-       test_cosh_mpfi50
-       test_tanh_mpfi50
-       test_sin_mpfi50
-       test_cos_mpfi50
-       test_tan_mpfi50
-       test_asin_mpfi50
-       test_acos_mpfi50
-       test_atan_mpfi50
-       test_round_mpfi50
-       test_fpclassify_mpfi50
-       test_sf_import_c99_mpfi50
-
-       test_exp_cpp_dec_float
-       test_log_cpp_dec_float
-       test_pow_cpp_dec_float
-       test_sinh_cpp_dec_float
-       test_sqrt_cpp_dec_float
-       test_cosh_cpp_dec_float
-       test_tanh_cpp_dec_float
-       test_sin_cpp_dec_float
-       test_cos_cpp_dec_float
-       test_tan_cpp_dec_float
-       test_asin_cpp_dec_float
-       test_acos_cpp_dec_float
-       test_atan_cpp_dec_float
-       test_round_cpp_dec_float
-       test_fpclassify_cpp_dec_float
-       test_sf_import_c99_cpp_dec_float
-       test_sf_import_c99_cpp_dec_float_2
-       test_sf_import_c99_cpp_dec_float_3
-       test_sf_import_c99_cpp_dec_float_4
-       test_sf_import_c99_cpp_dec_float_5
-
-       test_exp_cpp_bin_float
-       test_log_cpp_bin_float
-       test_pow_cpp_bin_float
-       test_sinh_cpp_bin_float
-       test_sqrt_cpp_bin_float
-       test_cosh_cpp_bin_float
-       test_tanh_cpp_bin_float
-       test_sin_cpp_bin_float
-       test_cos_cpp_bin_float
-       test_tan_cpp_bin_float
-       test_asin_cpp_bin_float
-       test_acos_cpp_bin_float
-       test_atan_cpp_bin_float
-       test_round_cpp_bin_float
-       test_fpclassify_cpp_bin_float
-       test_sf_import_c99_cpp_bin_float
-       test_sf_import_c99_cpp_bin_float_2
-
-       test_exp_float128
-       test_log_float128
-       test_pow_float128
-       test_sinh_float128
-       test_sqrt_float128
-       test_cosh_float128
-       test_tanh_float128
-       test_sin_float128
-       test_cos_float128
-       test_tan_float128
-       test_asin_float128
-       test_acos_float128
-       test_atan_float128
-       test_round_float128
-       test_fpclassify_float128
-       test_sf_import_c99_float128
-
-       test_exp_intel_quad
-       test_log_intel_quad
-       test_pow_intel_quad
-       test_sinh_intel_quad
-       test_sqrt_intel_quad
-       test_cosh_intel_quad
-       test_tanh_intel_quad
-       test_sin_intel_quad
-       test_cos_intel_quad
-       test_tan_intel_quad
-       test_asin_intel_quad
-       test_acos_intel_quad
-       test_atan_intel_quad
-       test_round_intel_quad
-       test_fpclassify_intel_quad
-       test_sf_import_c99_intel_quad
-       test_move_gmp
-       test_move_mpfr
-       test_move_tommath
-       test_move_cpp_int
-       test_test
-       test_miller_rabin
-       test_cpp_bin_float_io_1
-       test_cpp_bin_float_io_2
-;
-
-alias conversions :
-       test_gmp_conversions
-       test_mpfr_conversions
-       test_constants_mpf50
-       test_constants_mpfr_50
-       test_constants_cpp_dec_float
-       test_convert_from_cpp_int
-       test_convert_from_mpz_int
-       test_convert_from_tom_int
-       test_convert_from_cpp_rational
-       test_convert_from_gmp_rational
-       test_convert_from_tom_rational
-       test_convert_from_cpp_bin_float
-       test_convert_from_cpp_dec_float
-       test_convert_from_mpf_float
-       test_convert_from_mpfr_float
-       test_convert_from_mpfi_float
-       test_convert_from_float128
-       test_float_io_cpp_dec_float
-       test_float_io_mpf
-       test_float_io_mpfr
-       test_float_io_mpfi
-       test_float_io_float128
-       test_float_io_intel_quad
-       test_int_io_tommath
-       test_int_io_mpz
-       test_int_io_cpp_int
-       test_rational_io_tommath
-       test_rational_io_mpz
-       test_rational_io_cpp_int
-       test_generic_conv
-       test_rat_float_interconv_1
-       test_rat_float_interconv_2
-       test_rat_float_interconv_3
-       test_rat_float_interconv_4
-       test_rat_float_interconv_5
-       test_rat_float_interconv_6
-       test_rat_float_interconv_7
-       test_rat_float_interconv_8
-       test_cpp_int_conv
-       test_cpp_int_import_export
-       test_native_integer
-       test_mixed_cpp_int
-       test_mixed_float
-       test_cpp_rat_serial
-       test_cpp_bin_float
-;
-
-alias misc :
-       test_constexpr
-       test_nothrow_cpp_int
-       test_nothrow_cpp_rational
-       test_nothrow_cpp_bin_float
-       test_nothrow_cpp_dec_float
-       test_nothrow_float128
-       test_nothrow_gmp
-       test_nothrow_mpfr
-       mpfr_include_test
-       gmp_include_test
-       tommath_include_test
-       cpp_int_include_test
-       cpp_dec_float_include_test
-       cpp_bin_float_include_test
-       test1
-       test2
-       test4
-       test5
-       test6
-       ublas1_et
-       ublas2_et
-       ublas3_et
-       ublas4_et
-       ublas5_et
-       test_adapt_serial
-       test_cpp_dec_float_serial_1
-       test_cpp_dec_float_serial_2
-       test_float128_serial
-       test_bin_dec_float_serial_1
-       test_bin_dec_float_serial_2
-       test_checked_mixed_cpp_int
-       test_mixed_cpp_bin_float
-       test_mixed_cpp_dec_float
-       test_mixed_mpf_float
-       test_mixed_mpfr_float
-       test_float_conversions
-       bug11922
-       bug12039
-       test_hash
-;
-
-
-
-
-
-
-
-
-
+test-suite concepts : [ get_concept_checks ] ;
 
+test-suite examples : ../example//examples ;