Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / multiprecision / test / math / test_erf.cpp
1 ///////////////////////////////////////////////////////////////
2 //  Copyright 2011 John Maddock. Distributed under the Boost
3 //  Software License, Version 1.0. (See accompanying file
4 //  LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
5
6 #include "setup.hpp"
7 #include "table_type.hpp"
8 #define TEST_UDT
9
10 #include <boost/math/special_functions/math_fwd.hpp>
11 #include "libs/math/test/test_erf.hpp"
12
13 void expected_results()
14 {
15    //
16    // Define the max and mean errors expected for
17    // various compilers and platforms.
18    //
19    add_expected_result(
20        ".*",                 // compiler
21        ".*",                 // stdlib
22        ".*",                 // platform
23        ".*gmp_float<18>.*",  // test type(s)
24        "Erf Function:.*",    // test data group
25        "erfc?", 2200, 1500); // test function
26    add_expected_result(
27        ".*",                     // compiler
28        ".*",                     // stdlib
29        ".*",                     // platform
30        ".*gmp_float<18>.*",      // test type(s)
31        "Inverse Erf.*",          // test data group
32        "erfc?_inv", 2200, 1500); // test function
33 #ifdef BOOST_INTEL
34    add_expected_result(
35        ".*",                  // compiler
36        ".*",                  // stdlib
37        ".*",                  // platform
38        "float128",            // test type(s)
39        "Erf Function:.*",     // test data group
40        "erfc?", 15000, 1000); // test function
41 #endif
42    add_expected_result(
43        ".*",                 // compiler
44        ".*",                 // stdlib
45        ".*",                 // platform
46        ".*cpp_bin_float.*",  // test type(s)
47        "Erf Function:.*",    // test data group
48        "erfc?", 3000, 1000); // test function
49    add_expected_result(
50        ".*",                        // compiler
51        ".*",                        // stdlib
52        ".*",                        // platform
53        ".*mpfr_float_backend<0>.*", // test type(s)
54        ".*",                        // test data group
55        ".*", 600, 100);             // test function
56    add_expected_result(
57        ".*",               // compiler
58        ".*",               // stdlib
59        ".*",               // platform
60        ".*",               // test type(s)
61        "Erf Function:.*",  // test data group
62        "erfc?", 300, 200); // test function
63    add_expected_result(
64        ".*",                 // compiler
65        ".*",                 // stdlib
66        ".*",                 // platform
67        ".*",                 // test type(s)
68        "Inverse Erf.*",      // test data group
69        "erfc?_inv", 60, 20); // test function
70    //
71    // Finish off by printing out the compiler/stdlib/platform names,
72    // we do this to make it easier to mark up expected error rates.
73    //
74    std::cout << "Tests run with " << BOOST_COMPILER << ", "
75              << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
76 }
77
78 template <class T>
79 void test(T t, const char* p)
80 {
81    test_erf(t, p);
82 }
83
84 BOOST_AUTO_TEST_CASE(test_main)
85 {
86    using namespace boost::multiprecision;
87    expected_results();
88    //
89    // Test at:
90    // 18 decimal digits: tests 80-bit long double approximations
91    // 30 decimal digits: tests 128-bit long double approximations
92    // 35 decimal digits: tests arbitrary precision code
93    //
94    ALL_TESTS
95 }