• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# copyright John Maddock 2011
2# Distributed under the Boost Software License, Version 1.0.
3# (See accompanying file LICENSE_1_0.txt or copy at
4# http://www.boost.org/LICENSE_1_0.txt.
5
6import testing ;
7import modules ;
8import path ;
9import ../../config/checks/config : requires ;
10
11local ntl-path = [ modules.peek : NTL_PATH ] ;
12local gmp_path = [ modules.peek : GMP_PATH ] ;
13local mpfr_path = [ modules.peek : MPFR_PATH ] ;
14local mpfi_path = [ modules.peek : MPFI_PATH ] ;
15local tommath_path = [ modules.peek : TOMMATH_PATH ] ;
16
17
18#######################################################################################
19#
20#  NOTE: Because these tests take a fair while to build and run, they are split up into
21#        multiple smaller test suites which are:
22#
23#        arithmetic_tests
24#        functions_and_limits
25#        conversions
26#        cpp_int_tests
27#        misc
28#        specfun
29#        compile_fail
30#        concepts
31#        examples
32#
33#        You can run an individual suite by passing its name to b2 on the command line.
34#        Or you can run all except the "specfun" tests (which are very slow) by not specifying anything.
35#
36#        Please make sure that any new tests are added to one of the test suites, and that the
37#        build times for the various suites are reasonably balanced: otherwise the CI builds
38#        will time out if one suite contains too many.
39#
40#######################################################################################################
41
42path-constant here : . ;
43
44project : requirements
45   <include>$(gmp_path)
46   <include>$(gmp_path)/mpfr
47   <include>$(gmp_path)/gmpfrxx
48   <include>$(mpfr_path)
49   <include>$(mpfi_path)
50   <include>$(mpfi_path)/src
51   <include>$(tommath_path)
52   <include>../include
53   <include>../../..
54   # We set these to make it easier to set up and test GMP and MPFR under Win32:
55   <toolset>msvc:<runtime-link>static
56   <toolset>msvc:<link>static
57   <toolset>msvc:<warnings>all
58   <toolset>msvc:<cxxflags>/fp\:precise
59   <toolset>intel-win:<runtime-link>static
60   <toolset>intel-win:<link>static
61   <toolset>clang-win:<link>static  # Clang-win does not generate .dlls.
62   <toolset>clang:<link>static # Clang-linux does not generate .dlls.
63   <toolset>clang:<cxxflags>-Wno-unused-variable  # warning: unused variable 'tolerance' [-Wunused-variable]
64   <toolset>clang:<cxxflags>-v
65
66   # Assembler error "File too big" caused by lots of C++ templates, for example, math/floating_point_examples.cpp.
67   # Some projects on some toolsets may require
68   #   <toolset>gcc-mingw:<cxxflags>\"-Wa,-mbig-obj\"
69   # See https://digitalkarabela.com/mingw-w64-how-to-fix-file-too-big-too-many-sections/
70   # <toolset>gcc-mingw:<cxxflags>-Wa,-mbig-obj # Some projects may overflow assembler and require equivalent of MSVC /bigobj.
71   # Requires version 2.30 of GNU binutils.
72   # Best applied only to projects that require this, see multiprecision/example  run math/floating_point_examples.cpp.
73
74   # Speed up compiles:
75   <toolset>msvc:<debug-symbols>off
76   <toolset>intel:<debug-symbols>off
77   <toolset>gcc:<cxxflags>-Wall
78   <toolset>gcc:<cxxflags>-Wextra
79   #<toolset>intel:<define>SLOW_COMPILER
80   <toolset>msvc,<optimization>off:<cxxflags>-RTC1
81   # We can't yet enable this - it breaks the STL in some tests...
82   #<toolset>msvc,<optimization>off:<cxxflags>-RTCc
83   #<toolset>msvc,<optimization>off:<define>_ALLOW_RTCc_IN_STL
84   ;
85
86local enable-specfun = [ MATCH (--enable-specfun) : [ modules.peek : ARGV ] ] ;
87local disable-concepts = [ MATCH (--disable-concepts) : [ modules.peek : ARGV ] ] ;
88
89lib gmp : : <search>$(gmp_path) ;
90lib mpfr : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug ;
91lib mpfi : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug <search>$(mpfi_path) <search>$(mpfi_path)/src ;
92lib quadmath ;
93lib mpc ;
94
95if $(tommath_path)
96{
97   lib tommath : [ GLOB $(tommath_path) : *.c ] : <visibility>global ;
98   TOMMATH = tommath ;
99}
100else
101{
102   lib tommath : : <search>$(tommath_path) ;
103   TOMMATH = tommath ;
104}
105
106lib no_eh_support : no_eh_test_support.cpp ;
107
108test-suite arithmetic_tests :
109
110   [ run test_arithmetic_backend_concept.cpp no_eh_support ]
111   [ compile test_arithmetic_skeleton.cpp ]
112
113   [ run test_arithmetic_cpp_dec_float_1.cpp no_eh_support ]
114   [ run test_arithmetic_cpp_dec_float_2.cpp no_eh_support ]
115   [ run test_arithmetic_cpp_dec_float_3.cpp no_eh_support ]
116   [ run test_arithmetic_cpp_dec_float_3m.cpp no_eh_support ]
117
118   [ run test_arithmetic_cpp_bin_float_1.cpp no_eh_support ]
119   [ run test_arithmetic_cpp_bin_float_2.cpp no_eh_support ]
120   [ run test_arithmetic_cpp_bin_float_2m.cpp no_eh_support ]
121   [ run test_arithmetic_cpp_bin_float_3.cpp no_eh_support ]
122
123   [ run test_arithmetic_mpf_50.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
124   [ run test_arithmetic_mpf.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
125   [ run test_arithmetic_mpz.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
126   [ run test_arithmetic_mpz_rat.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
127   [ run test_arithmetic_mpz_br.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
128   [ run test_arithmetic_mpq.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
129
130   [ run test_arithmetic_mpfr.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
131   [ run test_arithmetic_mpfr_50.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
132   [ run test_arithmetic_mpfr_50_static.cpp mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
133
134   [ run test_arithmetic_tommath.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ]
135   [ run test_arithmetic_tommath_rat.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ]
136   [ run test_arithmetic_tommath_br.cpp $(TOMMATH) no_eh_support : : : [ check-target-builds ../config//has_tommath : : <build>no ] ]
137
138   [ run test_arithmetic_cpp_int_1.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj ]
139   [ run test_arithmetic_cpp_int_2.cpp no_eh_support ]
140   [ run test_arithmetic_cpp_int_3.cpp no_eh_support ]
141   [ run test_arithmetic_cpp_int_4.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj ]
142   [ run test_arithmetic_cpp_int_5.cpp no_eh_support ]
143   [ run test_arithmetic_cpp_int_6.cpp no_eh_support ]
144   [ run test_arithmetic_cpp_int_7.cpp no_eh_support ]
145   [ run test_arithmetic_cpp_int_8.cpp no_eh_support ]
146   [ run test_arithmetic_cpp_int_9.cpp no_eh_support ]
147   [ run test_arithmetic_cpp_int_10.cpp no_eh_support ]
148   [ run test_arithmetic_cpp_int_11.cpp no_eh_support ]
149   [ run test_arithmetic_cpp_int_12.cpp no_eh_support ]
150   [ run test_arithmetic_cpp_int_13.cpp no_eh_support ]
151   [ run test_arithmetic_cpp_int_14.cpp no_eh_support ]
152   [ run test_arithmetic_cpp_int_15.cpp no_eh_support ]
153   [ run test_arithmetic_cpp_int_16.cpp no_eh_support ]
154   [ run test_arithmetic_cpp_int_17.cpp no_eh_support ]
155   [ run test_arithmetic_cpp_int_18.cpp no_eh_support ]
156   [ run test_arithmetic_cpp_int_19.cpp no_eh_support ]
157   [ run test_arithmetic_cpp_int_br.cpp no_eh_support ]
158
159   [ run test_arithmetic_ab_1.cpp no_eh_support ]
160   [ run test_arithmetic_ab_2.cpp no_eh_support ]
161   [ run test_arithmetic_ab_3.cpp no_eh_support ]
162
163   [ run test_cpp_dec_float_round.cpp no_eh_support ]
164
165   [ run test_arithmetic_logged_1.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj ]
166   [ run test_arithmetic_logged_2.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj ]
167
168   [ run test_arithmetic_dbg_adptr1.cpp no_eh_support ]
169   [ run test_arithmetic_dbg_adptr1m.cpp no_eh_support ]
170   [ run test_arithmetic_dbg_adptr2.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj ]
171
172   [ run test_arithmetic_mpfi_50.cpp mpfi mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ]
173
174   [ run test_arithmetic_float_128.cpp quadmath no_eh_support : : : [ check-target-builds ../config//has_float128 : : <build>no ] ]
175   [ 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 ]
176
177   [ run test_arithmetic_mpc.cpp mpc mpfr gmp : : : [ check-target-builds ../config//has_mpc : : <build>no ] ]
178   [ run test_mpfr_mpc_precisions.cpp mpc mpfr gmp : : : [ check-target-builds ../config//has_mpc : : <build>no ] ]
179   [ run test_mpfi_precisions.cpp mpfi mpfr gmp : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ]
180   [ run test_mpf_precisions.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
181   [ 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 ] ]
182   [ run test_arithmetic_complex_adaptor.cpp ]
183   [ run test_arithmetic_complex_adaptor_2.cpp : : : <toolset>msvc:<cxxflags>-bigobj ]
184   [ run test_arithmetic_complex128.cpp : : : [ check-target-builds ../config//has_float128 : <source>quadmath ] ]
185
186;
187
188rule get_function_tests
189{
190   local result ;
191   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
192   {
193         result += [ run $(source) gmp no_eh_support
194              : # command line
195              : # input files
196              : # requirements
197               [ check-target-builds ../config//has_gmp : : <build>no ]
198               <define>TEST_MPF_50
199              : $(source:B)_mpf50 ] ;
200         result += [ run $(source) mpfr gmp no_eh_support
201              : # command line
202              : # input files
203              : # requirements
204               [ check-target-builds ../config//has_mpfr : : <build>no ]
205               <define>TEST_MPFR_50
206              : $(source:B)_mpfr50 ] ;
207         result += [ run $(source) mpfi mpfr gmp no_eh_support
208              : # command line
209              : # input files
210              : # requirements
211               [ check-target-builds ../config//has_mpfi : : <build>no ]
212               <define>TEST_MPFI_50
213              : $(source:B)_mpfi50 ] ;
214         result += [ run $(source) no_eh_support
215              : # command line
216              : # input files
217              : # requirements
218               <define>TEST_CPP_DEC_FLOAT
219              : $(source:B)_cpp_dec_float ] ;
220         result += [ run $(source) no_eh_support
221              : # command line
222              : # input files
223              : # requirements
224               <define>TEST_CPP_BIN_FLOAT
225              : $(source:B)_cpp_bin_float ] ;
226         result += [ run $(source) quadmath no_eh_support
227              : # command line
228              : # input files
229              : # requirements
230               [ check-target-builds ../config//has_float128 : : <build>no ]
231               <define>TEST_FLOAT128
232              : $(source:B)_float128 ] ;
233         result += [ run $(source) no_eh_support
234              : # command line
235              : # input files
236              : # requirements
237               [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
238               <define>TEST_FLOAT128
239              : $(source:B)_intel_quad ] ;
240   }
241   return $(result) ;
242}
243
244test-suite functions_and_limits :
245
246      [ run test_numeric_limits.cpp no_eh_support
247              : # command line
248              : # input files
249              : # requirements
250              <define>TEST_BACKEND
251              : test_numeric_limits_backend_concept ]
252
253      [ run test_numeric_limits.cpp gmp no_eh_support
254              : # command line
255              : # input files
256              : # requirements
257              <define>TEST_MPF_50
258               [ check-target-builds ../config//has_gmp : : <build>no ]
259              : test_numeric_limits_mpf50 ]
260
261      [ run test_numeric_limits.cpp gmp no_eh_support
262              : # command line
263              : # input files
264              : # requirements
265              <define>TEST_MPF
266               [ check-target-builds ../config//has_gmp : : <build>no ]
267              : test_numeric_limits_mpf ]
268
269      [ run test_numeric_limits.cpp gmp no_eh_support
270              : # command line
271              : # input files
272              : # requirements
273              <define>TEST_MPZ
274               [ check-target-builds ../config//has_gmp : : <build>no ]
275              : test_numeric_limits_mpz ]
276
277      [ run test_numeric_limits.cpp gmp no_eh_support
278              : # command line
279              : # input files
280              : # requirements
281              <define>TEST_MPQ
282               [ check-target-builds ../config//has_gmp : : <build>no ]
283              : test_numeric_limits_mpq ]
284
285      [ run test_numeric_limits.cpp mpfr gmp no_eh_support
286              : # command line
287              : # input files
288              : # requirements
289              <define>TEST_MPFR
290               [ check-target-builds ../config//has_mpfr : : <build>no ]
291              : test_numeric_limits_mpfr ]
292
293      [ run test_numeric_limits.cpp mpfr gmp no_eh_support
294              : # command line
295              : # input files
296              : # requirements
297              <define>TEST_MPFR_50
298               [ check-target-builds ../config//has_mpfr : : <build>no ]
299              : test_numeric_limits_mpfr_50 ]
300
301      [ run test_numeric_limits.cpp no_eh_support
302              : # command line
303              : # input files
304              : # requirements
305              <define>TEST_CPP_DEC_FLOAT
306              : test_numeric_limits_cpp_dec_float ]
307
308      [ run test_numeric_limits.cpp no_eh_support
309              : # command line
310              : # input files
311              : # requirements
312              <define>TEST_CPP_BIN_FLOAT
313              : test_numeric_limits_cpp_bin_float ]
314
315      [ run test_numeric_limits.cpp $(TOMMATH) no_eh_support
316              : # command line
317              : # input files
318              : # requirements
319              <define>TEST_TOMMATH
320               [ check-target-builds ../config//has_tommath : : <build>no ]
321              : test_numeric_limits_tommath ]
322
323      [ run test_numeric_limits.cpp no_eh_support
324              : # command line
325              : # input files
326              : # requirements
327              <define>TEST_CPP_INT
328              : test_numeric_limits_cpp_int ]
329
330      [ run test_numeric_limits.cpp mpfi mpfr gmp no_eh_support
331              : # command line
332              : # input files
333              : # requirements
334              <define>TEST_MPFI_50
335               [ check-target-builds ../config//has_mpfi : : <build>no ]
336              : test_numeric_limits_mpfi_50 ]
337
338      [ run test_numeric_limits.cpp quadmath no_eh_support
339              : # command line
340              : # input files
341              : # requirements
342              <define>TEST_FLOAT128
343               [ check-target-builds ../config//has_float128 : : <build>no ]
344              : test_numeric_limits_float128 ]
345      [ run test_numeric_limits.cpp no_eh_support
346              : # command line
347              : # input files
348              : # requirements
349              <define>TEST_FLOAT128
350               [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
351              : test_numeric_limits_intel_quad ]
352
353      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_2 : test_sf_import_c99_cpp_dec_float_2 ]
354      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_3 : test_sf_import_c99_cpp_dec_float_3 ]
355      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_4 : test_sf_import_c99_cpp_dec_float_4 ]
356      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_5 : test_sf_import_c99_cpp_dec_float_5 ]
357      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_DEC_FLOAT_6 : test_sf_import_c99_cpp_dec_float_6 ]
358
359      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_BIN_FLOAT_2 : test_sf_import_c99_cpp_bin_float_2 ]
360      [ run test_sf_import_c99.cpp : : : <define>TEST_CPP_BIN_FLOAT_2 : test_sf_import_c99_cpp_bin_float_3 ]
361
362      [ run test_move.cpp mpfr gmp no_eh_support
363              : # command line
364              : # input files
365              : # requirements
366              <define>TEST_MPFR
367               [ check-target-builds ../config//has_mpfr : : <build>no ]
368              : test_move_mpfr ]
369
370      [ run test_move.cpp mpc mpfr gmp no_eh_support
371              : # command line
372              : # input files
373              : # requirements
374              <define>TEST_MPC
375               [ check-target-builds ../config//has_mpc : : <build>no ]
376              : test_move_mpc ]
377
378      [ run test_move.cpp gmp no_eh_support
379              : # command line
380              : # input files
381              : # requirements
382              <define>TEST_GMP
383               [ check-target-builds ../config//has_gmp : : <build>no ]
384              : test_move_gmp ]
385
386      [ run test_move.cpp $(TOMMATH) no_eh_support
387              : # command line
388              : # input files
389              : # requirements
390              <define>TEST_TOMMATH
391               [ check-target-builds ../config//has_tommath : : <build>no ]
392              : test_move_tommath ]
393
394      [ run test_move.cpp no_eh_support
395              : # command line
396              : # input files
397              : # requirements
398              <define>TEST_CPP_INT
399              : test_move_cpp_int ]
400
401      [ get_function_tests ]
402;
403
404test-suite conversions :
405
406   [ run test_gmp_conversions.cpp gmp no_eh_support
407           : # command line
408           : # input files
409           : # requirements
410            [ check-target-builds ../config//has_gmp : : <build>no ] ]
411
412   [ run test_mpfr_conversions.cpp gmp mpfr no_eh_support
413           : # command line
414           : # input files
415           : # requirements
416            [ check-target-builds ../config//has_mpfr : : <build>no ] ]
417
418   [ run test_mpc_conversions.cpp gmp mpfr mpc no_eh_support
419           : # command line
420           : # input files
421           : # requirements
422            [ check-target-builds ../config//has_mpc : : <build>no ] ]
423
424   [ run test_constants.cpp gmp no_eh_support
425           : # command line
426           : # input files
427           : # requirements
428           <define>TEST_MPF_50
429            [ check-target-builds ../config//has_gmp : : <build>no ]
430           : test_constants_mpf50 ]
431
432   [ run test_constants.cpp mpfr gmp no_eh_support
433           : # command line
434           : # input files
435           : # requirements
436           <define>TEST_MPFR_50
437            [ check-target-builds ../config//has_mpfr : : <build>no ]
438           : test_constants_mpfr_50 ]
439
440   [ run test_constants.cpp no_eh_support
441           : # command line
442           : # input files
443           : # requirements
444           <define>TEST_CPP_DEC_FLOAT
445           : test_constants_cpp_dec_float ]
446
447
448   [ run test_test.cpp ]
449   [ run test_cpp_int_lit.cpp no_eh_support ]
450
451      #
452      # Interconversion tests:
453      #
454      [ run test_convert_from_cpp_int.cpp
455              : # command line
456              : # input files
457              : # requirements
458              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
459              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
460              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
461              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
462               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
463              ]
464      [ run test_convert_from_mpz_int.cpp
465              : # command line
466              : # input files
467              : # requirements
468              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
469              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
470              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
471              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
472               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
473              ]
474      [ run test_convert_from_tom_int.cpp
475              : # command line
476              : # input files
477              : # requirements
478              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
479              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
480              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
481              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
482               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
483              ]
484      [ run test_convert_from_cpp_rational.cpp
485              : # command line
486              : # input files
487              : # requirements
488              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
489              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
490              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
491              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
492               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
493              ]
494      [ run test_convert_from_gmp_rational.cpp
495              : # command line
496              : # input files
497              : # requirements
498              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
499              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
500              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
501              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
502               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
503              ]
504      [ run test_convert_from_tom_rational.cpp
505              : # command line
506              : # input files
507              : # requirements
508              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
509              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
510              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
511              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
512               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
513              ]
514      [ run test_convert_from_cpp_bin_float.cpp
515              : # command line
516              : # input files
517              : # requirements
518              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
519              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
520              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
521              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
522               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
523              ]
524      [ run test_convert_from_cpp_dec_float.cpp
525              : # command line
526              : # input files
527              : # requirements
528              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
529              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
530              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
531              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
532               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
533              ]
534      [ run test_convert_from_mpf_float.cpp
535              : # command line
536              : # input files
537              : # requirements
538              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
539              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
540              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
541              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
542               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
543              ]
544      [ run test_convert_from_mpfr_float.cpp
545              : # command line
546              : # input files
547              : # requirements
548              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
549              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
550              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
551              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
552               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
553              ]
554      [ run test_convert_from_mpfi_float.cpp
555              : # command line
556              : # input files
557              : # requirements
558              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
559              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
560              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
561              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
562               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
563              ]
564      [ run test_convert_from_float128.cpp
565              : # command line
566              : # input files
567              : # requirements
568              [ check-target-builds ../config//has_gmp : <define>HAS_GMP <source>gmp : ]
569              [ check-target-builds ../config//has_mpfr : <define>HAS_MPFR <source>gmp <source>mpfr : ]
570              [ check-target-builds ../config//has_mpfi : <define>HAS_MPFI <source>gmp <source>mpfr <source>mpfi : ]
571              [ check-target-builds ../config//has_tommath : <define>HAS_TOMMATH <source>tommath : ]
572               [ check-target-builds ../config//has_float128 : <define>HAS_FLOAT128 <source>quadmath : ]
573              ]
574
575      [ run test_cpp_bin_float_conv.cpp ]
576
577      [ run test_cpp_bin_float_io.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
578              : # command line
579              : # input files
580              : # requirements
581              <define>TEST_CPP_BIN_FLOAT
582               <define>TEST1
583               release # Otherwise [ runtime is slow
584              : test_cpp_bin_float_io_1
585              ]
586
587      [ run test_cpp_bin_float_io.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
588              : # command line
589              : # input files
590              : # requirements
591              <define>TEST_CPP_BIN_FLOAT
592               <define>TEST2
593               release # Otherwise [ runtime is slow
594              : test_cpp_bin_float_io_2
595              ]
596
597      [ run test_cpp_bin_float.cpp no_eh_support mpfr gmp /boost/system//boost_system /boost/chrono//boost_chrono
598              : # command line
599              : # input files
600              : # requirements
601              <define>TEST_MPFR
602               [ check-target-builds ../config//has_mpfr : : <build>no ]
603               release # Otherwise [ runtime is slow
604              ]
605
606      [ run test_float_io.cpp no_eh_support
607              : # command line
608              : # input files
609              : # requirements
610              <define>TEST_CPP_DEC_FLOAT
611               release # Otherwise [ runtime is slow
612              : test_float_io_cpp_dec_float ]
613
614      [ run test_float_io.cpp gmp no_eh_support
615              : # command line
616              : # input files
617              : # requirements
618              <define>TEST_MPF_50
619               release # Otherwise [ runtime is slow
620               [ check-target-builds ../config//has_gmp : : <build>no ]
621              : test_float_io_mpf ]
622
623      [ run test_float_io.cpp mpfr gmp no_eh_support
624              : # command line
625              : # input files
626              : # requirements
627              <define>TEST_MPFR_50
628               release # Otherwise [ runtime is slow
629               [ check-target-builds ../config//has_mpfr : : <build>no ]
630              : test_float_io_mpfr ]
631
632      [ run test_float_io.cpp mpfi mpfr gmp no_eh_support
633              : # command line
634              : # input files
635              : # requirements
636              <define>TEST_MPFI_50
637               release # Otherwise [ runtime is slow
638               [ check-target-builds ../config//has_mpfi : : <build>no ]
639              : test_float_io_mpfi ]
640
641      [ run test_float_io.cpp quadmath no_eh_support
642              : # command line
643              : # input files
644              : # requirements
645              <define>TEST_FLOAT128
646               release # Otherwise [ runtime is slow
647               [ check-target-builds ../config//has_float128 : : <build>no ]
648              : test_float_io_float128 ]
649      [ run test_float_io.cpp no_eh_support
650              : # command line
651              : # input files
652              : # requirements
653              <define>TEST_FLOAT128
654               release # Otherwise [ runtime is slow
655               [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
656              : test_float_io_intel_quad ]
657
658      [ run test_int_io.cpp no_eh_support $(TOMMATH)
659              : # command line
660              : # input files
661              : # requirements
662              <define>TEST_TOMMATH
663               release # Otherwise [ runtime is slow
664               [ check-target-builds ../config//has_tommath : : <build>no ]
665              : test_int_io_tommath ]
666
667      [ run test_int_io.cpp no_eh_support gmp
668              : # command line
669              : # input files
670              : # requirements
671              <define>TEST_MPZ
672               release # Otherwise [ runtime is slow
673               [ check-target-builds ../config//has_gmp : : <build>no ]
674              : test_int_io_mpz ]
675
676;
677
678
679test-suite cpp_int_tests :
680
681      [ run test_int_io.cpp no_eh_support
682           : # command line
683           : # input files
684           : # requirements
685           <define>TEST_CPP_INT
686            release # Otherwise    [ runtime is slow
687           : test_int_io_cpp_int ]
688
689      [ run test_cpp_int_left_shift.cpp gmp no_eh_support
690           : # command line
691           : # input files
692           : # requirements
693            [ check-target-builds ../config//has_gmp : : <build>no ]
694            release  # otherwise    [ runtime is too slow!!
695            ]
696
697      [ run test_cpp_int.cpp gmp no_eh_support
698           : # command line
699           : # input files
700           : # requirements
701            [ check-target-builds ../config//has_gmp : : <build>no ]
702            release  # otherwise    [ runtime is too slow!!
703            <define>TEST1
704            : test_cpp_int_1
705            ]
706
707      [ run test_cpp_int.cpp gmp no_eh_support
708           : # command line
709           : # input files
710           : # requirements
711            [ check-target-builds ../config//has_gmp : : <build>no ]
712            release  # otherwise    [ runtime is too slow!!
713            <define>TEST2
714            : test_cpp_int_2
715            ]
716
717      [ run test_cpp_int.cpp gmp no_eh_support
718           : # command line
719           : # input files
720           : # requirements
721            [ check-target-builds ../config//has_gmp : : <build>no ]
722            release  # otherwise    [ runtime is too slow!!
723            <define>TEST3
724            : test_cpp_int_3
725            ]
726
727      [ run test_cpp_int.cpp gmp no_eh_support
728           : # command line
729           : # input files
730           : # requirements
731            [ check-target-builds ../config//has_gmp : : <build>no ]
732            release  # otherwise    [ runtime is too slow!!
733            <define>TEST4
734            : test_cpp_int_4
735            ]
736
737      [ run test_cpp_int.cpp gmp no_eh_support
738           : # command line
739           : # input files
740           : # requirements
741            [ check-target-builds ../config//has_gmp : : <build>no ]
742            release  # otherwise    [ runtime is too slow!!
743            <define>TEST5
744            : test_cpp_int_5
745            ]
746
747      [ run test_cpp_int.cpp gmp no_eh_support
748           : # command line
749           : # input files
750           : # requirements
751            [ check-target-builds ../config//has_gmp : : <build>no ]
752            release  # otherwise    [ runtime is too slow!!
753            <define>TEST6
754            : test_cpp_int_6
755            ]
756
757      [ run test_cpp_int_karatsuba.cpp gmp no_eh_support
758           : # command line
759           : # input files
760           : # requirements
761            [ check-target-builds ../config//has_gmp : : <build>no ]
762            release  # otherwise    [ runtime is too slow!!
763            <define>TEST=1
764            : test_cpp_int_karatsuba_1
765            ]
766      [ run test_cpp_int_karatsuba.cpp gmp no_eh_support
767           : # command line
768           : # input files
769           : # requirements
770            [ check-target-builds ../config//has_gmp : : <build>no ]
771            release  # otherwise    [ runtime is too slow!!
772            <define>TEST=2
773            : test_cpp_int_karatsuba_2
774            ]
775      [ run test_cpp_int_karatsuba.cpp gmp no_eh_support
776           : # command line
777           : # input files
778           : # requirements
779            [ check-target-builds ../config//has_gmp : : <build>no ]
780            release  # otherwise    [ runtime is too slow!!
781            <define>TEST=3
782            : test_cpp_int_karatsuba_3
783            ]
784      [ run test_cpp_int_karatsuba.cpp gmp no_eh_support
785           : # command line
786           : # input files
787           : # requirements
788            [ check-target-builds ../config//has_gmp : : <build>no ]
789            release  # otherwise    [ runtime is too slow!!
790            <define>TEST=4
791            : test_cpp_int_karatsuba_4
792            ]
793
794      [ run test_checked_cpp_int.cpp no_eh_support ]
795      [ run test_unchecked_cpp_int.cpp no_eh_support : : : release ]
796
797      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_1 ]
798      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_2 ]
799      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST3 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_3 ]
800      [ run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST4 <toolset>gcc-mingw:<link>static : test_cpp_int_serial_4 ]
801      [ run test_cpp_int_deserial.cpp ../../serialization/build//boost_serialization ../../filesystem/build//boost_filesystem : $(here)/serial_txts : : release <toolset>gcc-mingw:<link>static  ]
802      [ run test_cpp_rat_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  ]
803
804;
805
806test-suite misc :
807
808      [ compile test_constexpr.cpp :
809         [ check-target-builds ../config//has_float128 : <define>HAVE_FLOAT128 : ]
810         [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type <define>HAVE_FLOAT128 : ]
811         [ requires cxx11_constexpr cxx11_user_defined_literals ] ]
812
813      [ compile constexpr_test_arithmetic_backend.cpp :
814         [ requires cxx14_constexpr cxx17_if_constexpr ] ]
815      [ compile constexpr_test_float128.cpp :
816         [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_float128 : <source>quadmath : <build>no ] ]
817
818      [ run constexpr_test_cpp_int.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
819      [ run constexpr_test_cpp_int_2.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
820      [ run constexpr_test_cpp_int_3.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
821      [ run constexpr_test_cpp_int_4.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
822      [ run constexpr_test_cpp_int_5.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : : <build>no ] ]
823      [ run constexpr_test_cpp_int_6.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : <toolset>msvc:<cxxflags>-constexpr:steps10000000 <toolset>clang:<cxxflags>-fconstexpr-steps=268435456 : <build>no ] [ check-target-builds ../config//has_constexpr_limits : <cxxflags>-fconstexpr-ops-limit=268435456 ] ]
824      [ run constexpr_test_cpp_int_7.cpp : : : [ requires cxx14_constexpr cxx17_if_constexpr ] [ check-target-builds ../config//has_is_constant_evaluated : <toolset>msvc:<cxxflags>-constexpr:steps10000000 <toolset>clang:<cxxflags>-fconstexpr-steps=268435456 : <build>no ] ]
825
826      [ compile test_nothrow_cpp_int.cpp ]
827      [ compile test_nothrow_cpp_rational.cpp ]
828      [ compile test_nothrow_cpp_bin_float.cpp ]
829      [ compile test_nothrow_cpp_dec_float.cpp ]
830      [ compile test_nothrow_float128.cpp : [ check-target-builds ../config//has_float128 : : <build>no ] ]
831      [ compile test_nothrow_gmp.cpp : [ check-target-builds ../config//has_gmp : : <build>no ] ]
832      [ compile test_nothrow_mpfr.cpp : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
833
834      [ run test_miller_rabin.cpp no_eh_support gmp
835              : # command line
836              : # input files
837              : # requirements
838               [ check-target-builds ../config//has_gmp : : <build>no ]
839               release  # otherwise [ runtime is too slow!!
840               ]
841
842      [ run test_rational_io.cpp $(TOMMATH) no_eh_support
843              : # command line
844              : # input files
845              : # requirements
846              <define>TEST_TOMMATH
847               [ check-target-builds ../config//has_tommath : : <build>no ]
848               release # Otherwise [ runtime is slow
849              : test_rational_io_tommath ]
850
851      [ run test_rational_io.cpp gmp no_eh_support
852              : # command line
853              : # input files
854              : # requirements
855              <define>TEST_MPQ
856               [ check-target-builds ../config//has_gmp : : <build>no ]
857               release # Otherwise [ runtime is slow
858              : test_rational_io_mpz ]
859
860      [ run test_rational_io.cpp no_eh_support
861              : # command line
862              : # input files
863              : # requirements
864              <define>TEST_CPP_INT
865               release # Otherwise [ runtime is slow
866              : test_rational_io_cpp_int ]
867
868      [ run test_generic_conv.cpp no_eh_support
869              : # command line
870              : # input files
871              : # requirements
872               [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp :  ]
873               [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>$(TOMMATH) :  ]
874               [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>mpfr :  ]
875               release # Otherwise [ runtime is slow
876               ]
877
878      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
879              : # command line
880              : # input files
881              : # requirements
882              <define>TEST1
883              release
884              : test_rat_float_interconv_1 ]
885
886      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
887              : # command line
888              : # input files
889              : # requirements
890              <define>TEST2
891              release
892              : test_rat_float_interconv_2 ]
893
894      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
895              : # command line
896              : # input files
897              : # requirements
898              <define>TEST3
899              release
900              : test_rat_float_interconv_3 ]
901
902      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono
903              : # command line
904              : # input files
905              : # requirements
906              <define>TEST4
907              release
908              : test_rat_float_interconv_4 ]
909
910      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
911              : # command line
912              : # input files
913              : # requirements
914              <define>TEST5
915              [ check-target-builds ../config//has_mpfr : : <build>no ]
916              release
917              : test_rat_float_interconv_5 ]
918
919      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
920              : # command line
921              : # input files
922              : # requirements
923              <define>TEST6
924              [ check-target-builds ../config//has_mpfr : : <build>no ]
925              release
926              : test_rat_float_interconv_6 ]
927
928      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
929              : # command line
930              : # input files
931              : # requirements
932              <define>TEST7
933              [ check-target-builds ../config//has_mpfr : : <build>no ]
934              release
935              : test_rat_float_interconv_7 ]
936
937      [ run test_rat_float_interconv.cpp no_eh_support /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
938              : # command line
939              : # input files
940              : # requirements
941              <define>TEST8
942              [ check-target-builds ../config//has_mpfr : : <build>no ]
943              release
944              : test_rat_float_interconv_8 ]
945
946      [ run test_cpp_int_conv.cpp no_eh_support ]
947      [ run test_cpp_int_import_export.cpp no_eh_support ]
948      [ run test_native_integer.cpp no_eh_support ]
949
950      [ run test_mixed_cpp_int.cpp no_eh_support ]
951      [ run test_mixed_float.cpp no_eh_support
952              : # command line
953              : # input files
954              : # requirements
955               [ check-target-builds ../config//has_gmp : <define>TEST_GMP <library>gmp : ]
956               [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <library>mpfr <library>gmp : ] ]
957      [ compile include_test/mpfr_include_test.cpp
958                    : # requirements
959                     [ check-target-builds ../config//has_mpfr : : <build>no ] ]
960      [ compile include_test/gmp_include_test.cpp
961                    : # requirements
962                     [ check-target-builds ../config//has_gmp : : <build>no ] ]
963      [ compile include_test/tommath_include_test.cpp
964                    : # requirements
965                     [ check-target-builds ../config//has_tommath : : <build>no ] ]
966      [ compile include_test/cpp_int_include_test.cpp ]
967      [ compile include_test/cpp_dec_float_include_test.cpp ]
968      [ compile include_test/cpp_bin_float_include_test.cpp ]
969
970      [ run ublas_interop/test1.cpp ublas_interop/test11.cpp ublas_interop/test12.cpp ublas_interop/test13.cpp no_eh_support ]
971      [ run ublas_interop/test2.cpp ublas_interop/test21.cpp ublas_interop/test22.cpp ublas_interop/test23.cpp no_eh_support ]
972      #[ run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp ]
973      [ run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp no_eh_support ]
974      [ run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp no_eh_support ]
975      [ run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp no_eh_support ]
976      #[ run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp ]
977
978      [ 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 ]
979      [ 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 ]
980      #[ run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp : : : <define>TEST_ET=1 : ublas3_et ]
981      [ run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp no_eh_support : : : <define>TEST_ET=1 : ublas3_et ]
982      [ run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp no_eh_support : : : <define>TEST_ET=1 : ublas4_et ]
983      [ run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp no_eh_support : : : <define>TEST_ET=1 : ublas5_et ]
984      #[ run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp : : : <define>TEST_ET=1 : ublas6_et ]
985
986      #
987      # Serialization tests, run in release mode so we cycle through more values:
988      #
989      [ run test_adapt_serial.cpp ../../serialization/build//boost_serialization : : : release <toolset>gcc-mingw:<link>static  ]
990      [ 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 ]
991      [ 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 ]
992      [ run test_float128_serial.cpp ../../serialization/build//boost_serialization quadmath : : : release <toolset>gcc-mingw:<link>static  [ check-target-builds ../config//has_float128 : : <build>no ]  ]
993      [ 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 ]
994      [ 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 ]
995
996      #
997      # Mixed mode comparison tests, see: https://svn.boost.org/trac/boost/ticket/11328
998      #
999      [ run test_checked_mixed_cpp_int.cpp no_eh_support ]
1000      [ run test_mixed_cpp_bin_float.cpp no_eh_support ]
1001      [ run test_mixed_cpp_dec_float.cpp no_eh_support ]
1002      [ run test_mixed_mpf_float.cpp gmp no_eh_support : : : [ check-target-builds ../config//has_gmp : : <build>no ] ]
1003      [ run test_mixed_mpfr_float.cpp  mpfr gmp no_eh_support : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ]
1004      #
1005      # Check for narrowing conversions:
1006      #
1007      [ run test_float_conversions.cpp no_eh_support ]
1008      #
1009      # specific bug cases:
1010      #
1011      [ compile bug11922.cpp ]
1012      [ run bug12039.cpp no_eh_support ]
1013      [ compile git_issue_30.cpp ]
1014      [ run git_issue_167.cpp ]
1015      [ run git_issue_175.cpp ]
1016      [ compile git_issue_98.cpp :
1017         [ check-target-builds ../config//has_float128 : <define>TEST_FLOAT128 <source>quadmath : ]
1018         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp : ]
1019         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr : ]
1020         [ check-target-builds ../config//has_mpc : <define>TEST_MPC <source>gmp <source>mpfr <source>mpc : ] ]
1021      [ run issue_13301.cpp ]
1022      [ run issue_13148.cpp ]
1023      [ run test_hash.cpp : : :
1024         [ check-target-builds ../config//has_float128 : <define>TEST_FLOAT128 <source>quadmath : ]
1025         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp : ]
1026         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr : ]
1027         [ check-target-builds ../config//has_mpfi : <define>TEST_MPFI <source>gmp <source>mpfr <source>mpfi : ]
1028         [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>tommath : ]
1029          ]
1030      [ run test_optional_compat.cpp ]
1031      #
1032      # Eigen interoperability:
1033      #
1034      [ run test_eigen_interop_cpp_int.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
1035      [ run test_eigen_interop_cpp_dec_float.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
1036      [ run test_eigen_interop_cpp_dec_float_2.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
1037      [ run test_eigen_interop_cpp_dec_float_3.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
1038      [ run test_eigen_interop_cpp_bin_float_1.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
1039      [ run test_eigen_interop_cpp_bin_float_2.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
1040      [ run test_eigen_interop_cpp_bin_float_3.cpp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] ]
1041      [ 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 ] ]
1042      [ 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 ] ]
1043      [ 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 ] ]
1044      [ run test_eigen_interop_gmp.cpp gmp : : : release [ check-target-builds ../config//has_eigen : : <build>no ] [ check-target-builds ../config//has_gmp : : <build>no ] ]
1045      [ 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 ] ]
1046;
1047
1048
1049#
1050# This take too long to run as a regular part of the tests:
1051#
1052run test_cpp_bin_float_round.cpp mpfr gmp ;
1053explicit test_cpp_bin_float_round ;
1054
1055rule get_specfun_tests
1056{
1057   local result ;
1058   for local source in [ glob math/*.cpp ]
1059   {
1060      result += [ run $(source) mpfr gmp
1061            /boost/test//boost_unit_test_framework/<link>static
1062            /boost/regex//boost_regex/<link>static
1063            math/instances//test_instances_mpfr/<link>static
1064           : # command line
1065           : # input files
1066           : # requirements
1067            [ check-target-builds ../config//has_mpfr : : <build>no ]
1068            <define>TEST_MPFR_50
1069            <optimization>speed
1070            <define>BOOST_ALL_NO_LIB
1071            <define>BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
1072            <toolset>msvc:<cxxflags>-bigobj
1073            <include>../../math/include_private
1074            release
1075           : $(source:B)_mpfr ] ;
1076      result += [ run $(source) gmp
1077            /boost/test//boost_unit_test_framework/<link>static
1078            /boost/regex//boost_regex/<link>static
1079            math/instances//test_instances_mpf/<link>static
1080           : # command line
1081           : # input files
1082           : # requirements
1083            [ check-target-builds ../config//has_gmp : : <build>no ]
1084            <optimization>speed
1085            <define>TEST_MPF_50
1086            <define>BOOST_ALL_NO_LIB
1087            <define>BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
1088            <toolset>msvc:<cxxflags>-bigobj
1089            <include>../../math/include_private
1090            release
1091           : $(source:B)_mpf ] ;
1092      result += [ run $(source) /boost/test//boost_unit_test_framework/<link>static
1093               /boost/regex//boost_regex/<link>static
1094               math/instances//test_instances_cpp_dec_float/<link>static
1095           : # command line
1096           : # input files
1097           : # requirements
1098            <define>TEST_CPP_DEC_FLOAT
1099            <define>BOOST_ALL_NO_LIB
1100            <define>BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
1101            <optimization>speed
1102            <toolset>msvc:<cxxflags>-bigobj
1103            <include>../../math/include_private
1104            release
1105           : $(source:B)_cpp_dec_float ] ;
1106      result += [ run $(source) /boost/test//boost_unit_test_framework/<link>static
1107               /boost/regex//boost_regex/<link>static
1108               math/instances//test_instances_cpp_bin_float/<link>static
1109           : # command line
1110           : # input files
1111           : # requirements
1112            <define>TEST_CPP_BIN_FLOAT
1113            <define>BOOST_ALL_NO_LIB
1114            <define>BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
1115            <optimization>speed
1116            <toolset>msvc:<cxxflags>-bigobj
1117            <include>../../math/include_private
1118            release
1119           : $(source:B)_cpp_bin_float ] ;
1120      result += [ run $(source) quadmath
1121            /boost/test//boost_unit_test_framework/<link>static
1122            /boost/regex//boost_regex/<link>static
1123            math/instances//test_instances_float128/<link>static
1124           : # command line
1125           : # input files
1126           : # requirements
1127            [ check-target-builds ../config//has_float128 : : <build>no ]
1128            <optimization>speed
1129            <define>TEST_FLOAT128
1130            <define>BOOST_ALL_NO_LIB
1131            <define>BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
1132            <toolset>msvc:<cxxflags>-bigobj
1133            <include>../../math/include_private
1134            release
1135           : $(source:B)_float128 ] ;
1136      result += [ run $(source)
1137            /boost/test//boost_unit_test_framework/<link>static
1138            /boost/regex//boost_regex/<link>static
1139            math/instances//test_instances_intel_quad/<link>static
1140           : # command line
1141           : # input files
1142           : # requirements
1143            [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
1144            <optimization>speed
1145            <define>TEST_FLOAT128
1146            <define>BOOST_ALL_NO_LIB
1147            <define>BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
1148            <toolset>msvc:<cxxflags>-bigobj
1149            <include>../../math/include_private
1150            release
1151           : $(source:B)_intel_quad ] ;
1152   }
1153   #
1154   # High precision tests are rather different, as they test only one
1155   # multiprecision type and are more a test of Boost.Math:
1156   #
1157   for local source in [ glob math/high_prec/*.cpp ]
1158   {
1159      result += [ run $(source)
1160            /boost/test//boost_unit_test_framework/<link>static
1161            /boost/regex//boost_regex/<link>static
1162           : # command line
1163           : # input files
1164           : # requirements
1165            <optimization>speed
1166            <define>BOOST_ALL_NO_LIB
1167            <define>BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
1168            <toolset>msvc:<cxxflags>-bigobj
1169            [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr :  ]
1170            <include>../../math/include_private
1171            release ] ;
1172   }
1173   return $(result) ;
1174}
1175
1176test-suite specfun : [ get_specfun_tests ] ;
1177explicit specfun ;
1178
1179rule get_compile_fail_tests
1180{
1181
1182   local compile_fail_tests ;
1183
1184   for local source in [ glob compile_fail/*.cpp ]
1185   {
1186      compile_fail_tests +=  $(source:B) ;
1187      compile-fail $(source)
1188      :
1189         [ check-target-builds ../config//has_gmp : <define>TEST_GMP <debug-symbols>off : ]
1190         [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <debug-symbols>off : ]
1191      ;
1192   }
1193   return $(compile_fail_tests) ;
1194}
1195
1196test-suite compile_fail :  [ get_compile_fail_tests ] ;
1197
1198rule get_concept_checks
1199{
1200   local result ;
1201   for local source in [ glob concepts/*.cpp ]
1202   {
1203
1204      result += [ compile $(source)  mpfr
1205              : # requirements
1206              <define>TEST_MPFR_50
1207               [ check-target-builds ../config//has_mpfr : : <build>no ]
1208               <debug-symbols>off
1209               <optimization>space
1210              : $(source:B)_mpfr_50 ] ;
1211
1212      result += [ compile $(source)  mpfr
1213              : # requirements
1214              <define>TEST_MPFR_6
1215               [ check-target-builds ../config//has_mpfr : : <build>no ]
1216               <debug-symbols>off
1217               <optimization>space
1218              : $(source:B)_mpfr_6 ] ;
1219
1220      result += [ compile $(source)  mpfr
1221              : # requirements
1222              <define>TEST_MPFR_15
1223               [ check-target-builds ../config//has_mpfr : : <build>no ]
1224               <debug-symbols>off
1225               <optimization>space
1226              : $(source:B)_mpfr_15 ] ;
1227
1228      result += [ compile $(source)  mpfr
1229              : # requirements
1230              <define>TEST_MPFR_17
1231               [ check-target-builds ../config//has_mpfr : : <build>no ]
1232               <debug-symbols>off
1233               <optimization>space
1234              : $(source:B)_mpfr_17 ] ;
1235
1236      result += [ compile $(source)  mpfr
1237              : # requirements
1238              <define>TEST_MPFR_30
1239               [ check-target-builds ../config//has_mpfr : : <build>no ]
1240               <debug-symbols>off
1241               <optimization>space
1242              : $(source:B)_mpfr_30 ] ;
1243
1244      result += [ compile $(source)  gmp
1245              : # requirements
1246              <define>TEST_MPF_50
1247               [ check-target-builds ../config//has_gmp : : <build>no ]
1248               <debug-symbols>off
1249               <optimization>space
1250              : $(source:B)_mpf50 ] ;
1251
1252      result += [ compile $(source)
1253              : # requirements
1254              <define>TEST_CPP_DEC_FLOAT
1255               <debug-symbols>off
1256               <optimization>space
1257              : $(source:B)_cpp_dec_float ] ;
1258
1259      result += [ compile $(source)
1260              : # requirements
1261              <define>TEST_CPP_BIN_FLOAT
1262               <debug-symbols>off
1263               <optimization>space
1264              : $(source:B)_cpp_bin_float ] ;
1265
1266      result += [ compile $(source)
1267              : # requirements
1268              <define>TEST_CPP_DEC_FLOAT_NO_ET
1269               <debug-symbols>off
1270               <optimization>space
1271              : $(source:B)_cpp_dec_float_no_et ] ;
1272
1273      result += [ compile $(source)
1274              : # requirements
1275              <define>TEST_BACKEND
1276               <debug-symbols>off
1277               <optimization>space
1278              : $(source:B)_backend_concept ] ;
1279
1280      result += [ compile $(source)
1281              : # requirements
1282              <define>TEST_LOGGED_ADAPTER
1283               <debug-symbols>off
1284               <optimization>space
1285              : $(source:B)_logged_adaptor ] ;
1286   }
1287   return $(result) ;
1288}
1289
1290test-suite concepts : [ get_concept_checks ] ;
1291
1292test-suite examples : ../example//examples ;
1293test-suite performance : ../performance//performance ;
1294