3 * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or (at
8 * your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 /* Author: G. Jungman */
25 #include <gsl/gsl_math.h>
26 #include <gsl/gsl_errno.h>
27 #include <gsl/gsl_machine.h>
28 #include <gsl/gsl_sf_result.h>
30 double test_sf_frac_diff(double x1, double x2);
31 int test_sf_check_result(char * message_buff, gsl_sf_result r, double val, double tol);
32 int test_sf_check_val(char * message_buff, double rval, double val, double tol);
33 int test_sf_check_return(char * message_buff, int val_return, int expected_return);
34 int test_sf_check_result_relax(char * message_buff, gsl_sf_result r, double val, double tol);
36 /* Include an overall test factor to allow for differences between
37 compilers, otherwise there are too many bug reports on the released
38 versions. Turn this value down to 1.0 for development purposes */
43 #define TEST_FACTOR 100.0
45 #define TEST_FACTOR 1.0
51 #define TEST_SIGMA 1.5
53 #define TEST_SIGMA 1.0
57 #define TEST_TOL0 (2.0*GSL_DBL_EPSILON)
58 #define TEST_TOL1 (16.0*GSL_DBL_EPSILON)
59 #define TEST_TOL2 (256.0*GSL_DBL_EPSILON)
60 #define TEST_TOL3 (2048.0*GSL_DBL_EPSILON)
61 #define TEST_TOL4 (16384.0*GSL_DBL_EPSILON)
62 #define TEST_TOL5 (131072.0*GSL_DBL_EPSILON)
63 #define TEST_TOL6 (1048576.0*GSL_DBL_EPSILON)
64 #define TEST_SQRT_TOL0 (2.0*GSL_SQRT_DBL_EPSILON)
65 #define TEST_SNGL (1.0e-06)
67 #define TEST_SF_INCONS 1
68 #define TEST_SF_ERRNEG 2
69 #define TEST_SF_TOLBAD 4
70 #define TEST_SF_RETBAD 8
71 #define TEST_SF_ERRBAD 16
72 #define TEST_SF_ERRBIG 32
73 #define TEST_SF_EXPBAD 64
75 int test_sf (gsl_sf_result r, double val_in, double tol, int status, int expect_return, const char * desc);
76 int test_sf_e10 (gsl_sf_result_e10 r, double val_in, int e10_in, double tol, int status, int expect_return, const char * desc);
77 int test_sf_val (double val, double val_in, double tol, const char * desc);
78 int test_sf_rlx (gsl_sf_result r, double val_in, double tol, int status, int expect_return, const char * desc);
79 int test_sf_2 (gsl_sf_result r1, double val1, double tol1, gsl_sf_result r2, double val2, double tol2, int status, int expect_return, const char * desc);
80 int test_sf_sgn (gsl_sf_result r, double sgn, double val_in, double tol, double expect_sgn, int status, int expect_return, const char * desc);
82 #define TEST_SF(stat, func, args, val_in, tol, expect_return) { int status = func args; stat += test_sf(r, val_in, tol, status, expect_return, #func #args); }
84 #define TEST_SF_E10(stat, func, args, val_in, e10_in, tol, expect_return) { int status = func args; stat += test_sf_e10(re, val_in, e10_in, tol, status, expect_return, #func #args); }
86 #define TEST_SF_VAL(stat, func, args, val_in, tol) { double val = func args; stat += test_sf_val(val, val_in, tol, #func #args); }
88 #define TEST_SF_RLX(stat, func, args, val_in, tol, expect_return) { int status = func args; stat += test_sf_rlx(r, val_in, tol, status, expect_return, #func #args); }
90 #define TEST_SF_2(stat, func, args, val1, tol1, val2, tol2, expect_return) { int status = func args; stat += test_sf_2(r1, val1, tol1, r2, val2, tol2, status, expect_return, #func #args); }
92 #define TEST_SF_SGN(stat, func, args, val_in, tol, expect_sgn, expect_return) { int status = func args; stat += test_sf_sgn(r, sgn, val_in, tol, expect_sgn, status, expect_return, #func #args); }
94 #define TEST_SF_THETA(stat, func, args, val_in, tol) { int status; theta=args; status = func (&theta); stat += test_sf_val(theta, val_in, tol, #func #args); }
97 int test_bessel(void);
98 int test_coulomb(void);
100 int test_gamma(void);
101 int test_mathieu(void);
102 int test_hyperg(void);
103 int test_legendre(void);
106 #endif /* !TEST_SF_H */