Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / multiprecision / test / math / test_gamma.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_gamma.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        ".*",                  // test data group
25        "tgamma", 4000, 2500); // test function
26    add_expected_result(
27        ".*",                        // compiler
28        ".*",                        // stdlib
29        ".*",                        // platform
30        ".*mpfr_float_backend<0>.*", // test type(s)
31        "factorials",                // test data group
32        "tgamma", 400, 100);         // test function
33    add_expected_result(
34        ".*",               // compiler
35        ".*",               // stdlib
36        ".*",               // platform
37        ".*",               // test type(s)
38        "factorials",       // test data group
39        "tgamma", 170, 70); // test function
40    add_expected_result(
41        ".*",                // compiler
42        ".*",                // stdlib
43        ".*",                // platform
44        ".*",                // test type(s)
45        "factorials",        // test data group
46        "lgamma", 750, 100); // test function
47 #ifdef BOOST_INTEL
48    add_expected_result(
49        ".*",                   // compiler
50        ".*",                   // stdlib
51        ".*",                   // platform
52        "float128",             // test type(s)
53        ".*near -.*",           // test data group
54        ".*", 150000L, 30000L); // test function
55 #endif
56    add_expected_result(
57        ".*",                // compiler
58        ".*",                // stdlib
59        ".*",                // platform
60        ".*",                // test type(s)
61        "near.*",            // test data group
62        "tgamma", 250, 120); // test function
63    add_expected_result(
64        ".*",                 // compiler
65        ".*",                 // stdlib
66        ".*",                 // platform
67        ".*",                 // test type(s)
68        "near.*",             // test data group
69        "lgamma", 1400, 250); // test function
70    add_expected_result(
71        ".*",                     // compiler
72        ".*",                     // stdlib
73        ".*",                     // platform
74        ".*",                     // test type(s)
75        "tgamma1pm1.*",           // test data group
76        "tgamma1pm1", 1500, 400); // test function
77    //
78    // Finish off by printing out the compiler/stdlib/platform names,
79    // we do this to make it easier to mark up expected error rates.
80    //
81    std::cout << "Tests run with " << BOOST_COMPILER << ", "
82              << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
83 }
84
85 template <class T>
86 void test(T t, const char* p)
87 {
88    test_gamma(t, p);
89 }
90
91 BOOST_AUTO_TEST_CASE(test_main)
92 {
93    using namespace boost::multiprecision;
94    expected_results();
95    //
96    // Test at:
97    // 18 decimal digits: tests 80-bit long double approximations
98    // 30 decimal digits: tests 128-bit long double approximations
99    // 35 decimal digits: tests arbitrary precision code
100    //
101    ALL_TESTS
102 }