Added MACS source
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / specfunc / test_dilog.c
1 /* specfunc/test_dilog.c
2  * 
3  * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman
4  * 
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.
9  * 
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.
14  * 
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.
18  */
19
20 /* Author:  G. Jungman */
21
22 #include <config.h>
23 #include <gsl/gsl_test.h>
24 #include <gsl/gsl_sf.h>
25 #include "test_sf.h"
26
27
28 int test_dilog(void)
29 {
30   gsl_sf_result r;
31   gsl_sf_result r1, r2;
32   int s = 0;
33
34   /* real dilog */
35
36   TEST_SF(s, gsl_sf_dilog_e, (-3.0, &r),   -1.9393754207667089531,     TEST_TOL0, GSL_SUCCESS);
37   TEST_SF(s, gsl_sf_dilog_e, (-0.5, &r),   -0.4484142069236462024,     TEST_TOL0, GSL_SUCCESS);
38   TEST_SF(s, gsl_sf_dilog_e, (-0.001, &r), -0.0009997501110486510834,  TEST_TOL0, GSL_SUCCESS);
39   TEST_SF(s, gsl_sf_dilog_e, (0.1, &r),     0.1026177910993911,        TEST_TOL0, GSL_SUCCESS);
40   TEST_SF(s, gsl_sf_dilog_e, (0.7, &r),     0.8893776242860387386,     TEST_TOL0, GSL_SUCCESS);
41   TEST_SF(s, gsl_sf_dilog_e, (1.0, &r),     1.6449340668482260,        TEST_TOL0, GSL_SUCCESS);
42   TEST_SF(s, gsl_sf_dilog_e, (1.5, &r),     2.3743952702724802007,     TEST_TOL0, GSL_SUCCESS);
43   TEST_SF(s, gsl_sf_dilog_e, (2.0, &r),     2.4674011002723397,        TEST_TOL0, GSL_SUCCESS);
44   TEST_SF(s, gsl_sf_dilog_e, ( 5.0, &r),    1.7837191612666306277,     TEST_TOL0, GSL_SUCCESS);
45   TEST_SF(s, gsl_sf_dilog_e, ( 11.0, &r),   0.3218540439999117111,     TEST_TOL1, GSL_SUCCESS);
46   TEST_SF(s, gsl_sf_dilog_e, (12.59, &r),   0.0010060918167266208634,  TEST_TOL3, GSL_SUCCESS);
47   TEST_SF(s, gsl_sf_dilog_e, (12.595, &r),  0.00003314826006436236810, TEST_TOL5, GSL_SUCCESS);
48   TEST_SF(s, gsl_sf_dilog_e, (13.0, &r),   -0.07806971248458575855,    TEST_TOL2, GSL_SUCCESS);
49   TEST_SF(s, gsl_sf_dilog_e, (20.0, &r),   -1.2479770861745251168,     TEST_TOL2, GSL_SUCCESS);
50   TEST_SF(s, gsl_sf_dilog_e, (150.0, &r),  -9.270042702348657270,      TEST_TOL0, GSL_SUCCESS);
51   TEST_SF(s, gsl_sf_dilog_e, (1100.0, &r), -21.232504073931749553,     TEST_TOL0, GSL_SUCCESS);
52
53
54   /* complex dilog */
55
56   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99999, M_PI/2.0, &r1, &r2),
57             -0.20561329262779687646, TEST_TOL0,
58              0.91595774018131512060, TEST_TOL0,
59              GSL_SUCCESS);
60
61   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.991, M_PI/2.0, &r1, &r2),
62             -0.20250384721077806127, TEST_TOL0,
63              0.90888544355846447810, TEST_TOL0,
64              GSL_SUCCESS);
65
66   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.98, M_PI/2.0, &r1, &r2),
67             -0.19871638377785918403, TEST_TOL2,
68              0.90020045882981847610, TEST_TOL2,
69              GSL_SUCCESS);
70
71   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.98, -M_PI/2.0, &r1, &r2),
72             -0.19871638377785918403, TEST_TOL2,
73             -0.90020045882981847610, TEST_TOL2,
74              GSL_SUCCESS);
75
76   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.95, M_PI/2.0, &r1, &r2),
77             -0.18848636456893572091, TEST_TOL1,
78              0.87633754133420277830, TEST_TOL1,
79              GSL_SUCCESS);
80
81   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.8, M_PI/2.0, &r1, &r2),
82             -0.13980800855429037810, TEST_TOL0,
83              0.75310609092419884460, TEST_TOL0,
84              GSL_SUCCESS);
85
86   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.8, -M_PI/2.0, &r1, &r2),
87             -0.13980800855429037810, TEST_TOL0,
88             -0.75310609092419884460, TEST_TOL0,
89              GSL_SUCCESS);
90
91   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.5, M_PI/2.0, &r1, &r2),
92             -0.05897507442156586346, TEST_TOL1,
93              0.48722235829452235710, TEST_TOL1,
94              GSL_SUCCESS);
95
96   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.5, -M_PI/2.0, &r1, &r2),
97             -0.05897507442156586346, TEST_TOL1,
98             -0.48722235829452235710, TEST_TOL1,
99              GSL_SUCCESS);
100
101   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.01, M_PI/2.0, &r1, &r2),
102             -0.000024999375027776215378, TEST_TOL3,
103              0.009999888892888684820, TEST_TOL3,
104              GSL_SUCCESS);
105
106   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.01, -M_PI/2.0, &r1, &r2),
107             -0.000024999375027776215378, TEST_TOL3,
108             -0.009999888892888684820, TEST_TOL3,
109              GSL_SUCCESS);
110
111
112   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, M_PI/4.0, &r1, &r2),
113             0.56273366219795547757, TEST_TOL3,
114             0.97009284079274560384, TEST_TOL3,
115              GSL_SUCCESS);
116
117   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, -M_PI/4.0, &r1, &r2),
118             0.56273366219795547757, TEST_TOL3,
119            -0.97009284079274560384, TEST_TOL3,
120              GSL_SUCCESS);
121
122   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, 3.0*M_PI/4.0, &r1, &r2),
123             -0.66210902664245926235, TEST_TOL1,
124              0.51995305609998319025, TEST_TOL1,
125             GSL_SUCCESS);
126
127   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, 5.0*M_PI/4.0, &r1, &r2),
128             -0.66210902664245926235, TEST_TOL1,
129             -0.51995305609998319025, TEST_TOL1,
130              GSL_SUCCESS);
131
132   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, 3.0*M_PI/2.0, &r1, &r2),
133             -0.20215874509123277909, TEST_TOL1,
134             -0.90809733095648731408, TEST_TOL1,
135              GSL_SUCCESS);
136
137   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.25, 3.0*M_PI/2.0, &r1, &r2),
138             -0.01538741178141053563, TEST_TOL1,
139             -0.24830175098230686908, TEST_TOL1,
140              GSL_SUCCESS);
141
142   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.25, 15.0/8.0*M_PI, &r1, &r2),
143             0.24266162342377302235, TEST_TOL1,
144            -0.10860883369274445067, TEST_TOL1,
145              GSL_SUCCESS);
146
147
148   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, M_PI/8.0, &r1, &r2),
149             1.0571539648820244720, TEST_TOL0,
150             0.7469145254610851318, TEST_TOL0,
151             GSL_SUCCESS);
152
153   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, M_PI/64.0, &r1, &r2),
154             1.5381800285902999666, TEST_TOL0,
155             0.1825271634987756651, TEST_TOL0,
156             GSL_SUCCESS);
157
158   TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, -M_PI/8.0, &r1, &r2),
159             1.05715396488202447202, TEST_TOL1,
160            -0.74691452546108513176, TEST_TOL1,
161              GSL_SUCCESS);
162
163
164   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.00001, M_PI/2.0, &r1, &r2),
165             -0.20562022409960237363, TEST_TOL1,
166              0.91597344814458309320, TEST_TOL1,
167              GSL_SUCCESS);
168
169   TEST_SF_2(s, gsl_sf_complex_dilog_e, (10.0, M_PI/2.0, &r1, &r2),
170             -3.0596887943287347304, TEST_TOL0,
171              3.7167814930680685900, TEST_TOL0,
172              GSL_SUCCESS);
173
174   TEST_SF_2(s, gsl_sf_complex_dilog_e, (100.0, M_PI/2.0, &r1, &r2),
175             -11.015004738293824854, TEST_TOL0,
176              7.2437843013083534970, TEST_TOL0,
177              GSL_SUCCESS);
178
179
180   /** tests brought up by Jim McElwaine bug report */
181
182   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -M_PI/2.0, &r1, &r2),
183             -0.24099184177382733037, TEST_TOL1,
184             -0.99309132538137822631, TEST_TOL1,
185              GSL_SUCCESS);
186
187   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, 3.0*M_PI/2.0, &r1, &r2),
188             -0.24099184177382733037, TEST_TOL1,
189             -0.99309132538137822631, TEST_TOL1,
190              GSL_SUCCESS);
191
192   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -3.0*M_PI/2.0, &r1, &r2),
193             -0.24099184177382733037, TEST_TOL1,
194              0.99309132538137822631, TEST_TOL1,
195              GSL_SUCCESS);
196
197   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -M_PI - 0.25*M_PI, &r1, &r2),
198             -0.72908565537087935118, TEST_TOL1,
199              0.56225783937234862649, TEST_TOL1,
200              GSL_SUCCESS);
201
202   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, M_PI + 0.25*M_PI, &r1, &r2),
203             -0.72908565537087935118, TEST_TOL1,
204             -0.56225783937234862649, TEST_TOL1,
205              GSL_SUCCESS);
206
207   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -M_PI/128.0, &r1, &r2),
208             1.8881719454909716580, TEST_TOL1,
209            -0.3556738764969238976, TEST_TOL1,
210             GSL_SUCCESS);
211
212   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1,  M_PI/128.0, &r1, &r2),
213             1.8881719454909716580, TEST_TOL1,
214             0.3556738764969238976, TEST_TOL1,
215             GSL_SUCCESS);
216
217   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5,  M_PI/8.0, &r1, &r2),
218             1.3498525763442498343, TEST_TOL1,
219             1.4976532712229749493, TEST_TOL1,
220             GSL_SUCCESS);
221
222   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5, -M_PI/8.0, &r1, &r2),
223             1.3498525763442498343, TEST_TOL1,
224            -1.4976532712229749493, TEST_TOL1,
225             GSL_SUCCESS);
226
227   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5, 2.0*M_PI + M_PI/8.0, &r1, &r2),
228             1.3498525763442498343, TEST_TOL1,
229             1.4976532712229749493, TEST_TOL1,
230             GSL_SUCCESS);
231
232   TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5, 2.0*M_PI - M_PI/8.0, &r1, &r2),
233             1.3498525763442498343, TEST_TOL1,
234            -1.4976532712229749493, TEST_TOL1,
235             GSL_SUCCESS);
236
237
238   /* tests of the (x,y) function, which is now the underlying implementation */
239
240   TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.0,  0.5, &r1, &r2),
241             -0.05897507442156586346, TEST_TOL1,
242              0.48722235829452235710, TEST_TOL1,
243              GSL_SUCCESS);
244
245   TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.0, -0.5, &r1, &r2),
246             -0.05897507442156586346, TEST_TOL1,
247             -0.48722235829452235710, TEST_TOL1,
248              GSL_SUCCESS);
249
250   TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.91464073718617389108,  0.37885659804143889673, &r1, &r2),
251             1.0571539648820244720, TEST_TOL0,
252             0.7469145254610851318, TEST_TOL0,
253             GSL_SUCCESS);
254
255   TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.91464073718617389108, -0.37885659804143889673, &r1, &r2),
256             1.05715396488202447202, TEST_TOL1,
257            -0.74691452546108513176, TEST_TOL1,
258             GSL_SUCCESS);
259
260   TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (-1.5, 0.0, &r1, &r2),
261            -1.1473806603755707541, TEST_TOL1,
262             0.0, TEST_TOL1,
263             GSL_SUCCESS);
264
265   TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.5, 0.0, &r1, &r2),
266             0.58224052646501250590, TEST_TOL1,
267             0.0, TEST_TOL1,
268             GSL_SUCCESS);
269
270   TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (1.5, 0.0, &r1, &r2),
271             2.3743952702724802007, TEST_TOL1,
272            -1.2738062049196005309, TEST_TOL1,
273             GSL_SUCCESS);
274
275
276   /* small set of spence tests, mostly to check the value on the cut */
277
278   TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (1.5, 0.0, &r1, &r2),
279            -0.44841420692364620244, TEST_TOL1,
280             0.0, TEST_TOL1,
281             GSL_SUCCESS);
282
283   TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (0.5, 0.0, &r1, &r2),
284             0.58224052646501250590, TEST_TOL1,
285             0.0, TEST_TOL1,
286             GSL_SUCCESS);
287
288   TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (0.0, 0.0, &r1, &r2),
289             1.6449340668482264365, TEST_TOL1,
290             0.0, TEST_TOL1,
291             GSL_SUCCESS);
292
293   TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (-0.5, 0.0, &r1, &r2),
294             2.3743952702724802007, TEST_TOL1,
295            -1.2738062049196005309, TEST_TOL1,
296             GSL_SUCCESS);
297
298   TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (-0.5, 1.0/1024.0, &r1, &r2),
299             2.3723507455234125018, TEST_TOL1,
300            -1.2742581376517839070, TEST_TOL1,
301             GSL_SUCCESS);
302
303   TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (-0.5, -1.0/1024.0, &r1, &r2),
304             2.3723507455234125018, TEST_TOL1,
305             1.2742581376517839070, TEST_TOL1,
306             GSL_SUCCESS);
307
308
309   return s;
310 }