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