188794Sjake/* Test file for in-place operations. 288794Sjake 388794SjakeCopyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 488794SjakeContributed by the Arenaire and Cacao projects, INRIA. 588794Sjake 688794SjakeThis file is part of the GNU MPFR Library. 788794Sjake 888794SjakeThe GNU MPFR Library is free software; you can redistribute it and/or modify 988794Sjakeit under the terms of the GNU Lesser General Public License as published by 1088794Sjakethe Free Software Foundation; either version 3 of the License, or (at your 1188794Sjakeoption) any later version. 1288794Sjake 1388794SjakeThe GNU MPFR Library is distributed in the hope that it will be useful, but 1488794SjakeWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 1588794Sjakeor FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 1688794SjakeLicense for more details. 1788794Sjake 1888794SjakeYou should have received a copy of the GNU Lesser General Public License 1988794Sjakealong with the GNU MPFR Library; see the file COPYING.LESSER. If not, see 2088794Sjakehttp://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc., 2188794Sjake51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ 2288794Sjake 2388794Sjake#include <stdio.h> 2488794Sjake#include <stdlib.h> 2588794Sjake 2688794Sjake#include "mpfr-test.h" 2799116Sobrien 2899116Sobrien#define DISP(s, t) {printf(s); mpfr_out_str(stdout, 2, 0, t, MPFR_RNDN); } 2988794Sjake#define DISP2(s,t) {DISP(s,t); putchar('\n');} 3088794Sjake 3188794Sjake#define SPECIAL_MAX 12 3288794Sjake 3388794Sjakestatic void 3488794Sjakeset_special (mpfr_ptr x, unsigned int select) 3591159Sjake{ 3688794Sjake MPFR_ASSERTN (select < SPECIAL_MAX); 3788794Sjake switch (select) 3888794Sjake { 3988794Sjake case 0: 4088794Sjake MPFR_SET_NAN (x); 4191159Sjake break; 4288794Sjake case 1: 4388794Sjake MPFR_SET_INF (x); 4488794Sjake MPFR_SET_POS (x); 4588794Sjake break; 4688794Sjake case 2: 4788794Sjake MPFR_SET_INF (x); 4891159Sjake MPFR_SET_NEG (x); 4991159Sjake break; 5088794Sjake case 3: 5188794Sjake MPFR_SET_ZERO (x); 5288794Sjake MPFR_SET_POS (x); 5388794Sjake break; 5488794Sjake case 4: 5588794Sjake MPFR_SET_ZERO (x); 5688794Sjake MPFR_SET_NEG (x); 5788794Sjake break; 5888794Sjake case 5: 5988794Sjake mpfr_set_str_binary (x, "1"); 6088794Sjake break; 6188794Sjake case 6: 6288794Sjake mpfr_set_str_binary (x, "-1"); 6388794Sjake break; 6488794Sjake case 7: 6588794Sjake mpfr_set_str_binary (x, "1e-1"); 6688794Sjake break; 6788794Sjake case 8: 6888794Sjake mpfr_set_str_binary (x, "1e+1"); 6988794Sjake break; 7092049Stmm case 9: 7192049Stmm mpfr_const_pi (x, MPFR_RNDN); 7288794Sjake break; 7388794Sjake case 10: 7488794Sjake mpfr_const_pi (x, MPFR_RNDN); 7592049Stmm MPFR_SET_EXP (x, MPFR_GET_EXP (x)-1); 7692049Stmm break; 7788794Sjake default: 7888794Sjake mpfr_urandomb (x, RANDS); 7988794Sjake break; 8088794Sjake } 8188794Sjake} 8288794Sjake/* same than mpfr_cmp, but returns 0 for both NaN's */ 8388794Sjakestatic int 8488794Sjakempfr_compare (mpfr_srcptr a, mpfr_srcptr b) 8588794Sjake{ 8688794Sjake return (MPFR_IS_NAN(a)) ? !MPFR_IS_NAN(b) : 8788794Sjake (MPFR_IS_NAN(b) || mpfr_cmp(a, b)); 8888794Sjake} 8988794Sjake 9088794Sjakestatic void 9188794Sjaketest3 (int (*testfunc)(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t), 9288794Sjake char *foo, mpfr_prec_t prec, mpfr_rnd_t rnd) 9388794Sjake{ 9491159Sjake mpfr_t ref1, ref2, ref3; 9591159Sjake mpfr_t res1; 9691159Sjake int i; 9791159Sjake 9891159Sjake#ifdef DEBUG 9991159Sjake printf("checking %s\n", foo); 10091159Sjake#endif 10191159Sjake mpfr_init2 (ref1, prec); 10288794Sjake mpfr_init2 (ref2, prec); 10388794Sjake mpfr_init2 (ref3, prec); 10488794Sjake mpfr_init2 (res1, prec); 10588794Sjake 10688794Sjake /* for each variable, consider each of the following 6 possibilities: 10788794Sjake NaN, +Infinity, -Infinity, +0, -0 or a random number */ 108 for (i=0; i < SPECIAL_MAX*SPECIAL_MAX ; i++) { 109 set_special (ref2, i%SPECIAL_MAX); 110 set_special (ref3, i/SPECIAL_MAX); 111 112 /* reference call: foo(a, b, c) */ 113 testfunc (ref1, ref2, ref3, rnd); 114 115 /* foo(a, a, c) */ 116 mpfr_set (res1, ref2, rnd); /* exact operation */ 117 testfunc (res1, res1, ref3, rnd); 118 119 if (mpfr_compare (res1, ref1)) 120 { 121 printf ("Error for %s(a, a, c) for ", foo); 122 DISP("a=",ref2); DISP2(", c=",ref3); 123 printf ("expected "); mpfr_print_binary (ref1); puts (""); 124 printf ("got "); mpfr_print_binary (res1); puts (""); 125 exit (1); 126 } 127 128 /* foo(a, b, a) */ 129 mpfr_set (res1, ref3, rnd); 130 testfunc (res1, ref2, res1, rnd); 131 if (mpfr_compare (res1, ref1)) 132 { 133 printf ("Error for %s(a, b, a) for ", foo); 134 DISP("b=",ref2); DISP2(", a=", ref3); 135 DISP("expected ", ref1); DISP2(", got ",res1); 136 exit (1); 137 } 138 139 /* foo(a, a, a) */ 140 mpfr_set (ref3, ref2, rnd); 141 testfunc (ref1, ref2, ref3, rnd); 142 mpfr_set (res1, ref2, rnd); 143 testfunc (res1, res1, res1, rnd); 144 145 if (mpfr_compare (res1, ref1)) 146 { 147 printf ("Error for %s(a, a, a) for ", foo); 148 DISP2("a=",ref2); 149 DISP("expected ", ref1); DISP2(", got", res1); 150 exit (1); 151 } 152 } 153 154 mpfr_clear (ref1); 155 mpfr_clear (ref2); 156 mpfr_clear (ref3); 157 mpfr_clear (res1); 158} 159 160static void 161test4 (int (*testfunc)(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_srcptr, 162 mpfr_rnd_t), 163 char *foo, mpfr_prec_t prec, mpfr_rnd_t rnd) 164{ 165 mpfr_t ref, op1, op2, op3; 166 mpfr_t res; 167 int i, j, k; 168 169#ifdef DEBUG 170 printf("checking %s\n", foo); 171#endif 172 mpfr_init2 (ref, prec); 173 mpfr_init2 (op1, prec); 174 mpfr_init2 (op2, prec); 175 mpfr_init2 (op3, prec); 176 mpfr_init2 (res, prec); 177 178 /* for each variable, consider each of the following 6 possibilities: 179 NaN, +Infinity, -Infinity, +0, -0 or a random number */ 180 181 for (i=0; i<SPECIAL_MAX; i++) 182 { 183 set_special (op1, i); 184 for (j=0; j<SPECIAL_MAX; j++) 185 { 186 set_special (op2, j); 187 for (k=0; k<SPECIAL_MAX; k++) 188 { 189 set_special (op3, k); 190 191 /* reference call: foo(s, a, b, c) */ 192 testfunc (ref, op1, op2, op3, rnd); 193 194 /* foo(a, a, b, c) */ 195 mpfr_set (res, op1, rnd); /* exact operation */ 196 testfunc (res, res, op2, op3, rnd); 197 198 if (mpfr_compare (res, ref)) 199 { 200 printf ("Error for %s(a, a, b, c) for ", foo); 201 DISP("a=", op1); DISP(", b=", op2); DISP2(", c=", op3); 202 DISP("expected ", ref); DISP2(", got", res); 203 exit (1); 204 } 205 206 /* foo(b, a, b, c) */ 207 mpfr_set (res, op2, rnd); 208 testfunc (res, op1, res, op3, rnd); 209 210 if (mpfr_compare (res, ref)) 211 { 212 printf ("Error for %s(a, a, b, c) for ", foo); 213 DISP("a=", op1); DISP(", b=", op2); DISP2(", c=", op3); 214 DISP("expected ", ref); DISP2(", got", res); 215 exit (1); 216 } 217 218 /* foo(c, a, b, c) */ 219 mpfr_set (res, op3, rnd); 220 testfunc (res, op1, op2, res, rnd); 221 222 if (mpfr_compare (res, ref)) 223 { 224 printf ("Error for %s(a, a, b, c) for ", foo); 225 DISP("a=", op1); DISP(", b=", op2); DISP2(", c=", op3); 226 DISP("expected ", ref); DISP2(", got", res); 227 exit (1); 228 } 229 230 /* foo(a, a, a,c) */ 231 testfunc (ref, op1, op1, op3, rnd); 232 mpfr_set (res, op1, rnd); 233 testfunc (res, res, res, op3, rnd); 234 if (mpfr_compare (res, ref)) 235 { 236 printf ("Error for %s(a, a, b, c) for ", foo); 237 DISP("a=", op1); DISP(", a=", op2); DISP2(", c=", op3); 238 DISP("expected ", ref); DISP2(", got", res); 239 exit (1); 240 } 241 242 /* foo(a, a, b,a) */ 243 testfunc (ref, op1, op2, op1, rnd); 244 mpfr_set (res, op1, rnd); 245 testfunc (res, res, op2, res, rnd); 246 if (mpfr_compare (res, ref)) 247 { 248 printf ("Error for %s(a, a, b, c) for ", foo); 249 DISP("a=", op1); DISP(", a=", op2); DISP2(", c=", op3); 250 DISP("expected ", ref); DISP2(", got", res); 251 exit (1); 252 } 253 254 /* foo(b, a, b, b) */ 255 testfunc (ref, op1, op2, op2, rnd); 256 mpfr_set (res, op2, rnd); 257 testfunc (res, op1, res, res, rnd); 258 if (mpfr_compare (res, ref)) 259 { 260 printf ("Error for %s(a, a, b, c) for ", foo); 261 DISP("a=", op1); DISP(", a=", op2); DISP2(", c=", op3); 262 DISP("expected ", ref); DISP2(", got", res); 263 exit (1); 264 } 265 266 /* foo (a, a, a, a) */ 267 testfunc (ref, op1, op1, op1 ,rnd); 268 mpfr_set (res, op1, rnd); 269 testfunc (res, res, res, res, rnd); 270 if (mpfr_compare (res, ref)) 271 { 272 printf ("Error for %s(a, a, a, a) for ", foo); 273 DISP2("a=", op1); 274 DISP("expected ", ref); DISP2(", got", res); 275 exit (1); 276 } 277 } 278 } 279 } 280 281 mpfr_clear (ref); 282 mpfr_clear (op1); 283 mpfr_clear (op2); 284 mpfr_clear (op3); 285 mpfr_clear (res); 286 287} 288 289static void 290test2ui (int (*testfunc)(mpfr_ptr, mpfr_srcptr, unsigned long int, mpfr_rnd_t), 291 char *foo, mpfr_prec_t prec, mpfr_rnd_t rnd) 292{ 293 mpfr_t ref1, ref2; 294 unsigned int ref3; 295 mpfr_t res1; 296 int i; 297 298#ifdef DEBUG 299 printf("checking %s\n", foo); 300#endif 301 mpfr_init2 (ref1, prec); 302 mpfr_init2 (ref2, prec); 303 mpfr_init2 (res1, prec); 304 305 /* ref2 can be NaN, +Inf, -Inf, +0, -0 or any number 306 ref3 can be 0 or any number */ 307 for (i=0; i<SPECIAL_MAX*2; i++) 308 { 309 set_special (ref2, i%SPECIAL_MAX); 310 ref3 = i/SPECIAL_MAX == 0 ? 0 : randlimb (); 311 312 /* reference call: foo(a, b, c) */ 313 testfunc (ref1, ref2, ref3, rnd); 314 315 /* foo(a, a, c) */ 316 mpfr_set (res1, ref2, rnd); /* exact operation */ 317 testfunc (res1, res1, ref3, rnd); 318 319 if (mpfr_compare (res1, ref1)) 320 { 321 printf ("Error for %s(a, a, c) for c=%u\n", foo, ref3); 322 DISP2("a=",ref2); 323 printf ("expected "); mpfr_print_binary (ref1); puts (""); 324 printf ("got "); mpfr_print_binary (res1); puts (""); 325 exit (1); 326 } 327 } 328 329 mpfr_clear (ref1); 330 mpfr_clear (ref2); 331 mpfr_clear (res1); 332} 333 334static void 335testui2 (int (*testfunc)(mpfr_ptr, unsigned long int, mpfr_srcptr, mpfr_rnd_t), 336 char *foo, mpfr_prec_t prec, mpfr_rnd_t rnd) 337{ 338 mpfr_t ref1, ref3; 339 unsigned int ref2; 340 mpfr_t res1; 341 int i; 342 343#ifdef DEBUG 344 printf("checking %s\n", foo); 345#endif 346 mpfr_init2 (ref1, prec); 347 mpfr_init2 (ref3, prec); 348 mpfr_init2 (res1, prec); 349 350 for (i=0; i<SPECIAL_MAX*2; i++) { 351 set_special (ref3, i%SPECIAL_MAX); 352 ref2 = i/SPECIAL_MAX==0 ? 0 : randlimb (); 353 354 /* reference call: foo(a, b, c) */ 355 testfunc (ref1, ref2, ref3, rnd); 356 357 /* foo(a, b, a) */ 358 mpfr_set (res1, ref3, rnd); /* exact operation */ 359 testfunc (res1, ref2, res1, rnd); 360 if (mpfr_compare (res1, ref1)) 361 { 362 printf ("Error for %s(a, b, a) for b=%u \n", foo, ref2); 363 DISP2("a=", ref3); 364 DISP("expected", ref1); DISP2(", got ", res1); 365 exit (1); 366 } 367 } 368 369 mpfr_clear (ref1); 370 mpfr_clear (ref3); 371 mpfr_clear (res1); 372} 373 374/* foo(mpfr_ptr, mpfr_srcptr, mp_rndt) */ 375static void 376test2 (int (*testfunc)(mpfr_ptr, mpfr_srcptr, mpfr_rnd_t), 377 char *foo, mpfr_prec_t prec, mpfr_rnd_t rnd) 378{ 379 mpfr_t ref1, ref2; 380 mpfr_t res1; 381 int i; 382 383#ifdef DEBUG 384 printf("checking %s\n", foo); 385#endif 386 mpfr_init2 (ref1, prec); 387 mpfr_init2 (ref2, prec); 388 mpfr_init2 (res1, prec); 389 390 for (i=0; i<SPECIAL_MAX; i++) 391 { 392 set_special (ref2, i); 393 394 /* reference call: foo(a, b) */ 395 testfunc (ref1, ref2, rnd); 396 397 /* foo(a, a) */ 398 mpfr_set (res1, ref2, rnd); /* exact operation */ 399 testfunc (res1, res1, rnd); 400 if (mpfr_compare (res1, ref1)) 401 { 402 printf ("Error for %s(a, a) for ", foo); 403 DISP2("a=", ref2); 404 DISP("expected", ref1); DISP2(", got ", res1); 405 exit (1); 406 } 407 } 408 409 mpfr_clear (ref1); 410 mpfr_clear (ref2); 411 mpfr_clear (res1); 412} 413 414/* foo(mpfr_ptr, mpfr_srcptr) */ 415static void 416test2a (int (*testfunc)(mpfr_ptr, mpfr_srcptr), 417 char *foo, mpfr_prec_t prec) 418{ 419 mpfr_t ref1, ref2; 420 mpfr_t res1; 421 int i; 422 423#ifdef DEBUG 424 printf ("checking %s\n", foo); 425#endif 426 mpfr_init2 (ref1, prec); 427 mpfr_init2 (ref2, prec); 428 mpfr_init2 (res1, prec); 429 430 for (i=0; i<SPECIAL_MAX; i++) 431 { 432 set_special (ref2, i); 433 434 /* reference call: foo(a, b) */ 435 testfunc (ref1, ref2); 436 437 /* foo(a, a) */ 438 mpfr_set (res1, ref2, MPFR_RNDN); /* exact operation */ 439 testfunc (res1, res1); 440 if (mpfr_compare (res1, ref1)) 441 { 442 printf ("Error for %s(a, a) for ", foo); 443 DISP2("a=",ref2); 444 DISP("expected", ref1); DISP2(", got ", res1); 445 exit (1); 446 } 447 } 448 449 mpfr_clear (ref1); 450 mpfr_clear (ref2); 451 mpfr_clear (res1); 452} 453 454/* one operand, two results */ 455static void 456test3a (int (*testfunc)(mpfr_ptr, mpfr_ptr, mpfr_srcptr, mpfr_rnd_t), 457 char *foo, mpfr_prec_t prec, mpfr_rnd_t rnd) 458{ 459 mpfr_t ref1, ref2, ref3; 460 mpfr_t res1, res2; 461 int i; 462 463#ifdef DEBUG 464 printf ("checking %s\n", foo); 465#endif 466 mpfr_init2 (ref1, prec); 467 mpfr_init2 (ref2, prec); 468 mpfr_init2 (ref3, prec); 469 mpfr_init2 (res1, prec); 470 mpfr_init2 (res2, prec); 471 472 for (i=0; i<SPECIAL_MAX; i++) 473 { 474 set_special (ref3, i); 475 476 /* reference call: foo(a, b, c) */ 477 testfunc (ref1, ref2, ref3, rnd); 478 479 /* foo(a, b, a) */ 480 mpfr_set (res1, ref3, rnd); /* exact operation */ 481 testfunc (res1, res2, res1, rnd); 482 if (mpfr_compare (res1, ref1) || mpfr_compare (res2, ref2)) 483 { 484 printf ("Error for %s(a, b, a) for rnd=%s, ", foo, 485 mpfr_print_rnd_mode (rnd)); 486 DISP2("a=",ref3); 487 DISP("expected (", ref1); DISP(",",ref2); 488 DISP("), got (", res1); DISP(",", res2); printf(")\n"); 489 exit (1); 490 } 491 492 /* foo(a, b, b) */ 493 mpfr_set (res2, ref3, rnd); /* exact operation */ 494 testfunc (res1, res2, res2, rnd); 495 if (mpfr_compare (res1, ref1) || mpfr_compare (res2, ref2)) 496 { 497 printf ("Error for %s(a, b, b) for ", foo); 498 DISP2("b=",ref3); 499 DISP("expected (", ref1); DISP(",",ref2); 500 DISP("), got (", res1); DISP(",", res2); printf(")\n"); 501 exit (1); 502 } 503 } 504 505 mpfr_clear (ref1); 506 mpfr_clear (ref2); 507 mpfr_clear (ref3); 508 mpfr_clear (res1); 509 mpfr_clear (res2); 510} 511 512static int 513reldiff_wrapper (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode) 514{ 515 mpfr_reldiff (a, b, c, rnd_mode); 516 return 0; 517} 518 519static void 520pow_int (mpfr_rnd_t rnd) 521{ 522 mpfr_t ref1, ref2, ref3; 523 mpfr_t res1; 524 int i; 525 526#ifdef DEBUG 527 printf("pow_int\n"); 528#endif 529 mpfr_inits2 ((randlimb () % 200) + MPFR_PREC_MIN, 530 ref1, ref2, res1, (mpfr_ptr) 0); 531 mpfr_init2 (ref3, 1005); 532 533 for (i = 0; i <= 15; i++) 534 { 535 mpfr_urandomb (ref2, RANDS); 536 if (i & 1) 537 mpfr_neg (ref2, ref2, MPFR_RNDN); 538 mpfr_set_ui (ref3, 20, MPFR_RNDN); 539 /* We need to test huge integers because different algorithms/codes 540 are used for not-too-large integers (mpfr_pow_z) and for general 541 cases, in particular huge integers (mpfr_pow_general). [r7606] */ 542 if (i & 2) 543 mpfr_mul_2ui (ref3, ref3, 1000, MPFR_RNDN); 544 if (i & 4) 545 mpfr_add_ui (ref3, ref3, 1, MPFR_RNDN); /* odd integer */ 546 547 /* reference call: pow(a, b, c) */ 548 mpfr_pow (ref1, ref2, ref3, rnd); 549 550 /* pow(a, a, c) */ 551 mpfr_set (res1, ref2, rnd); /* exact operation */ 552 mpfr_pow (res1, res1, ref3, rnd); 553 554 if (mpfr_compare (res1, ref1)) 555 { 556 printf ("Error for pow_int(a, a, c) for "); 557 DISP("a=",ref2); DISP2(", c=",ref3); 558 printf ("expected "); mpfr_print_binary (ref1); puts (""); 559 printf ("got "); mpfr_print_binary (res1); puts (""); 560 exit (1); 561 } 562 } 563 564 mpfr_clears (ref1, ref2, ref3, res1, (mpfr_ptr) 0); 565} 566 567int 568main (void) 569{ 570 int rnd; 571 mpfr_prec_t p; 572 tests_start_mpfr (); 573 574 p = (randlimb () % 200)+ MPFR_PREC_MIN; 575 RND_LOOP (rnd) 576 { 577 test2a (mpfr_round, "mpfr_round", p); 578 test2a (mpfr_ceil, "mpfr_ceil", p); 579 test2a (mpfr_floor, "mpfr_floor", p); 580 test2a (mpfr_trunc, "mpfr_trunc", p); 581 582 test2ui (mpfr_add_ui, "mpfr_add_ui", p, (mpfr_rnd_t) rnd); 583 test2ui (mpfr_div_2exp, "mpfr_div_2exp", p, (mpfr_rnd_t) rnd); 584 test2ui (mpfr_div_ui, "mpfr_div_ui", p, (mpfr_rnd_t) rnd); 585 test2ui (mpfr_mul_2exp, "mpfr_mul_2exp", p, (mpfr_rnd_t) rnd); 586 test2ui (mpfr_mul_ui, "mpfr_mul_ui", p, (mpfr_rnd_t) rnd); 587 test2ui (mpfr_pow_ui, "mpfr_pow_ui", p, (mpfr_rnd_t) rnd); 588 test2ui (mpfr_sub_ui, "mpfr_sub_ui", p, (mpfr_rnd_t) rnd); 589 590 testui2 (mpfr_ui_div, "mpfr_ui_div", p, (mpfr_rnd_t) rnd); 591 testui2 (mpfr_ui_sub, "mpfr_ui_sub", p, (mpfr_rnd_t) rnd); 592 testui2 (mpfr_ui_pow, "mpfr_ui_pow", p, (mpfr_rnd_t) rnd); 593 594 test2 (mpfr_sqr, "mpfr_sqr", p, (mpfr_rnd_t) rnd); 595 test2 (mpfr_sqrt, "mpfr_sqrt", p, (mpfr_rnd_t) rnd); 596 test2 (mpfr_abs, "mpfr_abs", p, (mpfr_rnd_t) rnd); 597 test2 (mpfr_neg, "mpfr_neg", p, (mpfr_rnd_t) rnd); 598 599 test2 (mpfr_log, "mpfr_log", p, (mpfr_rnd_t) rnd); 600 test2 (mpfr_log2, "mpfr_log2", p, (mpfr_rnd_t) rnd); 601 test2 (mpfr_log10, "mpfr_log10", p, (mpfr_rnd_t) rnd); 602 test2 (mpfr_log1p, "mpfr_log1p", p, (mpfr_rnd_t) rnd); 603 604 test2 (mpfr_exp, "mpfr_exp", p, (mpfr_rnd_t) rnd); 605 test2 (mpfr_exp2, "mpfr_exp2", p, (mpfr_rnd_t) rnd); 606 test2 (mpfr_exp10, "mpfr_exp10", p, (mpfr_rnd_t) rnd); 607 test2 (mpfr_expm1, "mpfr_expm1", p, (mpfr_rnd_t) rnd); 608 test2 (mpfr_eint, "mpfr_eint", p, (mpfr_rnd_t) rnd); 609 610 test2 (mpfr_sinh, "mpfr_sinh", p, (mpfr_rnd_t) rnd); 611 test2 (mpfr_cosh, "mpfr_cosh", p, (mpfr_rnd_t) rnd); 612 test2 (mpfr_tanh, "mpfr_tanh", p, (mpfr_rnd_t) rnd); 613 test2 (mpfr_asinh, "mpfr_asinh", p, (mpfr_rnd_t) rnd); 614 test2 (mpfr_acosh, "mpfr_acosh", p, (mpfr_rnd_t) rnd); 615 test2 (mpfr_atanh, "mpfr_atanh", p, (mpfr_rnd_t) rnd); 616 test2 (mpfr_sech, "mpfr_sech", p, (mpfr_rnd_t) rnd); 617 test2 (mpfr_csch, "mpfr_csch", p, (mpfr_rnd_t) rnd); 618 test2 (mpfr_coth, "mpfr_coth", p, (mpfr_rnd_t) rnd); 619 620 test2 (mpfr_asin, "mpfr_asin", p, (mpfr_rnd_t) rnd); 621 test2 (mpfr_acos, "mpfr_acos", p, (mpfr_rnd_t) rnd); 622 test2 (mpfr_atan, "mpfr_atan", p, (mpfr_rnd_t) rnd); 623 test2 (mpfr_cos, "mpfr_cos", p, (mpfr_rnd_t) rnd); 624 test2 (mpfr_sin, "mpfr_sin", p, (mpfr_rnd_t) rnd); 625 test2 (mpfr_tan, "mpfr_tan", p, (mpfr_rnd_t) rnd); 626 test2 (mpfr_sec, "mpfr_sec", p, (mpfr_rnd_t) rnd); 627 test2 (mpfr_csc, "mpfr_csc", p, (mpfr_rnd_t) rnd); 628 test2 (mpfr_cot, "mpfr_cot", p, (mpfr_rnd_t) rnd); 629 630 test2 (mpfr_erf, "mpfr_erf", p, (mpfr_rnd_t) rnd); 631 test2 (mpfr_erfc, "mpfr_erfc", p, (mpfr_rnd_t) rnd); 632 test2 (mpfr_j0, "mpfr_j0", p, (mpfr_rnd_t) rnd); 633 test2 (mpfr_j1, "mpfr_j1", p, (mpfr_rnd_t) rnd); 634 test2 (mpfr_y0, "mpfr_y0", p, (mpfr_rnd_t) rnd); 635 test2 (mpfr_y1, "mpfr_y1", p, (mpfr_rnd_t) rnd); 636 test2 (mpfr_zeta, "mpfr_zeta", p, (mpfr_rnd_t) rnd); 637 test2 (mpfr_gamma, "mpfr_gamma", p, (mpfr_rnd_t) rnd); 638 test2 (mpfr_lngamma, "mpfr_lngamma", p, (mpfr_rnd_t) rnd); 639 640 test2 (mpfr_rint, "mpfr_rint", p, (mpfr_rnd_t) rnd); 641 test2 (mpfr_rint_ceil, "mpfr_rint_ceil", p, (mpfr_rnd_t) rnd); 642 test2 (mpfr_rint_floor, "mpfr_rint_floor", p, (mpfr_rnd_t) rnd); 643 test2 (mpfr_rint_round, "mpfr_rint_round", p, (mpfr_rnd_t) rnd); 644 test2 (mpfr_rint_trunc, "mpfr_rint_trunc", p, (mpfr_rnd_t) rnd); 645 test2 (mpfr_frac, "mpfr_frac", p, (mpfr_rnd_t) rnd); 646 647 test3 (mpfr_add, "mpfr_add", p, (mpfr_rnd_t) rnd); 648 test3 (mpfr_sub, "mpfr_sub", p, (mpfr_rnd_t) rnd); 649 test3 (mpfr_mul, "mpfr_mul", p, (mpfr_rnd_t) rnd); 650 test3 (mpfr_div, "mpfr_div", p, (mpfr_rnd_t) rnd); 651 652 test3 (mpfr_agm, "mpfr_agm", p, (mpfr_rnd_t) rnd); 653 test3 (mpfr_min, "mpfr_min", p, (mpfr_rnd_t) rnd); 654 test3 (mpfr_max, "mpfr_max", p, (mpfr_rnd_t) rnd); 655 656 test3 (reldiff_wrapper, "mpfr_reldiff", p, (mpfr_rnd_t) rnd); 657 test3 (mpfr_dim, "mpfr_dim", p, (mpfr_rnd_t) rnd); 658 659 test3 (mpfr_remainder, "mpfr_remainder", p, (mpfr_rnd_t) rnd); 660 test3 (mpfr_pow, "mpfr_pow", p, (mpfr_rnd_t) rnd); 661 pow_int ((mpfr_rnd_t) rnd); 662 test3 (mpfr_atan2, "mpfr_atan2", p, (mpfr_rnd_t) rnd); 663 test3 (mpfr_hypot, "mpfr_hypot", p, (mpfr_rnd_t) rnd); 664 665 test3a (mpfr_sin_cos, "mpfr_sin_cos", p, (mpfr_rnd_t) rnd); 666 667 test4 (mpfr_fma, "mpfr_fma", p, (mpfr_rnd_t) rnd); 668 test4 (mpfr_fms, "mpfr_fms", p, (mpfr_rnd_t) rnd); 669 670#if MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0) 671 test2 (mpfr_li2, "mpfr_li2", p, (mpfr_rnd_t) rnd); 672 test2 (mpfr_rec_sqrt, "mpfr_rec_sqrt", p, (mpfr_rnd_t) rnd); 673 test3 (mpfr_fmod, "mpfr_fmod", p, (mpfr_rnd_t) rnd); 674 test3a (mpfr_modf, "mpfr_modf", p, (mpfr_rnd_t) rnd); 675 test3a (mpfr_sinh_cosh, "mpfr_sinh_cosh", p, (mpfr_rnd_t) rnd); 676#endif 677 } 678 679 tests_end_mpfr (); 680 return 0; 681} 682