xref: /netbsd-src/external/lgpl3/mpfr/dist/tests/thyperbolic.c (revision a5847cc334d9a7029f6352b847e9e8d71a0f9e0c)
1 /* Test file for hyperbolic function : mpfr_cosh, mpfr_sinh, mpfr_tanh, mpfr_acosh, mpfr_asinh, mpfr_atanh.
2 
3 Copyright 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4 Contributed by the Arenaire and Cacao projects, INRIA.
5 
6 This file is part of the GNU MPFR Library.
7 
8 The GNU MPFR Library is free software; you can redistribute it and/or modify
9 it under the terms of the GNU Lesser General Public License as published
10 by
11 the Free Software Foundation; either version 3 of the License, or (at youroption) any later version.
12 
13 The GNU MPFR Library is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
15 License for more details.
16 
17 You should have received a copy of the GNU Lesser General Public License
18 along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
19 http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
20 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
21 
22 #include <stdlib.h>
23 #include <stdio.h>
24 
25 #include "mpfr-test.h"
26 
27 static int
28 check_NAN (void)
29 {
30   mpfr_t t, ch,sh,th,ach,ash,ath;
31   int tester;
32   int fail = 0;
33 
34   mpfr_init2(t,200);
35   mpfr_init2(ch,200);
36   mpfr_init2(sh,200);
37   mpfr_init2(th,200);
38   mpfr_init2(ach,200);
39   mpfr_init2(ash,200);
40   mpfr_init2(ath,200);
41 
42   MPFR_SET_NAN(t);
43 
44   /******cosh********/
45 
46   tester=mpfr_cosh(ch,t,MPFR_RNDD);
47   if (!MPFR_IS_NAN(ch) || tester!=0)
48     {
49       printf("cosh NAN \n");
50       fail = 1;
51       goto clean_up;
52     }
53 
54   /******sinh********/
55 
56   tester=mpfr_sinh(sh,t,MPFR_RNDD);
57   if (!MPFR_IS_NAN(sh) || tester!=0)
58     {
59       printf("sinh NAN \n");
60       fail = 1;
61       goto clean_up;
62     }
63 
64   /******tanh********/
65 
66   tester=mpfr_tanh(th,t,MPFR_RNDD);
67   if (!MPFR_IS_NAN(th) || tester!=0)
68     {
69       printf("tanh NAN \n");
70       fail = 1;
71       goto clean_up;
72     }
73 
74   /******acosh********/
75 
76   tester=mpfr_acosh(ach,t,MPFR_RNDD);
77   if (!MPFR_IS_NAN(ach) || tester!=0)
78     {
79       printf("acosh NAN \n");
80       fail = 1;
81       goto clean_up;
82     }
83 
84   /******asinh********/
85 
86   tester=mpfr_asinh(ash,t,MPFR_RNDD);
87   if (!MPFR_IS_NAN(ash) || tester!=0)
88     {
89       printf("asinh NAN \n");
90       fail = 1;
91       goto clean_up;
92     }
93 
94   /******atanh********/
95 
96   tester=mpfr_atanh(ath,t,MPFR_RNDD);
97   if (!MPFR_IS_NAN(ath) || tester!=0)
98     {
99       printf("atanh NAN \n");
100       fail = 1;
101       goto clean_up;
102     }
103 
104  clean_up:
105   mpfr_clear(t);
106   mpfr_clear(ch);
107   mpfr_clear(sh);
108   mpfr_clear(th);
109   mpfr_clear(ach);
110   mpfr_clear(ash);
111   mpfr_clear(ath);
112 
113   return fail;
114 }
115 
116 static int
117 check_zero (void)
118 {
119   mpfr_t t, ch,sh,th,ach,ash,ath;
120   int tester;
121   int fail = 0;
122 
123   mpfr_init2(t,200);
124   mpfr_init2(ch,200);
125   mpfr_init2(sh,200);
126   mpfr_init2(th,200);
127   mpfr_init2(ach,200);
128   mpfr_init2(ash,200);
129   mpfr_init2(ath,200);
130 
131   mpfr_set_ui(t,0,MPFR_RNDD);
132 
133   /******cosh********/
134 
135   tester = mpfr_cosh (ch, t, MPFR_RNDD);
136   if (mpfr_cmp_ui(ch, 1) || tester)
137     {
138       printf("cosh(0) \n");
139       fail = 1;
140       goto clean_up;
141     }
142 
143   /******sinh********/
144 
145   tester = mpfr_sinh (sh, t, MPFR_RNDD);
146   if (!MPFR_IS_ZERO(sh) || tester)
147     {
148       printf("sinh(0) \n");
149       fail = 1;
150       goto clean_up;
151     }
152 
153   /******tanh********/
154 
155   tester = mpfr_tanh (th, t, MPFR_RNDD);
156   if (!MPFR_IS_ZERO(th) || tester)
157     {
158       printf("tanh(0) \n");
159       fail = 1;
160       goto clean_up;
161     }
162 
163   /******acosh********/
164 
165   tester=mpfr_acosh(ach,t,MPFR_RNDD);
166   if (!MPFR_IS_NAN(ach) || tester)
167     {
168       printf("acosh(0) \n");
169       fail = 1;
170       goto clean_up;
171     }
172 
173   /******asinh********/
174 
175   tester=mpfr_asinh(ash,t,MPFR_RNDD);
176   if (!MPFR_IS_ZERO(ash) || tester)
177     {
178       printf("asinh(0) \n");
179       fail = 1;
180       goto clean_up;
181     }
182 
183   /******atanh********/
184 
185   tester=mpfr_atanh(ath,t,MPFR_RNDD);
186   if (!MPFR_IS_ZERO(ath) || tester)
187     {
188       printf("atanh(0) \n");
189       fail = 1;
190       goto clean_up;
191     }
192 
193  clean_up:
194   mpfr_clear(t);
195   mpfr_clear(ch);
196   mpfr_clear(sh);
197   mpfr_clear(th);
198   mpfr_clear(ach);
199   mpfr_clear(ash);
200   mpfr_clear(ath);
201 
202   return fail;
203 }
204 
205 static int
206 check_INF (void)
207 {
208   mpfr_t t, ch, sh, th, ach, ash, ath;
209   int tester;
210   int fail = 0;
211 
212   mpfr_init2 (t, 200);
213   mpfr_init2 (ch, 200);
214   mpfr_init2 (sh, 200);
215   mpfr_init2 (th, 200);
216   mpfr_init2 (ach, 200);
217   mpfr_init2 (ash, 200);
218   mpfr_init2 (ath, 200);
219 
220   MPFR_SET_INF(t);
221 
222   if(MPFR_SIGN(t)<0)
223     MPFR_CHANGE_SIGN(t);
224 
225   /******cosh********/
226 
227   tester = mpfr_cosh(ch,t,MPFR_RNDD);
228   if (!MPFR_IS_INF(ch) || MPFR_SIGN(ch) < 0 || tester!=0)
229     {
230       printf("cosh(INF) \n");
231       fail = 1;
232       goto clean_up;
233     }
234 
235   /******sinh********/
236 
237   tester=mpfr_sinh(sh,t,MPFR_RNDD);
238   if (!MPFR_IS_INF(sh) || MPFR_SIGN(sh) < 0  || tester!=0)
239     {
240       printf("sinh(INF) \n");
241       fail = 1;
242       goto clean_up;
243     }
244 
245   /******tanh********/
246 
247   tester=mpfr_tanh(th,t,MPFR_RNDD);
248   if (mpfr_cmp_ui(th,1) != 0 || tester!=0)
249     {
250       printf("tanh(INF) \n");
251       fail = 1;
252       goto clean_up;
253     }
254 
255   /******acosh********/
256 
257   tester=mpfr_acosh(ach,t,MPFR_RNDD);
258   if (!MPFR_IS_INF(ach) || MPFR_SIGN(ach) < 0  || tester!=0)
259     {
260       printf("acosh(INF) \n");
261       fail = 1;
262       goto clean_up;
263     }
264 
265   /******asinh********/
266 
267   tester=mpfr_asinh(ash,t,MPFR_RNDD);
268   if (!MPFR_IS_INF(ash) || MPFR_SIGN(ash) < 0  || tester!=0)
269     {
270       printf("asinh(INF) \n");
271       fail = 1;
272       goto clean_up;
273     }
274 
275   /******atanh********/
276 
277   tester = mpfr_atanh (ath, t, MPFR_RNDD);
278   if (!MPFR_IS_NAN(ath) || tester != 0)
279     {
280       printf("atanh(INF) \n");
281       fail = 1;
282       goto clean_up;
283     }
284 
285   MPFR_CHANGE_SIGN(t);
286 
287   /******cosh********/
288 
289   tester=mpfr_cosh(ch,t,MPFR_RNDD);
290   if (!MPFR_IS_INF(ch) || MPFR_SIGN(ch) < 0  || tester!=0)
291     {
292       printf("cosh(-INF) \n");
293       fail = 1;
294       goto clean_up;
295     }
296 
297   /******sinh********/
298 
299   tester=mpfr_sinh(sh,t,MPFR_RNDD);
300   if (!MPFR_IS_INF(sh)  || MPFR_SIGN(sh) > 0 || tester!=0)
301     {
302       printf("sinh(-INF) \n");
303       fail = 1;
304       goto clean_up;
305     }
306 
307   /******tanh********/
308 
309   tester=mpfr_tanh(th,t,MPFR_RNDD);
310   if (!mpfr_cmp_ui(th,-1) || tester!=0)
311     {
312       printf("tanh(-INF) \n");
313       fail = 1;
314       goto clean_up;
315     }
316 
317   /******acosh********/
318 
319   tester=mpfr_acosh(ach,t,MPFR_RNDD);
320   if (!MPFR_IS_NAN(ach) || tester!=0)
321     {
322       printf("acosh(-INF) \n");
323       fail = 1;
324       goto clean_up;
325     }
326 
327   /******asinh********/
328 
329   tester=mpfr_asinh(ash,t,MPFR_RNDD);
330   if (!MPFR_IS_INF(ash) || MPFR_SIGN(ash) > 0  || tester!=0)
331     {
332       printf("asinh(-INF) \n");
333       fail = 1;
334       goto clean_up;
335     }
336 
337   /******atanh********/
338 
339   tester = mpfr_atanh (ath, t, MPFR_RNDD);
340   if (!MPFR_IS_NAN(ath) || tester != 0)
341     {
342       printf("atanh(-INF) \n");
343       fail = 1;
344       goto clean_up;
345     }
346 
347  clean_up:
348   mpfr_clear(t);
349   mpfr_clear(ch);
350   mpfr_clear(sh);
351   mpfr_clear(th);
352   mpfr_clear(ach);
353   mpfr_clear(ash);
354   mpfr_clear(ath);
355 
356   return fail;
357 }
358 
359 int
360 main(void)
361 {
362   tests_start_mpfr ();
363 
364   if (check_zero ())
365     {
366       printf ("Error in evaluation at 0\n");
367       exit (1);
368     }
369 
370   if (check_INF ())
371     {
372       printf ("Error in evaluation of INF\n");
373       exit (1);
374     }
375 
376   if (check_NAN ())
377     {
378       printf ("Error in evaluation of NAN\n");
379       exit (1);
380     }
381 
382   tests_end_mpfr ();
383   return 0;
384 }
385