Home | History | Annotate | Line # | Download | only in libm
t_log.c revision 1.4
      1 /* $NetBSD: t_log.c,v 1.4 2011/09/13 04:24:30 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.4 2011/09/13 04:24:30 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_nan);
     42 ATF_TC_HEAD(log10_nan, tc)
     43 {
     44 	atf_tc_set_md_var(tc, "descr", "Test log10(NaN) == NaN");
     45 }
     46 
     47 ATF_TC_BODY(log10_nan, tc)
     48 {
     49 #ifndef __vax__
     50 	const double x = 0.0L / 0.0L;
     51 
     52 	ATF_CHECK(isnan(x) != 0);
     53 	ATF_CHECK(isnan(log10(x)) != 0);
     54 #endif
     55 }
     56 
     57 ATF_TC(log10_inf_neg);
     58 ATF_TC_HEAD(log10_inf_neg, tc)
     59 {
     60 	atf_tc_set_md_var(tc, "descr", "Test log10(-Inf) == NaN");
     61 }
     62 
     63 ATF_TC_BODY(log10_inf_neg, tc)
     64 {
     65 #ifndef __vax__
     66 	const double x = -1.0L / 0.0L;
     67 	const double y = log10(x);
     68 
     69 	ATF_CHECK(isnan(y) != 0);
     70 #endif
     71 }
     72 
     73 ATF_TC(log10_inf_pos);
     74 ATF_TC_HEAD(log10_inf_pos, tc)
     75 {
     76 	atf_tc_set_md_var(tc, "descr", "Test log10(+Inf) == +Inf");
     77 }
     78 
     79 ATF_TC_BODY(log10_inf_pos, tc)
     80 {
     81 #ifndef __vax__
     82 	const double x = 1.0L / 0.0L;
     83 
     84 	ATF_CHECK(log10(x) == x);
     85 #endif
     86 }
     87 
     88 ATF_TC(log10_one_pos);
     89 ATF_TC_HEAD(log10_one_pos, tc)
     90 {
     91 	atf_tc_set_md_var(tc, "descr", "Test log10(1.0) == +0.0");
     92 }
     93 
     94 ATF_TC_BODY(log10_one_pos, tc)
     95 {
     96 #ifndef __vax__
     97 	const double x = log10(1.0);
     98 	const double y = 0.0L;
     99 
    100 	ATF_CHECK(x == y);
    101 	ATF_CHECK(signbit(x) == 0);
    102 	ATF_CHECK(signbit(y) == 0);
    103 #endif
    104 }
    105 
    106 ATF_TC(log10_zero_neg);
    107 ATF_TC_HEAD(log10_zero_neg, tc)
    108 {
    109 	atf_tc_set_md_var(tc, "descr", "Test log10(-0.0) == -HUGE_VAL");
    110 }
    111 
    112 ATF_TC_BODY(log10_zero_neg, tc)
    113 {
    114 #ifndef __vax__
    115 	const double x = -0.0L;
    116 
    117 	ATF_CHECK(log10(x) == -HUGE_VAL);
    118 #endif
    119 }
    120 
    121 ATF_TC(log10_zero_pos);
    122 ATF_TC_HEAD(log10_zero_pos, tc)
    123 {
    124 	atf_tc_set_md_var(tc, "descr", "Test log10(+0.0) == -HUGE_VAL");
    125 }
    126 
    127 ATF_TC_BODY(log10_zero_pos, tc)
    128 {
    129 #ifndef __vax__
    130 	const double x = 0.0L;
    131 
    132 	ATF_CHECK(log10(x) == -HUGE_VAL);
    133 #endif
    134 }
    135 
    136 /*
    137  * log10f(3)
    138  */
    139 ATF_TC(log10f_nan);
    140 ATF_TC_HEAD(log10f_nan, tc)
    141 {
    142 	atf_tc_set_md_var(tc, "descr", "Test log10f(NaN) == NaN");
    143 }
    144 
    145 ATF_TC_BODY(log10f_nan, tc)
    146 {
    147 #ifndef __vax__
    148 	const float x = 0.0L / 0.0L;
    149 
    150 	ATF_CHECK(isnan(x) != 0);
    151 	ATF_CHECK(isnan(log10f(x)) != 0);
    152 #endif
    153 }
    154 
    155 ATF_TC(log10f_inf_neg);
    156 ATF_TC_HEAD(log10f_inf_neg, tc)
    157 {
    158 	atf_tc_set_md_var(tc, "descr", "Test log10f(-Inf) == NaN");
    159 }
    160 
    161 ATF_TC_BODY(log10f_inf_neg, tc)
    162 {
    163 #ifndef __vax__
    164 	const float x = -1.0L / 0.0L;
    165 	const float y = log10f(x);
    166 
    167 	ATF_CHECK(isnan(y) != 0);
    168 #endif
    169 }
    170 
    171 ATF_TC(log10f_inf_pos);
    172 ATF_TC_HEAD(log10f_inf_pos, tc)
    173 {
    174 	atf_tc_set_md_var(tc, "descr", "Test log10f(+Inf) == +Inf");
    175 }
    176 
    177 ATF_TC_BODY(log10f_inf_pos, tc)
    178 {
    179 #ifndef __vax__
    180 	const float x = 1.0L / 0.0L;
    181 
    182 	ATF_CHECK(log10f(x) == x);
    183 #endif
    184 }
    185 
    186 ATF_TC(log10f_one_pos);
    187 ATF_TC_HEAD(log10f_one_pos, tc)
    188 {
    189 	atf_tc_set_md_var(tc, "descr", "Test log10f(1.0) == +0.0");
    190 }
    191 
    192 ATF_TC_BODY(log10f_one_pos, tc)
    193 {
    194 #ifndef __vax__
    195 	const float x = log10f(1.0);
    196 	const float y = 0.0L;
    197 
    198 	ATF_CHECK(x == y);
    199 	ATF_CHECK(signbit(x) == 0);
    200 	ATF_CHECK(signbit(y) == 0);
    201 #endif
    202 }
    203 
    204 ATF_TC(log10f_zero_neg);
    205 ATF_TC_HEAD(log10f_zero_neg, tc)
    206 {
    207 	atf_tc_set_md_var(tc, "descr", "Test log10f(-0.0) == -HUGE_VALF");
    208 }
    209 
    210 ATF_TC_BODY(log10f_zero_neg, tc)
    211 {
    212 #ifndef __vax__
    213 	const float x = -0.0L;
    214 
    215 	ATF_CHECK(log10f(x) == -HUGE_VALF);
    216 #endif
    217 }
    218 
    219 ATF_TC(log10f_zero_pos);
    220 ATF_TC_HEAD(log10f_zero_pos, tc)
    221 {
    222 	atf_tc_set_md_var(tc, "descr", "Test log10f(+0.0) == -HUGE_VALF");
    223 }
    224 
    225 ATF_TC_BODY(log10f_zero_pos, tc)
    226 {
    227 #ifndef __vax__
    228 	const float x = 0.0L;
    229 
    230 	ATF_CHECK(log10f(x) == -HUGE_VALF);
    231 #endif
    232 }
    233 
    234 /*
    235  * log1p(3)
    236  */
    237 ATF_TC(log1p_nan);
    238 ATF_TC_HEAD(log1p_nan, tc)
    239 {
    240 	atf_tc_set_md_var(tc, "descr", "Test log1p(NaN) == NaN");
    241 }
    242 
    243 ATF_TC_BODY(log1p_nan, tc)
    244 {
    245 #ifndef __vax__
    246 	const double x = 0.0L / 0.0L;
    247 
    248 	ATF_CHECK(isnan(x) != 0);
    249 	ATF_CHECK(isnan(log1p(x)) != 0);
    250 #endif
    251 }
    252 
    253 ATF_TC(log1p_inf_neg);
    254 ATF_TC_HEAD(log1p_inf_neg, tc)
    255 {
    256 	atf_tc_set_md_var(tc, "descr", "Test log1p(-Inf) == NaN");
    257 }
    258 
    259 ATF_TC_BODY(log1p_inf_neg, tc)
    260 {
    261 #ifndef __vax__
    262 	const double x = -1.0L / 0.0L;
    263 	const double y = log1p(x);
    264 
    265 	if (isnan(y) == 0) {
    266 		atf_tc_expect_fail("PR lib/45362");
    267 		atf_tc_fail("log1p(-Inf) != NaN");
    268 	}
    269 #endif
    270 }
    271 
    272 ATF_TC(log1p_inf_pos);
    273 ATF_TC_HEAD(log1p_inf_pos, tc)
    274 {
    275 	atf_tc_set_md_var(tc, "descr", "Test log1p(+Inf) == +Inf");
    276 }
    277 
    278 ATF_TC_BODY(log1p_inf_pos, tc)
    279 {
    280 #ifndef __vax__
    281 	const double x = 1.0L / 0.0L;
    282 
    283 	ATF_CHECK(log1p(x) == x);
    284 #endif
    285 }
    286 
    287 ATF_TC(log1p_one_neg);
    288 ATF_TC_HEAD(log1p_one_neg, tc)
    289 {
    290 	atf_tc_set_md_var(tc, "descr", "Test log1p(-1.0) == -HUGE_VAL");
    291 }
    292 
    293 ATF_TC_BODY(log1p_one_neg, tc)
    294 {
    295 #ifndef __vax__
    296 	const double x = log1p(-1.0);
    297 
    298 	if (x != -HUGE_VAL) {
    299 		atf_tc_expect_fail("PR lib/45362");
    300 		atf_tc_fail("log1p(-1.0) != -HUGE_VAL");
    301 	}
    302 #endif
    303 }
    304 
    305 ATF_TC(log1p_zero_neg);
    306 ATF_TC_HEAD(log1p_zero_neg, tc)
    307 {
    308 	atf_tc_set_md_var(tc, "descr", "Test log1p(-0.0) == -0.0");
    309 }
    310 
    311 ATF_TC_BODY(log1p_zero_neg, tc)
    312 {
    313 #ifndef __vax__
    314 	const double x = -0.0L;
    315 
    316 	ATF_CHECK(log1p(x) == x);
    317 #endif
    318 }
    319 
    320 ATF_TC(log1p_zero_pos);
    321 ATF_TC_HEAD(log1p_zero_pos, tc)
    322 {
    323 	atf_tc_set_md_var(tc, "descr", "Test log1p(+0.0) == +0.0");
    324 }
    325 
    326 ATF_TC_BODY(log1p_zero_pos, tc)
    327 {
    328 #ifndef __vax__
    329 	const double x = 0.0L;
    330 
    331 	ATF_CHECK(log1p(x) == x);
    332 #endif
    333 }
    334 
    335 /*
    336  * log1pf(3)
    337  */
    338 ATF_TC(log1pf_nan);
    339 ATF_TC_HEAD(log1pf_nan, tc)
    340 {
    341 	atf_tc_set_md_var(tc, "descr", "Test log1pf(NaN) == NaN");
    342 }
    343 
    344 ATF_TC_BODY(log1pf_nan, tc)
    345 {
    346 #ifndef __vax__
    347 	const float x = 0.0L / 0.0L;
    348 
    349 	ATF_CHECK(isnan(x) != 0);
    350 	ATF_CHECK(isnan(log1pf(x)) != 0);
    351 #endif
    352 }
    353 
    354 ATF_TC(log1pf_inf_neg);
    355 ATF_TC_HEAD(log1pf_inf_neg, tc)
    356 {
    357 	atf_tc_set_md_var(tc, "descr", "Test log1pf(-Inf) == NaN");
    358 }
    359 
    360 ATF_TC_BODY(log1pf_inf_neg, tc)
    361 {
    362 #ifndef __vax__
    363 	const float x = -1.0L / 0.0L;
    364 	const float y = log1pf(x);
    365 
    366 	if (isnan(y) == 0) {
    367 		atf_tc_expect_fail("PR lib/45362");
    368 		atf_tc_fail("log1pf(-Inf) != NaN");
    369 	}
    370 #endif
    371 }
    372 
    373 ATF_TC(log1pf_inf_pos);
    374 ATF_TC_HEAD(log1pf_inf_pos, tc)
    375 {
    376 	atf_tc_set_md_var(tc, "descr", "Test log1pf(+Inf) == +Inf");
    377 }
    378 
    379 ATF_TC_BODY(log1pf_inf_pos, tc)
    380 {
    381 #ifndef __vax__
    382 	const float x = 1.0L / 0.0L;
    383 
    384 	ATF_CHECK(log1pf(x) == x);
    385 #endif
    386 }
    387 
    388 ATF_TC(log1pf_one_neg);
    389 ATF_TC_HEAD(log1pf_one_neg, tc)
    390 {
    391 	atf_tc_set_md_var(tc, "descr", "Test log1pf(-1.0) == -HUGE_VALF");
    392 }
    393 
    394 ATF_TC_BODY(log1pf_one_neg, tc)
    395 {
    396 #ifndef __vax__
    397 	const float x = log1pf(-1.0);
    398 
    399 	if (x != -HUGE_VALF) {
    400 		atf_tc_expect_fail("PR lib/45362");
    401 		atf_tc_fail("log1pf(-1.0) != -HUGE_VALF");
    402 	}
    403 #endif
    404 }
    405 
    406 ATF_TC(log1pf_zero_neg);
    407 ATF_TC_HEAD(log1pf_zero_neg, tc)
    408 {
    409 	atf_tc_set_md_var(tc, "descr", "Test log1pf(-0.0) == -0.0");
    410 }
    411 
    412 ATF_TC_BODY(log1pf_zero_neg, tc)
    413 {
    414 #ifndef __vax__
    415 	const float x = -0.0L;
    416 
    417 	ATF_CHECK(log1pf(x) == x);
    418 #endif
    419 }
    420 
    421 ATF_TC(log1pf_zero_pos);
    422 ATF_TC_HEAD(log1pf_zero_pos, tc)
    423 {
    424 	atf_tc_set_md_var(tc, "descr", "Test log1pf(+0.0) == +0.0");
    425 }
    426 
    427 ATF_TC_BODY(log1pf_zero_pos, tc)
    428 {
    429 #ifndef __vax__
    430 	const float x = 0.0L;
    431 
    432 	ATF_CHECK(log1pf(x) == x);
    433 #endif
    434 }
    435 
    436 /*
    437  * log2(3)
    438  */
    439 ATF_TC(log2_nan);
    440 ATF_TC_HEAD(log2_nan, tc)
    441 {
    442 	atf_tc_set_md_var(tc, "descr", "Test log2(NaN) == NaN");
    443 }
    444 
    445 ATF_TC_BODY(log2_nan, tc)
    446 {
    447 #ifndef __vax__
    448 	const double x = 0.0L / 0.0L;
    449 
    450 	ATF_CHECK(isnan(x) != 0);
    451 	ATF_CHECK(isnan(log2(x)) != 0);
    452 #endif
    453 }
    454 
    455 ATF_TC(log2_inf_neg);
    456 ATF_TC_HEAD(log2_inf_neg, tc)
    457 {
    458 	atf_tc_set_md_var(tc, "descr", "Test log2(-Inf) == NaN");
    459 }
    460 
    461 ATF_TC_BODY(log2_inf_neg, tc)
    462 {
    463 #ifndef __vax__
    464 	const double x = -1.0L / 0.0L;
    465 	const double y = log2(x);
    466 
    467 	ATF_CHECK(isnan(y) != 0);
    468 #endif
    469 }
    470 
    471 ATF_TC(log2_inf_pos);
    472 ATF_TC_HEAD(log2_inf_pos, tc)
    473 {
    474 	atf_tc_set_md_var(tc, "descr", "Test log2(+Inf) == +Inf");
    475 }
    476 
    477 ATF_TC_BODY(log2_inf_pos, tc)
    478 {
    479 #ifndef __vax__
    480 	const double x = 1.0L / 0.0L;
    481 
    482 	ATF_CHECK(log2(x) == x);
    483 #endif
    484 }
    485 
    486 ATF_TC(log2_one_pos);
    487 ATF_TC_HEAD(log2_one_pos, tc)
    488 {
    489 	atf_tc_set_md_var(tc, "descr", "Test log2(1.0) == +0.0");
    490 }
    491 
    492 ATF_TC_BODY(log2_one_pos, tc)
    493 {
    494 #ifndef __vax__
    495 	const double x = log2(1.0);
    496 	const double y = 0.0L;
    497 
    498 	ATF_CHECK(x == y);
    499 	ATF_CHECK(signbit(x) == 0);
    500 	ATF_CHECK(signbit(y) == 0);
    501 #endif
    502 }
    503 
    504 ATF_TC(log2_zero_neg);
    505 ATF_TC_HEAD(log2_zero_neg, tc)
    506 {
    507 	atf_tc_set_md_var(tc, "descr", "Test log2(-0.0) == -HUGE_VAL");
    508 }
    509 
    510 ATF_TC_BODY(log2_zero_neg, tc)
    511 {
    512 #ifndef __vax__
    513 	const double x = -0.0L;
    514 
    515 	ATF_CHECK(log2(x) == -HUGE_VAL);
    516 #endif
    517 }
    518 
    519 ATF_TC(log2_zero_pos);
    520 ATF_TC_HEAD(log2_zero_pos, tc)
    521 {
    522 	atf_tc_set_md_var(tc, "descr", "Test log2(+0.0) == -HUGE_VAL");
    523 }
    524 
    525 ATF_TC_BODY(log2_zero_pos, tc)
    526 {
    527 #ifndef __vax__
    528 	const double x = 0.0L;
    529 
    530 	ATF_CHECK(log2(x) == -HUGE_VAL);
    531 #endif
    532 }
    533 
    534 /*
    535  * log2f(3)
    536  */
    537 ATF_TC(log2f_nan);
    538 ATF_TC_HEAD(log2f_nan, tc)
    539 {
    540 	atf_tc_set_md_var(tc, "descr", "Test log2f(NaN) == NaN");
    541 }
    542 
    543 ATF_TC_BODY(log2f_nan, tc)
    544 {
    545 #ifndef __vax__
    546 	const float x = 0.0L / 0.0L;
    547 
    548 	ATF_CHECK(isnan(x) != 0);
    549 	ATF_CHECK(isnan(log2f(x)) != 0);
    550 #endif
    551 }
    552 
    553 ATF_TC(log2f_inf_neg);
    554 ATF_TC_HEAD(log2f_inf_neg, tc)
    555 {
    556 	atf_tc_set_md_var(tc, "descr", "Test log2f(-Inf) == NaN");
    557 }
    558 
    559 ATF_TC_BODY(log2f_inf_neg, tc)
    560 {
    561 #ifndef __vax__
    562 	const float x = -1.0L / 0.0L;
    563 	const float y = log2f(x);
    564 
    565 	ATF_CHECK(isnan(y) != 0);
    566 #endif
    567 }
    568 
    569 ATF_TC(log2f_inf_pos);
    570 ATF_TC_HEAD(log2f_inf_pos, tc)
    571 {
    572 	atf_tc_set_md_var(tc, "descr", "Test log2f(+Inf) == +Inf");
    573 }
    574 
    575 ATF_TC_BODY(log2f_inf_pos, tc)
    576 {
    577 #ifndef __vax__
    578 	const float x = 1.0L / 0.0L;
    579 
    580 	ATF_CHECK(log2f(x) == x);
    581 #endif
    582 }
    583 
    584 ATF_TC(log2f_one_pos);
    585 ATF_TC_HEAD(log2f_one_pos, tc)
    586 {
    587 	atf_tc_set_md_var(tc, "descr", "Test log2f(1.0) == +0.0");
    588 }
    589 
    590 ATF_TC_BODY(log2f_one_pos, tc)
    591 {
    592 #ifndef __vax__
    593 	const float x = log2f(1.0);
    594 	const float y = 0.0L;
    595 
    596 	ATF_CHECK(x == y);
    597 	ATF_CHECK(signbit(x) == 0);
    598 	ATF_CHECK(signbit(y) == 0);
    599 #endif
    600 }
    601 
    602 ATF_TC(log2f_zero_neg);
    603 ATF_TC_HEAD(log2f_zero_neg, tc)
    604 {
    605 	atf_tc_set_md_var(tc, "descr", "Test log2f(-0.0) == -HUGE_VALF");
    606 }
    607 
    608 ATF_TC_BODY(log2f_zero_neg, tc)
    609 {
    610 #ifndef __vax__
    611 	const float x = -0.0L;
    612 
    613 	ATF_CHECK(log2f(x) == -HUGE_VALF);
    614 #endif
    615 }
    616 
    617 ATF_TC(log2f_zero_pos);
    618 ATF_TC_HEAD(log2f_zero_pos, tc)
    619 {
    620 	atf_tc_set_md_var(tc, "descr", "Test log2f(+0.0) == -HUGE_VALF");
    621 }
    622 
    623 ATF_TC_BODY(log2f_zero_pos, tc)
    624 {
    625 #ifndef __vax__
    626 	const float x = 0.0L;
    627 
    628 	ATF_CHECK(log2f(x) == -HUGE_VALF);
    629 #endif
    630 }
    631 
    632 /*
    633  * log(3)
    634  */
    635 ATF_TC(log_nan);
    636 ATF_TC_HEAD(log_nan, tc)
    637 {
    638 	atf_tc_set_md_var(tc, "descr", "Test log(NaN) == NaN");
    639 }
    640 
    641 ATF_TC_BODY(log_nan, tc)
    642 {
    643 #ifndef __vax__
    644 	const double x = 0.0L / 0.0L;
    645 
    646 	ATF_CHECK(isnan(x) != 0);
    647 	ATF_CHECK(isnan(log(x)) != 0);
    648 #endif
    649 }
    650 
    651 ATF_TC(log_inf_neg);
    652 ATF_TC_HEAD(log_inf_neg, tc)
    653 {
    654 	atf_tc_set_md_var(tc, "descr", "Test log(-Inf) == NaN");
    655 }
    656 
    657 ATF_TC_BODY(log_inf_neg, tc)
    658 {
    659 #ifndef __vax__
    660 	const double x = -1.0L / 0.0L;
    661 	const double y = log(x);
    662 
    663 	ATF_CHECK(isnan(y) != 0);
    664 #endif
    665 }
    666 
    667 ATF_TC(log_inf_pos);
    668 ATF_TC_HEAD(log_inf_pos, tc)
    669 {
    670 	atf_tc_set_md_var(tc, "descr", "Test log(+Inf) == +Inf");
    671 }
    672 
    673 ATF_TC_BODY(log_inf_pos, tc)
    674 {
    675 #ifndef __vax__
    676 	const double x = 1.0L / 0.0L;
    677 
    678 	ATF_CHECK(log(x) == x);
    679 #endif
    680 }
    681 
    682 ATF_TC(log_one_pos);
    683 ATF_TC_HEAD(log_one_pos, tc)
    684 {
    685 	atf_tc_set_md_var(tc, "descr", "Test log(1.0) == +0.0");
    686 }
    687 
    688 ATF_TC_BODY(log_one_pos, tc)
    689 {
    690 #ifndef __vax__
    691 	const double x = log(1.0);
    692 	const double y = 0.0L;
    693 
    694 	ATF_CHECK(x == y);
    695 	ATF_CHECK(signbit(x) == 0);
    696 	ATF_CHECK(signbit(y) == 0);
    697 #endif
    698 }
    699 
    700 ATF_TC(log_zero_neg);
    701 ATF_TC_HEAD(log_zero_neg, tc)
    702 {
    703 	atf_tc_set_md_var(tc, "descr", "Test log(-0.0) == -HUGE_VAL");
    704 }
    705 
    706 ATF_TC_BODY(log_zero_neg, tc)
    707 {
    708 #ifndef __vax__
    709 	const double x = -0.0L;
    710 
    711 	ATF_CHECK(log(x) == -HUGE_VAL);
    712 #endif
    713 }
    714 
    715 ATF_TC(log_zero_pos);
    716 ATF_TC_HEAD(log_zero_pos, tc)
    717 {
    718 	atf_tc_set_md_var(tc, "descr", "Test log(+0.0) == -HUGE_VAL");
    719 }
    720 
    721 ATF_TC_BODY(log_zero_pos, tc)
    722 {
    723 #ifndef __vax__
    724 	const double x = 0.0L;
    725 
    726 	ATF_CHECK(log(x) == -HUGE_VAL);
    727 #endif
    728 }
    729 
    730 
    731 /*
    732  * logf(3)
    733  */
    734 ATF_TC(logf_nan);
    735 ATF_TC_HEAD(logf_nan, tc)
    736 {
    737 	atf_tc_set_md_var(tc, "descr", "Test logf(NaN) == NaN");
    738 }
    739 
    740 ATF_TC_BODY(logf_nan, tc)
    741 {
    742 #ifndef __vax__
    743 	const float x = 0.0L / 0.0L;
    744 
    745 	ATF_CHECK(isnan(x) != 0);
    746 	ATF_CHECK(isnan(logf(x)) != 0);
    747 #endif
    748 }
    749 
    750 ATF_TC(logf_inf_neg);
    751 ATF_TC_HEAD(logf_inf_neg, tc)
    752 {
    753 	atf_tc_set_md_var(tc, "descr", "Test logf(-Inf) == NaN");
    754 }
    755 
    756 ATF_TC_BODY(logf_inf_neg, tc)
    757 {
    758 #ifndef __vax__
    759 	const float x = -1.0L / 0.0L;
    760 	const float y = logf(x);
    761 
    762 	ATF_CHECK(isnan(y) != 0);
    763 #endif
    764 }
    765 
    766 ATF_TC(logf_inf_pos);
    767 ATF_TC_HEAD(logf_inf_pos, tc)
    768 {
    769 	atf_tc_set_md_var(tc, "descr", "Test logf(+Inf) == +Inf");
    770 }
    771 
    772 ATF_TC_BODY(logf_inf_pos, tc)
    773 {
    774 #ifndef __vax__
    775 	const float x = 1.0L / 0.0L;
    776 
    777 	ATF_CHECK(logf(x) == x);
    778 #endif
    779 }
    780 
    781 ATF_TC(logf_one_pos);
    782 ATF_TC_HEAD(logf_one_pos, tc)
    783 {
    784 	atf_tc_set_md_var(tc, "descr", "Test logf(1.0) == +0.0");
    785 }
    786 
    787 ATF_TC_BODY(logf_one_pos, tc)
    788 {
    789 #ifndef __vax__
    790 	const float x = logf(1.0);
    791 	const float y = 0.0L;
    792 
    793 	ATF_CHECK(x == y);
    794 	ATF_CHECK(signbit(x) == 0);
    795 	ATF_CHECK(signbit(y) == 0);
    796 #endif
    797 }
    798 
    799 ATF_TC(logf_zero_neg);
    800 ATF_TC_HEAD(logf_zero_neg, tc)
    801 {
    802 	atf_tc_set_md_var(tc, "descr", "Test logf(-0.0) == -HUGE_VALF");
    803 }
    804 
    805 ATF_TC_BODY(logf_zero_neg, tc)
    806 {
    807 #ifndef __vax__
    808 	const float x = -0.0L;
    809 
    810 	ATF_CHECK(logf(x) == -HUGE_VALF);
    811 #endif
    812 }
    813 
    814 ATF_TC(logf_zero_pos);
    815 ATF_TC_HEAD(logf_zero_pos, tc)
    816 {
    817 	atf_tc_set_md_var(tc, "descr", "Test logf(+0.0) == -HUGE_VALF");
    818 }
    819 
    820 ATF_TC_BODY(logf_zero_pos, tc)
    821 {
    822 #ifndef __vax__
    823 	const float x = 0.0L;
    824 
    825 	ATF_CHECK(logf(x) == -HUGE_VALF);
    826 #endif
    827 }
    828 
    829 ATF_TP_ADD_TCS(tp)
    830 {
    831 
    832 	ATF_TP_ADD_TC(tp, log10_nan);
    833 	ATF_TP_ADD_TC(tp, log10_inf_neg);
    834 	ATF_TP_ADD_TC(tp, log10_inf_pos);
    835 	ATF_TP_ADD_TC(tp, log10_one_pos);
    836 	ATF_TP_ADD_TC(tp, log10_zero_neg);
    837 	ATF_TP_ADD_TC(tp, log10_zero_pos);
    838 
    839 	ATF_TP_ADD_TC(tp, log10f_nan);
    840 	ATF_TP_ADD_TC(tp, log10f_inf_neg);
    841 	ATF_TP_ADD_TC(tp, log10f_inf_pos);
    842 	ATF_TP_ADD_TC(tp, log10f_one_pos);
    843 	ATF_TP_ADD_TC(tp, log10f_zero_neg);
    844 	ATF_TP_ADD_TC(tp, log10f_zero_pos);
    845 
    846 	ATF_TP_ADD_TC(tp, log1p_nan);
    847 	ATF_TP_ADD_TC(tp, log1p_inf_neg);
    848 	ATF_TP_ADD_TC(tp, log1p_inf_pos);
    849 	ATF_TP_ADD_TC(tp, log1p_one_neg);
    850 	ATF_TP_ADD_TC(tp, log1p_zero_neg);
    851 	ATF_TP_ADD_TC(tp, log1p_zero_pos);
    852 
    853 	ATF_TP_ADD_TC(tp, log1pf_nan);
    854 	ATF_TP_ADD_TC(tp, log1pf_inf_neg);
    855 	ATF_TP_ADD_TC(tp, log1pf_inf_pos);
    856 	ATF_TP_ADD_TC(tp, log1pf_one_neg);
    857 	ATF_TP_ADD_TC(tp, log1pf_zero_neg);
    858 	ATF_TP_ADD_TC(tp, log1pf_zero_pos);
    859 
    860 	ATF_TP_ADD_TC(tp, log2_nan);
    861 	ATF_TP_ADD_TC(tp, log2_inf_neg);
    862 	ATF_TP_ADD_TC(tp, log2_inf_pos);
    863 	ATF_TP_ADD_TC(tp, log2_one_pos);
    864 	ATF_TP_ADD_TC(tp, log2_zero_neg);
    865 	ATF_TP_ADD_TC(tp, log2_zero_pos);
    866 
    867 	ATF_TP_ADD_TC(tp, log2f_nan);
    868 	ATF_TP_ADD_TC(tp, log2f_inf_neg);
    869 	ATF_TP_ADD_TC(tp, log2f_inf_pos);
    870 	ATF_TP_ADD_TC(tp, log2f_one_pos);
    871 	ATF_TP_ADD_TC(tp, log2f_zero_neg);
    872 	ATF_TP_ADD_TC(tp, log2f_zero_pos);
    873 
    874 	ATF_TP_ADD_TC(tp, log_nan);
    875 	ATF_TP_ADD_TC(tp, log_inf_neg);
    876 	ATF_TP_ADD_TC(tp, log_inf_pos);
    877 	ATF_TP_ADD_TC(tp, log_one_pos);
    878 	ATF_TP_ADD_TC(tp, log_zero_neg);
    879 	ATF_TP_ADD_TC(tp, log_zero_pos);
    880 
    881 	ATF_TP_ADD_TC(tp, logf_nan);
    882 	ATF_TP_ADD_TC(tp, logf_inf_neg);
    883 	ATF_TP_ADD_TC(tp, logf_inf_pos);
    884 	ATF_TP_ADD_TC(tp, logf_one_pos);
    885 	ATF_TP_ADD_TC(tp, logf_zero_neg);
    886 	ATF_TP_ADD_TC(tp, logf_zero_pos);
    887 
    888 	return atf_no_error();
    889 }
    890