1 /* $NetBSD: t_log.c,v 1.5 2011/09/18 04:49:11 jruoho Exp $ */ 2 3 /*- 4 * Copyright (c) 2011 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Jukka Ruohonen. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 #include <sys/cdefs.h> 32 __RCSID("$NetBSD: t_log.c,v 1.5 2011/09/18 04:49:11 jruoho Exp $"); 33 34 #include <atf-c.h> 35 #include <stdio.h> 36 #include <math.h> 37 38 /* 39 * log10(3) 40 */ 41 ATF_TC(log10_base); 42 ATF_TC_HEAD(log10_base, tc) 43 { 44 atf_tc_set_md_var(tc, "descr", "Test log10(10) == 1"); 45 } 46 47 ATF_TC_BODY(log10_base, tc) 48 { 49 ATF_CHECK(log10(10.0) == 1.0); 50 } 51 52 ATF_TC(log10_nan); 53 ATF_TC_HEAD(log10_nan, tc) 54 { 55 atf_tc_set_md_var(tc, "descr", "Test log10(NaN) == NaN"); 56 } 57 58 ATF_TC_BODY(log10_nan, tc) 59 { 60 #ifndef __vax__ 61 const double x = 0.0L / 0.0L; 62 63 ATF_CHECK(isnan(x) != 0); 64 ATF_CHECK(isnan(log10(x)) != 0); 65 #endif 66 } 67 68 ATF_TC(log10_inf_neg); 69 ATF_TC_HEAD(log10_inf_neg, tc) 70 { 71 atf_tc_set_md_var(tc, "descr", "Test log10(-Inf) == NaN"); 72 } 73 74 ATF_TC_BODY(log10_inf_neg, tc) 75 { 76 #ifndef __vax__ 77 const double x = -1.0L / 0.0L; 78 const double y = log10(x); 79 80 ATF_CHECK(isnan(y) != 0); 81 #endif 82 } 83 84 ATF_TC(log10_inf_pos); 85 ATF_TC_HEAD(log10_inf_pos, tc) 86 { 87 atf_tc_set_md_var(tc, "descr", "Test log10(+Inf) == +Inf"); 88 } 89 90 ATF_TC_BODY(log10_inf_pos, tc) 91 { 92 #ifndef __vax__ 93 const double x = 1.0L / 0.0L; 94 95 ATF_CHECK(log10(x) == x); 96 #endif 97 } 98 99 ATF_TC(log10_one_pos); 100 ATF_TC_HEAD(log10_one_pos, tc) 101 { 102 atf_tc_set_md_var(tc, "descr", "Test log10(1.0) == +0.0"); 103 } 104 105 ATF_TC_BODY(log10_one_pos, tc) 106 { 107 #ifndef __vax__ 108 const double x = log10(1.0); 109 const double y = 0.0L; 110 111 ATF_CHECK(x == y); 112 ATF_CHECK(signbit(x) == 0); 113 ATF_CHECK(signbit(y) == 0); 114 #endif 115 } 116 117 ATF_TC(log10_zero_neg); 118 ATF_TC_HEAD(log10_zero_neg, tc) 119 { 120 atf_tc_set_md_var(tc, "descr", "Test log10(-0.0) == -HUGE_VAL"); 121 } 122 123 ATF_TC_BODY(log10_zero_neg, tc) 124 { 125 #ifndef __vax__ 126 const double x = -0.0L; 127 128 ATF_CHECK(log10(x) == -HUGE_VAL); 129 #endif 130 } 131 132 ATF_TC(log10_zero_pos); 133 ATF_TC_HEAD(log10_zero_pos, tc) 134 { 135 atf_tc_set_md_var(tc, "descr", "Test log10(+0.0) == -HUGE_VAL"); 136 } 137 138 ATF_TC_BODY(log10_zero_pos, tc) 139 { 140 #ifndef __vax__ 141 const double x = 0.0L; 142 143 ATF_CHECK(log10(x) == -HUGE_VAL); 144 #endif 145 } 146 147 /* 148 * log10f(3) 149 */ 150 ATF_TC(log10f_base); 151 ATF_TC_HEAD(log10f_base, tc) 152 { 153 atf_tc_set_md_var(tc, "descr", "Test log10f(10) == 1"); 154 } 155 156 ATF_TC_BODY(log10f_base, tc) 157 { 158 ATF_CHECK(log10f(10.0) == 1.0); 159 } 160 161 ATF_TC(log10f_nan); 162 ATF_TC_HEAD(log10f_nan, tc) 163 { 164 atf_tc_set_md_var(tc, "descr", "Test log10f(NaN) == NaN"); 165 } 166 167 ATF_TC_BODY(log10f_nan, tc) 168 { 169 #ifndef __vax__ 170 const float x = 0.0L / 0.0L; 171 172 ATF_CHECK(isnan(x) != 0); 173 ATF_CHECK(isnan(log10f(x)) != 0); 174 #endif 175 } 176 177 ATF_TC(log10f_inf_neg); 178 ATF_TC_HEAD(log10f_inf_neg, tc) 179 { 180 atf_tc_set_md_var(tc, "descr", "Test log10f(-Inf) == NaN"); 181 } 182 183 ATF_TC_BODY(log10f_inf_neg, tc) 184 { 185 #ifndef __vax__ 186 const float x = -1.0L / 0.0L; 187 const float y = log10f(x); 188 189 ATF_CHECK(isnan(y) != 0); 190 #endif 191 } 192 193 ATF_TC(log10f_inf_pos); 194 ATF_TC_HEAD(log10f_inf_pos, tc) 195 { 196 atf_tc_set_md_var(tc, "descr", "Test log10f(+Inf) == +Inf"); 197 } 198 199 ATF_TC_BODY(log10f_inf_pos, tc) 200 { 201 #ifndef __vax__ 202 const float x = 1.0L / 0.0L; 203 204 ATF_CHECK(log10f(x) == x); 205 #endif 206 } 207 208 ATF_TC(log10f_one_pos); 209 ATF_TC_HEAD(log10f_one_pos, tc) 210 { 211 atf_tc_set_md_var(tc, "descr", "Test log10f(1.0) == +0.0"); 212 } 213 214 ATF_TC_BODY(log10f_one_pos, tc) 215 { 216 #ifndef __vax__ 217 const float x = log10f(1.0); 218 const float y = 0.0L; 219 220 ATF_CHECK(x == y); 221 ATF_CHECK(signbit(x) == 0); 222 ATF_CHECK(signbit(y) == 0); 223 #endif 224 } 225 226 ATF_TC(log10f_zero_neg); 227 ATF_TC_HEAD(log10f_zero_neg, tc) 228 { 229 atf_tc_set_md_var(tc, "descr", "Test log10f(-0.0) == -HUGE_VALF"); 230 } 231 232 ATF_TC_BODY(log10f_zero_neg, tc) 233 { 234 #ifndef __vax__ 235 const float x = -0.0L; 236 237 ATF_CHECK(log10f(x) == -HUGE_VALF); 238 #endif 239 } 240 241 ATF_TC(log10f_zero_pos); 242 ATF_TC_HEAD(log10f_zero_pos, tc) 243 { 244 atf_tc_set_md_var(tc, "descr", "Test log10f(+0.0) == -HUGE_VALF"); 245 } 246 247 ATF_TC_BODY(log10f_zero_pos, tc) 248 { 249 #ifndef __vax__ 250 const float x = 0.0L; 251 252 ATF_CHECK(log10f(x) == -HUGE_VALF); 253 #endif 254 } 255 256 /* 257 * log1p(3) 258 */ 259 ATF_TC(log1p_nan); 260 ATF_TC_HEAD(log1p_nan, tc) 261 { 262 atf_tc_set_md_var(tc, "descr", "Test log1p(NaN) == NaN"); 263 } 264 265 ATF_TC_BODY(log1p_nan, tc) 266 { 267 #ifndef __vax__ 268 const double x = 0.0L / 0.0L; 269 270 ATF_CHECK(isnan(x) != 0); 271 ATF_CHECK(isnan(log1p(x)) != 0); 272 #endif 273 } 274 275 ATF_TC(log1p_inf_neg); 276 ATF_TC_HEAD(log1p_inf_neg, tc) 277 { 278 atf_tc_set_md_var(tc, "descr", "Test log1p(-Inf) == NaN"); 279 } 280 281 ATF_TC_BODY(log1p_inf_neg, tc) 282 { 283 #ifndef __vax__ 284 const double x = -1.0L / 0.0L; 285 const double y = log1p(x); 286 287 if (isnan(y) == 0) { 288 atf_tc_expect_fail("PR lib/45362"); 289 atf_tc_fail("log1p(-Inf) != NaN"); 290 } 291 #endif 292 } 293 294 ATF_TC(log1p_inf_pos); 295 ATF_TC_HEAD(log1p_inf_pos, tc) 296 { 297 atf_tc_set_md_var(tc, "descr", "Test log1p(+Inf) == +Inf"); 298 } 299 300 ATF_TC_BODY(log1p_inf_pos, tc) 301 { 302 #ifndef __vax__ 303 const double x = 1.0L / 0.0L; 304 305 ATF_CHECK(log1p(x) == x); 306 #endif 307 } 308 309 ATF_TC(log1p_one_neg); 310 ATF_TC_HEAD(log1p_one_neg, tc) 311 { 312 atf_tc_set_md_var(tc, "descr", "Test log1p(-1.0) == -HUGE_VAL"); 313 } 314 315 ATF_TC_BODY(log1p_one_neg, tc) 316 { 317 #ifndef __vax__ 318 const double x = log1p(-1.0); 319 320 if (x != -HUGE_VAL) { 321 atf_tc_expect_fail("PR lib/45362"); 322 atf_tc_fail("log1p(-1.0) != -HUGE_VAL"); 323 } 324 #endif 325 } 326 327 ATF_TC(log1p_zero_neg); 328 ATF_TC_HEAD(log1p_zero_neg, tc) 329 { 330 atf_tc_set_md_var(tc, "descr", "Test log1p(-0.0) == -0.0"); 331 } 332 333 ATF_TC_BODY(log1p_zero_neg, tc) 334 { 335 #ifndef __vax__ 336 const double x = -0.0L; 337 338 ATF_CHECK(log1p(x) == x); 339 #endif 340 } 341 342 ATF_TC(log1p_zero_pos); 343 ATF_TC_HEAD(log1p_zero_pos, tc) 344 { 345 atf_tc_set_md_var(tc, "descr", "Test log1p(+0.0) == +0.0"); 346 } 347 348 ATF_TC_BODY(log1p_zero_pos, tc) 349 { 350 #ifndef __vax__ 351 const double x = 0.0L; 352 353 ATF_CHECK(log1p(x) == x); 354 #endif 355 } 356 357 /* 358 * log1pf(3) 359 */ 360 ATF_TC(log1pf_nan); 361 ATF_TC_HEAD(log1pf_nan, tc) 362 { 363 atf_tc_set_md_var(tc, "descr", "Test log1pf(NaN) == NaN"); 364 } 365 366 ATF_TC_BODY(log1pf_nan, tc) 367 { 368 #ifndef __vax__ 369 const float x = 0.0L / 0.0L; 370 371 ATF_CHECK(isnan(x) != 0); 372 ATF_CHECK(isnan(log1pf(x)) != 0); 373 #endif 374 } 375 376 ATF_TC(log1pf_inf_neg); 377 ATF_TC_HEAD(log1pf_inf_neg, tc) 378 { 379 atf_tc_set_md_var(tc, "descr", "Test log1pf(-Inf) == NaN"); 380 } 381 382 ATF_TC_BODY(log1pf_inf_neg, tc) 383 { 384 #ifndef __vax__ 385 const float x = -1.0L / 0.0L; 386 const float y = log1pf(x); 387 388 if (isnan(y) == 0) { 389 atf_tc_expect_fail("PR lib/45362"); 390 atf_tc_fail("log1pf(-Inf) != NaN"); 391 } 392 #endif 393 } 394 395 ATF_TC(log1pf_inf_pos); 396 ATF_TC_HEAD(log1pf_inf_pos, tc) 397 { 398 atf_tc_set_md_var(tc, "descr", "Test log1pf(+Inf) == +Inf"); 399 } 400 401 ATF_TC_BODY(log1pf_inf_pos, tc) 402 { 403 #ifndef __vax__ 404 const float x = 1.0L / 0.0L; 405 406 ATF_CHECK(log1pf(x) == x); 407 #endif 408 } 409 410 ATF_TC(log1pf_one_neg); 411 ATF_TC_HEAD(log1pf_one_neg, tc) 412 { 413 atf_tc_set_md_var(tc, "descr", "Test log1pf(-1.0) == -HUGE_VALF"); 414 } 415 416 ATF_TC_BODY(log1pf_one_neg, tc) 417 { 418 #ifndef __vax__ 419 const float x = log1pf(-1.0); 420 421 if (x != -HUGE_VALF) { 422 atf_tc_expect_fail("PR lib/45362"); 423 atf_tc_fail("log1pf(-1.0) != -HUGE_VALF"); 424 } 425 #endif 426 } 427 428 ATF_TC(log1pf_zero_neg); 429 ATF_TC_HEAD(log1pf_zero_neg, tc) 430 { 431 atf_tc_set_md_var(tc, "descr", "Test log1pf(-0.0) == -0.0"); 432 } 433 434 ATF_TC_BODY(log1pf_zero_neg, tc) 435 { 436 #ifndef __vax__ 437 const float x = -0.0L; 438 439 ATF_CHECK(log1pf(x) == x); 440 #endif 441 } 442 443 ATF_TC(log1pf_zero_pos); 444 ATF_TC_HEAD(log1pf_zero_pos, tc) 445 { 446 atf_tc_set_md_var(tc, "descr", "Test log1pf(+0.0) == +0.0"); 447 } 448 449 ATF_TC_BODY(log1pf_zero_pos, tc) 450 { 451 #ifndef __vax__ 452 const float x = 0.0L; 453 454 ATF_CHECK(log1pf(x) == x); 455 #endif 456 } 457 458 /* 459 * log2(3) 460 */ 461 ATF_TC(log2_base); 462 ATF_TC_HEAD(log2_base, tc) 463 { 464 atf_tc_set_md_var(tc, "descr", "Test log2(2) == 1"); 465 } 466 467 ATF_TC_BODY(log2_base, tc) 468 { 469 ATF_CHECK(log2(2.0) == 1.0); 470 } 471 472 ATF_TC(log2_nan); 473 ATF_TC_HEAD(log2_nan, tc) 474 { 475 atf_tc_set_md_var(tc, "descr", "Test log2(NaN) == NaN"); 476 } 477 478 ATF_TC_BODY(log2_nan, tc) 479 { 480 #ifndef __vax__ 481 const double x = 0.0L / 0.0L; 482 483 ATF_CHECK(isnan(x) != 0); 484 ATF_CHECK(isnan(log2(x)) != 0); 485 #endif 486 } 487 488 ATF_TC(log2_inf_neg); 489 ATF_TC_HEAD(log2_inf_neg, tc) 490 { 491 atf_tc_set_md_var(tc, "descr", "Test log2(-Inf) == NaN"); 492 } 493 494 ATF_TC_BODY(log2_inf_neg, tc) 495 { 496 #ifndef __vax__ 497 const double x = -1.0L / 0.0L; 498 const double y = log2(x); 499 500 ATF_CHECK(isnan(y) != 0); 501 #endif 502 } 503 504 ATF_TC(log2_inf_pos); 505 ATF_TC_HEAD(log2_inf_pos, tc) 506 { 507 atf_tc_set_md_var(tc, "descr", "Test log2(+Inf) == +Inf"); 508 } 509 510 ATF_TC_BODY(log2_inf_pos, tc) 511 { 512 #ifndef __vax__ 513 const double x = 1.0L / 0.0L; 514 515 ATF_CHECK(log2(x) == x); 516 #endif 517 } 518 519 ATF_TC(log2_one_pos); 520 ATF_TC_HEAD(log2_one_pos, tc) 521 { 522 atf_tc_set_md_var(tc, "descr", "Test log2(1.0) == +0.0"); 523 } 524 525 ATF_TC_BODY(log2_one_pos, tc) 526 { 527 #ifndef __vax__ 528 const double x = log2(1.0); 529 const double y = 0.0L; 530 531 ATF_CHECK(x == y); 532 ATF_CHECK(signbit(x) == 0); 533 ATF_CHECK(signbit(y) == 0); 534 #endif 535 } 536 537 ATF_TC(log2_zero_neg); 538 ATF_TC_HEAD(log2_zero_neg, tc) 539 { 540 atf_tc_set_md_var(tc, "descr", "Test log2(-0.0) == -HUGE_VAL"); 541 } 542 543 ATF_TC_BODY(log2_zero_neg, tc) 544 { 545 #ifndef __vax__ 546 const double x = -0.0L; 547 548 ATF_CHECK(log2(x) == -HUGE_VAL); 549 #endif 550 } 551 552 ATF_TC(log2_zero_pos); 553 ATF_TC_HEAD(log2_zero_pos, tc) 554 { 555 atf_tc_set_md_var(tc, "descr", "Test log2(+0.0) == -HUGE_VAL"); 556 } 557 558 ATF_TC_BODY(log2_zero_pos, tc) 559 { 560 #ifndef __vax__ 561 const double x = 0.0L; 562 563 ATF_CHECK(log2(x) == -HUGE_VAL); 564 #endif 565 } 566 567 /* 568 * log2f(3) 569 */ 570 ATF_TC(log2f_base); 571 ATF_TC_HEAD(log2f_base, tc) 572 { 573 atf_tc_set_md_var(tc, "descr", "Test log2f(2) == 1"); 574 } 575 576 ATF_TC_BODY(log2f_base, tc) 577 { 578 ATF_CHECK(log2f(2.0) == 1.0); 579 } 580 581 ATF_TC(log2f_nan); 582 ATF_TC_HEAD(log2f_nan, tc) 583 { 584 atf_tc_set_md_var(tc, "descr", "Test log2f(NaN) == NaN"); 585 } 586 587 ATF_TC_BODY(log2f_nan, tc) 588 { 589 #ifndef __vax__ 590 const float x = 0.0L / 0.0L; 591 592 ATF_CHECK(isnan(x) != 0); 593 ATF_CHECK(isnan(log2f(x)) != 0); 594 #endif 595 } 596 597 ATF_TC(log2f_inf_neg); 598 ATF_TC_HEAD(log2f_inf_neg, tc) 599 { 600 atf_tc_set_md_var(tc, "descr", "Test log2f(-Inf) == NaN"); 601 } 602 603 ATF_TC_BODY(log2f_inf_neg, tc) 604 { 605 #ifndef __vax__ 606 const float x = -1.0L / 0.0L; 607 const float y = log2f(x); 608 609 ATF_CHECK(isnan(y) != 0); 610 #endif 611 } 612 613 ATF_TC(log2f_inf_pos); 614 ATF_TC_HEAD(log2f_inf_pos, tc) 615 { 616 atf_tc_set_md_var(tc, "descr", "Test log2f(+Inf) == +Inf"); 617 } 618 619 ATF_TC_BODY(log2f_inf_pos, tc) 620 { 621 #ifndef __vax__ 622 const float x = 1.0L / 0.0L; 623 624 ATF_CHECK(log2f(x) == x); 625 #endif 626 } 627 628 ATF_TC(log2f_one_pos); 629 ATF_TC_HEAD(log2f_one_pos, tc) 630 { 631 atf_tc_set_md_var(tc, "descr", "Test log2f(1.0) == +0.0"); 632 } 633 634 ATF_TC_BODY(log2f_one_pos, tc) 635 { 636 #ifndef __vax__ 637 const float x = log2f(1.0); 638 const float y = 0.0L; 639 640 ATF_CHECK(x == y); 641 ATF_CHECK(signbit(x) == 0); 642 ATF_CHECK(signbit(y) == 0); 643 #endif 644 } 645 646 ATF_TC(log2f_zero_neg); 647 ATF_TC_HEAD(log2f_zero_neg, tc) 648 { 649 atf_tc_set_md_var(tc, "descr", "Test log2f(-0.0) == -HUGE_VALF"); 650 } 651 652 ATF_TC_BODY(log2f_zero_neg, tc) 653 { 654 #ifndef __vax__ 655 const float x = -0.0L; 656 657 ATF_CHECK(log2f(x) == -HUGE_VALF); 658 #endif 659 } 660 661 ATF_TC(log2f_zero_pos); 662 ATF_TC_HEAD(log2f_zero_pos, tc) 663 { 664 atf_tc_set_md_var(tc, "descr", "Test log2f(+0.0) == -HUGE_VALF"); 665 } 666 667 ATF_TC_BODY(log2f_zero_pos, tc) 668 { 669 #ifndef __vax__ 670 const float x = 0.0L; 671 672 ATF_CHECK(log2f(x) == -HUGE_VALF); 673 #endif 674 } 675 676 /* 677 * log(3) 678 */ 679 ATF_TC(log_base); 680 ATF_TC_HEAD(log_base, tc) 681 { 682 atf_tc_set_md_var(tc, "descr", "Test log(e) == 1"); 683 } 684 685 ATF_TC_BODY(log_base, tc) 686 { 687 const double eps = 1.0e-40; 688 689 if (fabs(log(M_E) - 1.0) > eps) 690 atf_tc_fail_nonfatal("log(e) != 1"); 691 } 692 693 ATF_TC(log_nan); 694 ATF_TC_HEAD(log_nan, tc) 695 { 696 atf_tc_set_md_var(tc, "descr", "Test log(NaN) == NaN"); 697 } 698 699 ATF_TC_BODY(log_nan, tc) 700 { 701 #ifndef __vax__ 702 const double x = 0.0L / 0.0L; 703 704 ATF_CHECK(isnan(x) != 0); 705 ATF_CHECK(isnan(log(x)) != 0); 706 #endif 707 } 708 709 ATF_TC(log_inf_neg); 710 ATF_TC_HEAD(log_inf_neg, tc) 711 { 712 atf_tc_set_md_var(tc, "descr", "Test log(-Inf) == NaN"); 713 } 714 715 ATF_TC_BODY(log_inf_neg, tc) 716 { 717 #ifndef __vax__ 718 const double x = -1.0L / 0.0L; 719 const double y = log(x); 720 721 ATF_CHECK(isnan(y) != 0); 722 #endif 723 } 724 725 ATF_TC(log_inf_pos); 726 ATF_TC_HEAD(log_inf_pos, tc) 727 { 728 atf_tc_set_md_var(tc, "descr", "Test log(+Inf) == +Inf"); 729 } 730 731 ATF_TC_BODY(log_inf_pos, tc) 732 { 733 #ifndef __vax__ 734 const double x = 1.0L / 0.0L; 735 736 ATF_CHECK(log(x) == x); 737 #endif 738 } 739 740 ATF_TC(log_one_pos); 741 ATF_TC_HEAD(log_one_pos, tc) 742 { 743 atf_tc_set_md_var(tc, "descr", "Test log(1.0) == +0.0"); 744 } 745 746 ATF_TC_BODY(log_one_pos, tc) 747 { 748 #ifndef __vax__ 749 const double x = log(1.0); 750 const double y = 0.0L; 751 752 ATF_CHECK(x == y); 753 ATF_CHECK(signbit(x) == 0); 754 ATF_CHECK(signbit(y) == 0); 755 #endif 756 } 757 758 ATF_TC(log_zero_neg); 759 ATF_TC_HEAD(log_zero_neg, tc) 760 { 761 atf_tc_set_md_var(tc, "descr", "Test log(-0.0) == -HUGE_VAL"); 762 } 763 764 ATF_TC_BODY(log_zero_neg, tc) 765 { 766 #ifndef __vax__ 767 const double x = -0.0L; 768 769 ATF_CHECK(log(x) == -HUGE_VAL); 770 #endif 771 } 772 773 ATF_TC(log_zero_pos); 774 ATF_TC_HEAD(log_zero_pos, tc) 775 { 776 atf_tc_set_md_var(tc, "descr", "Test log(+0.0) == -HUGE_VAL"); 777 } 778 779 ATF_TC_BODY(log_zero_pos, tc) 780 { 781 #ifndef __vax__ 782 const double x = 0.0L; 783 784 ATF_CHECK(log(x) == -HUGE_VAL); 785 #endif 786 } 787 788 /* 789 * logf(3) 790 */ 791 ATF_TC(logf_base); 792 ATF_TC_HEAD(logf_base, tc) 793 { 794 atf_tc_set_md_var(tc, "descr", "Test logf(e) == 1"); 795 } 796 797 ATF_TC_BODY(logf_base, tc) 798 { 799 const float eps = 1.0e-7; 800 801 if (fabsf(logf(M_E) - 1.0) > eps) 802 atf_tc_fail_nonfatal("logf(e) != 1"); 803 } 804 805 ATF_TC(logf_nan); 806 ATF_TC_HEAD(logf_nan, tc) 807 { 808 atf_tc_set_md_var(tc, "descr", "Test logf(NaN) == NaN"); 809 } 810 811 ATF_TC_BODY(logf_nan, tc) 812 { 813 #ifndef __vax__ 814 const float x = 0.0L / 0.0L; 815 816 ATF_CHECK(isnan(x) != 0); 817 ATF_CHECK(isnan(logf(x)) != 0); 818 #endif 819 } 820 821 ATF_TC(logf_inf_neg); 822 ATF_TC_HEAD(logf_inf_neg, tc) 823 { 824 atf_tc_set_md_var(tc, "descr", "Test logf(-Inf) == NaN"); 825 } 826 827 ATF_TC_BODY(logf_inf_neg, tc) 828 { 829 #ifndef __vax__ 830 const float x = -1.0L / 0.0L; 831 const float y = logf(x); 832 833 ATF_CHECK(isnan(y) != 0); 834 #endif 835 } 836 837 ATF_TC(logf_inf_pos); 838 ATF_TC_HEAD(logf_inf_pos, tc) 839 { 840 atf_tc_set_md_var(tc, "descr", "Test logf(+Inf) == +Inf"); 841 } 842 843 ATF_TC_BODY(logf_inf_pos, tc) 844 { 845 #ifndef __vax__ 846 const float x = 1.0L / 0.0L; 847 848 ATF_CHECK(logf(x) == x); 849 #endif 850 } 851 852 ATF_TC(logf_one_pos); 853 ATF_TC_HEAD(logf_one_pos, tc) 854 { 855 atf_tc_set_md_var(tc, "descr", "Test logf(1.0) == +0.0"); 856 } 857 858 ATF_TC_BODY(logf_one_pos, tc) 859 { 860 #ifndef __vax__ 861 const float x = logf(1.0); 862 const float y = 0.0L; 863 864 ATF_CHECK(x == y); 865 ATF_CHECK(signbit(x) == 0); 866 ATF_CHECK(signbit(y) == 0); 867 #endif 868 } 869 870 ATF_TC(logf_zero_neg); 871 ATF_TC_HEAD(logf_zero_neg, tc) 872 { 873 atf_tc_set_md_var(tc, "descr", "Test logf(-0.0) == -HUGE_VALF"); 874 } 875 876 ATF_TC_BODY(logf_zero_neg, tc) 877 { 878 #ifndef __vax__ 879 const float x = -0.0L; 880 881 ATF_CHECK(logf(x) == -HUGE_VALF); 882 #endif 883 } 884 885 ATF_TC(logf_zero_pos); 886 ATF_TC_HEAD(logf_zero_pos, tc) 887 { 888 atf_tc_set_md_var(tc, "descr", "Test logf(+0.0) == -HUGE_VALF"); 889 } 890 891 ATF_TC_BODY(logf_zero_pos, tc) 892 { 893 #ifndef __vax__ 894 const float x = 0.0L; 895 896 ATF_CHECK(logf(x) == -HUGE_VALF); 897 #endif 898 } 899 900 ATF_TP_ADD_TCS(tp) 901 { 902 903 ATF_TP_ADD_TC(tp, log10_base); 904 ATF_TP_ADD_TC(tp, log10_nan); 905 ATF_TP_ADD_TC(tp, log10_inf_neg); 906 ATF_TP_ADD_TC(tp, log10_inf_pos); 907 ATF_TP_ADD_TC(tp, log10_one_pos); 908 ATF_TP_ADD_TC(tp, log10_zero_neg); 909 ATF_TP_ADD_TC(tp, log10_zero_pos); 910 911 ATF_TP_ADD_TC(tp, log10f_base); 912 ATF_TP_ADD_TC(tp, log10f_nan); 913 ATF_TP_ADD_TC(tp, log10f_inf_neg); 914 ATF_TP_ADD_TC(tp, log10f_inf_pos); 915 ATF_TP_ADD_TC(tp, log10f_one_pos); 916 ATF_TP_ADD_TC(tp, log10f_zero_neg); 917 ATF_TP_ADD_TC(tp, log10f_zero_pos); 918 919 ATF_TP_ADD_TC(tp, log1p_nan); 920 ATF_TP_ADD_TC(tp, log1p_inf_neg); 921 ATF_TP_ADD_TC(tp, log1p_inf_pos); 922 ATF_TP_ADD_TC(tp, log1p_one_neg); 923 ATF_TP_ADD_TC(tp, log1p_zero_neg); 924 ATF_TP_ADD_TC(tp, log1p_zero_pos); 925 926 ATF_TP_ADD_TC(tp, log1pf_nan); 927 ATF_TP_ADD_TC(tp, log1pf_inf_neg); 928 ATF_TP_ADD_TC(tp, log1pf_inf_pos); 929 ATF_TP_ADD_TC(tp, log1pf_one_neg); 930 ATF_TP_ADD_TC(tp, log1pf_zero_neg); 931 ATF_TP_ADD_TC(tp, log1pf_zero_pos); 932 933 ATF_TP_ADD_TC(tp, log2_base); 934 ATF_TP_ADD_TC(tp, log2_nan); 935 ATF_TP_ADD_TC(tp, log2_inf_neg); 936 ATF_TP_ADD_TC(tp, log2_inf_pos); 937 ATF_TP_ADD_TC(tp, log2_one_pos); 938 ATF_TP_ADD_TC(tp, log2_zero_neg); 939 ATF_TP_ADD_TC(tp, log2_zero_pos); 940 941 ATF_TP_ADD_TC(tp, log2f_base); 942 ATF_TP_ADD_TC(tp, log2f_nan); 943 ATF_TP_ADD_TC(tp, log2f_inf_neg); 944 ATF_TP_ADD_TC(tp, log2f_inf_pos); 945 ATF_TP_ADD_TC(tp, log2f_one_pos); 946 ATF_TP_ADD_TC(tp, log2f_zero_neg); 947 ATF_TP_ADD_TC(tp, log2f_zero_pos); 948 949 ATF_TP_ADD_TC(tp, log_base); 950 ATF_TP_ADD_TC(tp, log_nan); 951 ATF_TP_ADD_TC(tp, log_inf_neg); 952 ATF_TP_ADD_TC(tp, log_inf_pos); 953 ATF_TP_ADD_TC(tp, log_one_pos); 954 ATF_TP_ADD_TC(tp, log_zero_neg); 955 ATF_TP_ADD_TC(tp, log_zero_pos); 956 957 ATF_TP_ADD_TC(tp, logf_base); 958 ATF_TP_ADD_TC(tp, logf_nan); 959 ATF_TP_ADD_TC(tp, logf_inf_neg); 960 ATF_TP_ADD_TC(tp, logf_inf_pos); 961 ATF_TP_ADD_TC(tp, logf_one_pos); 962 ATF_TP_ADD_TC(tp, logf_zero_neg); 963 ATF_TP_ADD_TC(tp, logf_zero_pos); 964 965 return atf_no_error(); 966 } 967