1/* Test file for hyperbolic function : mpfr_cosh, mpfr_sinh, mpfr_tanh, mpfr_acosh, mpfr_asinh, mpfr_atanh. 2 3Copyright 2001-2004, 2006-2023 Free Software Foundation, Inc. 4Contributed by the AriC and Caramba projects, INRIA. 5 6This file is part of the GNU MPFR Library. 7 8The GNU MPFR Library is free software; you can redistribute it and/or modify 9it under the terms of the GNU Lesser General Public License as published by 10the Free Software Foundation; either version 3 of the License, or (at your 11option) any later version. 12 13The GNU MPFR Library is distributed in the hope that it will be useful, but 14WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 15or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 16License for more details. 17 18You should have received a copy of the GNU Lesser General Public License 19along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see 20https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc., 2151 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ 22 23#include "mpfr-test.h" 24 25static int 26check_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 114static int 115check_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 203static int 204check_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 357int 358main(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