Home | History | Annotate | Line # | Download | only in libm
t_ceil.c revision 1.9
      1 /* $NetBSD: t_ceil.c,v 1.9 2013/11/13 12:58:11 joerg 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_ceil.c,v 1.9 2013/11/13 12:58:11 joerg Exp $");
     33 
     34 #include <atf-c.h>
     35 #include <math.h>
     36 #include <limits.h>
     37 #include <stdio.h>
     38 
     39 #ifdef __vax__
     40 #define SMALL_NUM	1.0e-38
     41 #else
     42 #define SMALL_NUM	1.0e-40
     43 #endif
     44 
     45 /*
     46  * ceil(3)
     47  */
     48 ATF_TC(ceil_basic);
     49 ATF_TC_HEAD(ceil_basic, tc)
     50 {
     51 	atf_tc_set_md_var(tc, "descr", "A basic test of ceil(3)");
     52 }
     53 
     54 ATF_TC_BODY(ceil_basic, tc)
     55 {
     56 	const double x = 0.999999999999999;
     57 	const double y = 0.000000000000001;
     58 
     59 	ATF_CHECK(fabs(ceil(x) - 1) < SMALL_NUM);
     60 	ATF_CHECK(fabs(ceil(y) - 1) < SMALL_NUM);
     61 }
     62 
     63 ATF_TC(ceil_nan);
     64 ATF_TC_HEAD(ceil_nan, tc)
     65 {
     66 	atf_tc_set_md_var(tc, "descr", "Test ceil(NaN) == NaN");
     67 }
     68 
     69 ATF_TC_BODY(ceil_nan, tc)
     70 {
     71 #ifndef __vax__
     72 	const double x = 0.0L / 0.0L;
     73 
     74 	ATF_CHECK(isnan(ceil(x)) != 0);
     75 #endif
     76 }
     77 
     78 ATF_TC(ceil_inf_neg);
     79 ATF_TC_HEAD(ceil_inf_neg, tc)
     80 {
     81 	atf_tc_set_md_var(tc, "descr", "Test ceil(-Inf) == -Inf");
     82 }
     83 
     84 ATF_TC_BODY(ceil_inf_neg, tc)
     85 {
     86 #ifndef __vax__
     87 	const double x = -1.0L / 0.0L;
     88 	double y = ceil(x);
     89 
     90 	if (isinf(y) == 0 || signbit(y) == 0)
     91 		atf_tc_fail_nonfatal("ceil(-Inf) != -Inf");
     92 #endif
     93 }
     94 
     95 ATF_TC(ceil_inf_pos);
     96 ATF_TC_HEAD(ceil_inf_pos, tc)
     97 {
     98 	atf_tc_set_md_var(tc, "descr", "Test ceil(+Inf) == +Inf");
     99 }
    100 
    101 ATF_TC_BODY(ceil_inf_pos, tc)
    102 {
    103 #ifndef __vax__
    104 	const double x = 1.0L / 0.0L;
    105 	double y = ceil(x);
    106 
    107 	if (isinf(y) == 0 || signbit(y) != 0)
    108 		atf_tc_fail_nonfatal("ceil(+Inf) != +Inf");
    109 #endif
    110 }
    111 
    112 ATF_TC(ceil_zero_neg);
    113 ATF_TC_HEAD(ceil_zero_neg, tc)
    114 {
    115 	atf_tc_set_md_var(tc, "descr", "Test ceil(-0.0) == -0.0");
    116 }
    117 
    118 ATF_TC_BODY(ceil_zero_neg, tc)
    119 {
    120 #ifndef __vax__
    121 	const double x = -0.0L;
    122 	double y = ceil(x);
    123 
    124 	if (fabs(y) > 0.0 || signbit(y) == 0)
    125 		atf_tc_fail_nonfatal("ceil(-0.0) != -0.0");
    126 #endif
    127 }
    128 
    129 ATF_TC(ceil_zero_pos);
    130 ATF_TC_HEAD(ceil_zero_pos, tc)
    131 {
    132 	atf_tc_set_md_var(tc, "descr", "Test ceil(+0.0) == +0.0");
    133 }
    134 
    135 ATF_TC_BODY(ceil_zero_pos, tc)
    136 {
    137 #ifndef __vax__
    138 	const double x = 0.0L;
    139 	double y = ceil(x);
    140 
    141 	if (fabs(y) > 0.0 || signbit(y) != 0)
    142 		atf_tc_fail_nonfatal("ceil(+0.0) != +0.0");
    143 #endif
    144 }
    145 
    146 /*
    147  * ceilf(3)
    148  */
    149 ATF_TC(ceilf_basic);
    150 ATF_TC_HEAD(ceilf_basic, tc)
    151 {
    152 	atf_tc_set_md_var(tc, "descr", "A basic test of ceilf(3)");
    153 }
    154 
    155 ATF_TC_BODY(ceilf_basic, tc)
    156 {
    157 	const float x = 0.9999999;
    158 	const float y = 0.0000001;
    159 
    160 	ATF_CHECK(fabsf(ceilf(x) - 1) < SMALL_NUM);
    161 	ATF_CHECK(fabsf(ceilf(y) - 1) < SMALL_NUM);
    162 }
    163 
    164 ATF_TC(ceilf_nan);
    165 ATF_TC_HEAD(ceilf_nan, tc)
    166 {
    167 	atf_tc_set_md_var(tc, "descr", "Test ceilf(NaN) == NaN");
    168 }
    169 
    170 ATF_TC_BODY(ceilf_nan, tc)
    171 {
    172 #ifndef __vax__
    173 	const float x = 0.0L / 0.0L;
    174 
    175 	ATF_CHECK(isnan(ceilf(x)) != 0);
    176 #endif
    177 }
    178 
    179 ATF_TC(ceilf_inf_neg);
    180 ATF_TC_HEAD(ceilf_inf_neg, tc)
    181 {
    182 	atf_tc_set_md_var(tc, "descr", "Test ceilf(-Inf) == -Inf");
    183 }
    184 
    185 ATF_TC_BODY(ceilf_inf_neg, tc)
    186 {
    187 #ifndef __vax__
    188 	const float x = -1.0L / 0.0L;
    189 	float y = ceilf(x);
    190 
    191 	if (isinf(y) == 0 || signbit(y) == 0)
    192 		atf_tc_fail_nonfatal("ceilf(-Inf) != -Inf");
    193 #endif
    194 }
    195 
    196 ATF_TC(ceilf_inf_pos);
    197 ATF_TC_HEAD(ceilf_inf_pos, tc)
    198 {
    199 	atf_tc_set_md_var(tc, "descr", "Test ceilf(+Inf) == +Inf");
    200 }
    201 
    202 ATF_TC_BODY(ceilf_inf_pos, tc)
    203 {
    204 #ifndef __vax__
    205 	const float x = 1.0L / 0.0L;
    206 	float y = ceilf(x);
    207 
    208 	if (isinf(y) == 0 || signbit(y) != 0)
    209 		atf_tc_fail_nonfatal("ceilf(+Inf) != +Inf");
    210 #endif
    211 }
    212 
    213 ATF_TC(ceilf_zero_neg);
    214 ATF_TC_HEAD(ceilf_zero_neg, tc)
    215 {
    216 	atf_tc_set_md_var(tc, "descr", "Test ceilf(-0.0) == -0.0");
    217 }
    218 
    219 ATF_TC_BODY(ceilf_zero_neg, tc)
    220 {
    221 #ifndef __vax__
    222 	const float x = -0.0L;
    223 	float y = ceilf(x);
    224 
    225 	if (fabsf(y) > 0.0 || signbit(y) == 0)
    226 		atf_tc_fail_nonfatal("ceilf(-0.0) != -0.0");
    227 #endif
    228 }
    229 
    230 ATF_TC(ceilf_zero_pos);
    231 ATF_TC_HEAD(ceilf_zero_pos, tc)
    232 {
    233 	atf_tc_set_md_var(tc, "descr", "Test ceilf(+0.0) == +0.0");
    234 }
    235 
    236 ATF_TC_BODY(ceilf_zero_pos, tc)
    237 {
    238 #ifndef __vax__
    239 	const float x = 0.0L;
    240 	float y = ceilf(x);
    241 
    242 	if (fabsf(y) > 0.0 || signbit(y) != 0)
    243 		atf_tc_fail_nonfatal("ceilf(+0.0) != +0.0");
    244 #endif
    245 }
    246 
    247 /*
    248  * ceill(3)
    249  */
    250 ATF_TC(ceill_basic);
    251 ATF_TC_HEAD(ceill_basic, tc)
    252 {
    253 	atf_tc_set_md_var(tc, "descr", "A basic test of ceill(3)");
    254 }
    255 
    256 ATF_TC_BODY(ceill_basic, tc)
    257 {
    258 	const long double x = 0.9999999;
    259 	const long double y = 0.0000001;
    260 
    261 	ATF_CHECK(fabsl(ceill(x) - 1) < SMALL_NUM);
    262 	ATF_CHECK(fabsl(ceill(y) - 1) < SMALL_NUM);
    263 }
    264 
    265 ATF_TC(ceill_nan);
    266 ATF_TC_HEAD(ceill_nan, tc)
    267 {
    268 	atf_tc_set_md_var(tc, "descr", "Test ceill(NaN) == NaN");
    269 }
    270 
    271 ATF_TC_BODY(ceill_nan, tc)
    272 {
    273 #ifndef __vax__
    274 	const long double x = 0.0L / 0.0L;
    275 
    276 	ATF_CHECK(isnan(ceill(x)) != 0);
    277 #endif
    278 }
    279 
    280 ATF_TC(ceill_inf_neg);
    281 ATF_TC_HEAD(ceill_inf_neg, tc)
    282 {
    283 	atf_tc_set_md_var(tc, "descr", "Test ceill(-Inf) == -Inf");
    284 }
    285 
    286 ATF_TC_BODY(ceill_inf_neg, tc)
    287 {
    288 #ifndef __vax__
    289 	const long double x = -1.0L / 0.0L;
    290 	long double y = ceill(x);
    291 
    292 	if (isinf(y) == 0 || signbit(y) == 0)
    293 		atf_tc_fail_nonfatal("ceill(-Inf) != -Inf");
    294 #endif
    295 }
    296 
    297 ATF_TC(ceill_inf_pos);
    298 ATF_TC_HEAD(ceill_inf_pos, tc)
    299 {
    300 	atf_tc_set_md_var(tc, "descr", "Test ceill(+Inf) == +Inf");
    301 }
    302 
    303 ATF_TC_BODY(ceill_inf_pos, tc)
    304 {
    305 #ifndef __vax__
    306 	const long double x = 1.0L / 0.0L;
    307 	long double y = ceill(x);
    308 
    309 	if (isinf(y) == 0 || signbit(y) != 0)
    310 		atf_tc_fail_nonfatal("ceill(+Inf) != +Inf");
    311 #endif
    312 }
    313 
    314 ATF_TC(ceill_zero_neg);
    315 ATF_TC_HEAD(ceill_zero_neg, tc)
    316 {
    317 	atf_tc_set_md_var(tc, "descr", "Test ceill(-0.0) == -0.0");
    318 }
    319 
    320 ATF_TC_BODY(ceill_zero_neg, tc)
    321 {
    322 #ifndef __vax__
    323 	const long double x = -0.0L;
    324 	long double y = ceill(x);
    325 
    326 	if (fabsl(y) > 0.0 || signbit(y) == 0)
    327 		atf_tc_fail_nonfatal("ceill(-0.0) != -0.0");
    328 #endif
    329 }
    330 
    331 ATF_TC(ceill_zero_pos);
    332 ATF_TC_HEAD(ceill_zero_pos, tc)
    333 {
    334 	atf_tc_set_md_var(tc, "descr", "Test ceill(+0.0) == +0.0");
    335 }
    336 
    337 ATF_TC_BODY(ceill_zero_pos, tc)
    338 {
    339 #ifndef __vax__
    340 	const long double x = 0.0L;
    341 	long double y = ceill(x);
    342 
    343 	if (fabsl(y) > 0.0 || signbit(y) != 0)
    344 		atf_tc_fail_nonfatal("ceill(+0.0) != +0.0");
    345 #endif
    346 }
    347 
    348 /*
    349  * floor(3)
    350  */
    351 ATF_TC(floor_basic);
    352 ATF_TC_HEAD(floor_basic, tc)
    353 {
    354 	atf_tc_set_md_var(tc, "descr", "A basic test of floor(3)");
    355 }
    356 
    357 ATF_TC_BODY(floor_basic, tc)
    358 {
    359 	const double x = 0.999999999999999;
    360 	const double y = 0.000000000000001;
    361 
    362 	ATF_CHECK(floor(x) < SMALL_NUM);
    363 	ATF_CHECK(floor(y) < SMALL_NUM);
    364 }
    365 
    366 ATF_TC(floor_nan);
    367 ATF_TC_HEAD(floor_nan, tc)
    368 {
    369 	atf_tc_set_md_var(tc, "descr", "Test floor(NaN) == NaN");
    370 }
    371 
    372 ATF_TC_BODY(floor_nan, tc)
    373 {
    374 #ifndef __vax__
    375 	const double x = 0.0L / 0.0L;
    376 
    377 	ATF_CHECK(isnan(floor(x)) != 0);
    378 #endif
    379 }
    380 
    381 ATF_TC(floor_inf_neg);
    382 ATF_TC_HEAD(floor_inf_neg, tc)
    383 {
    384 	atf_tc_set_md_var(tc, "descr", "Test floor(-Inf) == -Inf");
    385 }
    386 
    387 ATF_TC_BODY(floor_inf_neg, tc)
    388 {
    389 #ifndef __vax__
    390 	const double x = -1.0L / 0.0L;
    391 	double y = floor(x);
    392 
    393 	if (isinf(y) == 0 || signbit(y) == 0)
    394 		atf_tc_fail_nonfatal("floor(-Inf) != -Inf");
    395 #endif
    396 }
    397 
    398 ATF_TC(floor_inf_pos);
    399 ATF_TC_HEAD(floor_inf_pos, tc)
    400 {
    401 	atf_tc_set_md_var(tc, "descr", "Test floor(+Inf) == +Inf");
    402 }
    403 
    404 ATF_TC_BODY(floor_inf_pos, tc)
    405 {
    406 #ifndef __vax__
    407 	const double x = 1.0L / 0.0L;
    408 	double y = floor(x);
    409 
    410 	if (isinf(y) == 0 || signbit(y) != 0)
    411 		atf_tc_fail_nonfatal("floor(+Inf) != +Inf");
    412 #endif
    413 }
    414 
    415 ATF_TC(floor_zero_neg);
    416 ATF_TC_HEAD(floor_zero_neg, tc)
    417 {
    418 	atf_tc_set_md_var(tc, "descr", "Test floor(-0.0) == -0.0");
    419 }
    420 
    421 ATF_TC_BODY(floor_zero_neg, tc)
    422 {
    423 #ifndef __vax__
    424 	const double x = -0.0L;
    425 	double y = floor(x);
    426 
    427 	if (fabs(y) > 0.0 || signbit(y) == 0)
    428 		atf_tc_fail_nonfatal("floor(-0.0) != -0.0");
    429 #endif
    430 }
    431 
    432 ATF_TC(floor_zero_pos);
    433 ATF_TC_HEAD(floor_zero_pos, tc)
    434 {
    435 	atf_tc_set_md_var(tc, "descr", "Test floor(+0.0) == +0.0");
    436 }
    437 
    438 ATF_TC_BODY(floor_zero_pos, tc)
    439 {
    440 #ifndef __vax__
    441 	const double x = 0.0L;
    442 	double y = floor(x);
    443 
    444 	if (fabs(y) > 0.0 || signbit(y) != 0)
    445 		atf_tc_fail_nonfatal("floor(+0.0) != +0.0");
    446 #endif
    447 }
    448 
    449 /*
    450  * floorf(3)
    451  */
    452 ATF_TC(floorf_basic);
    453 ATF_TC_HEAD(floorf_basic, tc)
    454 {
    455 	atf_tc_set_md_var(tc, "descr", "A basic test of floorf(3)");
    456 }
    457 
    458 ATF_TC_BODY(floorf_basic, tc)
    459 {
    460 	const float x = 0.9999999;
    461 	const float y = 0.0000001;
    462 
    463 	ATF_CHECK(floorf(x) < SMALL_NUM);
    464 	ATF_CHECK(floorf(y) < SMALL_NUM);
    465 }
    466 
    467 ATF_TC(floorf_nan);
    468 ATF_TC_HEAD(floorf_nan, tc)
    469 {
    470 	atf_tc_set_md_var(tc, "descr", "Test floorf(NaN) == NaN");
    471 }
    472 
    473 ATF_TC_BODY(floorf_nan, tc)
    474 {
    475 #ifndef __vax__
    476 	const float x = 0.0L / 0.0L;
    477 
    478 	ATF_CHECK(isnan(floorf(x)) != 0);
    479 #endif
    480 }
    481 
    482 ATF_TC(floorf_inf_neg);
    483 ATF_TC_HEAD(floorf_inf_neg, tc)
    484 {
    485 	atf_tc_set_md_var(tc, "descr", "Test floorf(-Inf) == -Inf");
    486 }
    487 
    488 ATF_TC_BODY(floorf_inf_neg, tc)
    489 {
    490 #ifndef __vax__
    491 	const float x = -1.0L / 0.0L;
    492 	float y = floorf(x);
    493 
    494 	if (isinf(y) == 0 || signbit(y) == 0)
    495 		atf_tc_fail_nonfatal("floorf(-Inf) != -Inf");
    496 #endif
    497 }
    498 
    499 ATF_TC(floorf_inf_pos);
    500 ATF_TC_HEAD(floorf_inf_pos, tc)
    501 {
    502 	atf_tc_set_md_var(tc, "descr", "Test floorf(+Inf) == +Inf");
    503 }
    504 
    505 ATF_TC_BODY(floorf_inf_pos, tc)
    506 {
    507 #ifndef __vax__
    508 	const float x = 1.0L / 0.0L;
    509 	float y = floorf(x);
    510 
    511 	if (isinf(y) == 0 || signbit(y) != 0)
    512 		atf_tc_fail_nonfatal("floorf(+Inf) != +Inf");
    513 #endif
    514 }
    515 
    516 ATF_TC(floorf_zero_neg);
    517 ATF_TC_HEAD(floorf_zero_neg, tc)
    518 {
    519 	atf_tc_set_md_var(tc, "descr", "Test floorf(-0.0) == -0.0");
    520 }
    521 
    522 ATF_TC_BODY(floorf_zero_neg, tc)
    523 {
    524 #ifndef __vax__
    525 	const float x = -0.0L;
    526 	float y = floorf(x);
    527 
    528 	if (fabsf(y) > 0.0 || signbit(y) == 0)
    529 		atf_tc_fail_nonfatal("floorf(-0.0) != -0.0");
    530 #endif
    531 }
    532 
    533 ATF_TC(floorf_zero_pos);
    534 ATF_TC_HEAD(floorf_zero_pos, tc)
    535 {
    536 	atf_tc_set_md_var(tc, "descr", "Test floorf(+0.0) == +0.0");
    537 }
    538 
    539 ATF_TC_BODY(floorf_zero_pos, tc)
    540 {
    541 #ifndef __vax__
    542 	const float x = 0.0L;
    543 	float y = floorf(x);
    544 
    545 	if (fabsf(y) > 0.0 || signbit(y) != 0)
    546 		atf_tc_fail_nonfatal("floorf(+0.0) != +0.0");
    547 #endif
    548 }
    549 
    550 /*
    551  * floorl(3)
    552  */
    553 ATF_TC(floorl_basic);
    554 ATF_TC_HEAD(floorl_basic, tc)
    555 {
    556 	atf_tc_set_md_var(tc, "descr", "A basic test of floorl(3)");
    557 }
    558 
    559 ATF_TC_BODY(floorl_basic, tc)
    560 {
    561 	const long double x = 0.9999999;
    562 	const long double y = 0.0000001;
    563 
    564 	ATF_CHECK(floorl(x) < SMALL_NUM);
    565 	ATF_CHECK(floorl(y) < SMALL_NUM);
    566 }
    567 
    568 ATF_TC(floorl_nan);
    569 ATF_TC_HEAD(floorl_nan, tc)
    570 {
    571 	atf_tc_set_md_var(tc, "descr", "Test floorl(NaN) == NaN");
    572 }
    573 
    574 ATF_TC_BODY(floorl_nan, tc)
    575 {
    576 #ifndef __vax__
    577 	const long double x = 0.0L / 0.0L;
    578 
    579 	ATF_CHECK(isnan(floorl(x)) != 0);
    580 #endif
    581 }
    582 
    583 ATF_TC(floorl_inf_neg);
    584 ATF_TC_HEAD(floorl_inf_neg, tc)
    585 {
    586 	atf_tc_set_md_var(tc, "descr", "Test floorl(-Inf) == -Inf");
    587 }
    588 
    589 ATF_TC_BODY(floorl_inf_neg, tc)
    590 {
    591 #ifndef __vax__
    592 	const long double x = -1.0L / 0.0L;
    593 	long double y = floorl(x);
    594 
    595 	if (isinf(y) == 0 || signbit(y) == 0)
    596 		atf_tc_fail_nonfatal("floorl(-Inf) != -Inf");
    597 #endif
    598 }
    599 
    600 ATF_TC(floorl_inf_pos);
    601 ATF_TC_HEAD(floorl_inf_pos, tc)
    602 {
    603 	atf_tc_set_md_var(tc, "descr", "Test floorl(+Inf) == +Inf");
    604 }
    605 
    606 ATF_TC_BODY(floorl_inf_pos, tc)
    607 {
    608 #ifndef __vax__
    609 	const long double x = 1.0L / 0.0L;
    610 	long double y = floorl(x);
    611 
    612 	if (isinf(y) == 0 || signbit(y) != 0)
    613 		atf_tc_fail_nonfatal("floorl(+Inf) != +Inf");
    614 #endif
    615 }
    616 
    617 ATF_TC(floorl_zero_neg);
    618 ATF_TC_HEAD(floorl_zero_neg, tc)
    619 {
    620 	atf_tc_set_md_var(tc, "descr", "Test floorl(-0.0) == -0.0");
    621 }
    622 
    623 ATF_TC_BODY(floorl_zero_neg, tc)
    624 {
    625 #ifndef __vax__
    626 	const long double x = -0.0L;
    627 	long double y = floorl(x);
    628 
    629 	if (fabsl(y) > 0.0 || signbit(y) == 0)
    630 		atf_tc_fail_nonfatal("floorl(-0.0) != -0.0");
    631 #endif
    632 }
    633 
    634 ATF_TC(floorl_zero_pos);
    635 ATF_TC_HEAD(floorl_zero_pos, tc)
    636 {
    637 	atf_tc_set_md_var(tc, "descr", "Test floorl(+0.0) == +0.0");
    638 }
    639 
    640 ATF_TC_BODY(floorl_zero_pos, tc)
    641 {
    642 #ifndef __vax__
    643 	const long double x = 0.0L;
    644 	long double y = floorl(x);
    645 
    646 	if (fabsl(y) > 0.0 || signbit(y) != 0)
    647 		atf_tc_fail_nonfatal("floorl(+0.0) != +0.0");
    648 #endif
    649 }
    650 
    651 /*
    652  * trunc(3)
    653  */
    654 ATF_TC(trunc_basic);
    655 ATF_TC_HEAD(trunc_basic, tc)
    656 {
    657 	atf_tc_set_md_var(tc, "descr", "A basic test of trunc(3)");
    658 }
    659 
    660 ATF_TC_BODY(trunc_basic, tc)
    661 {
    662 	const double x = 0.999999999999999;
    663 	const double y = 0.000000000000001;
    664 
    665 	ATF_CHECK(trunc(x) < SMALL_NUM);
    666 	ATF_CHECK(trunc(y) < SMALL_NUM);
    667 }
    668 
    669 ATF_TC(trunc_nan);
    670 ATF_TC_HEAD(trunc_nan, tc)
    671 {
    672 	atf_tc_set_md_var(tc, "descr", "Test trunc(NaN) == NaN");
    673 }
    674 
    675 ATF_TC_BODY(trunc_nan, tc)
    676 {
    677 #ifndef __vax__
    678 	const double x = 0.0L / 0.0L;
    679 
    680 	ATF_CHECK(isnan(trunc(x)) != 0);
    681 #endif
    682 }
    683 
    684 ATF_TC(trunc_inf_neg);
    685 ATF_TC_HEAD(trunc_inf_neg, tc)
    686 {
    687 	atf_tc_set_md_var(tc, "descr", "Test trunc(-Inf) == -Inf");
    688 }
    689 
    690 ATF_TC_BODY(trunc_inf_neg, tc)
    691 {
    692 #ifndef __vax__
    693 	const double x = -1.0L / 0.0L;
    694 	double y = trunc(x);
    695 
    696 	if (isinf(y) == 0 || signbit(y) == 0)
    697 		atf_tc_fail_nonfatal("trunc(-Inf) != -Inf");
    698 #endif
    699 }
    700 
    701 ATF_TC(trunc_inf_pos);
    702 ATF_TC_HEAD(trunc_inf_pos, tc)
    703 {
    704 	atf_tc_set_md_var(tc, "descr", "Test trunc(+Inf) == +Inf");
    705 }
    706 
    707 ATF_TC_BODY(trunc_inf_pos, tc)
    708 {
    709 #ifndef __vax__
    710 	const double x = 1.0L / 0.0L;
    711 	double y = trunc(x);
    712 
    713 	if (isinf(y) == 0 || signbit(y) != 0)
    714 		atf_tc_fail_nonfatal("trunc(+Inf) != +Inf");
    715 #endif
    716 }
    717 
    718 ATF_TC(trunc_zero_neg);
    719 ATF_TC_HEAD(trunc_zero_neg, tc)
    720 {
    721 	atf_tc_set_md_var(tc, "descr", "Test trunc(-0.0) == -0.0");
    722 }
    723 
    724 ATF_TC_BODY(trunc_zero_neg, tc)
    725 {
    726 #ifndef __vax__
    727 	const double x = -0.0L;
    728 	double y = trunc(x);
    729 
    730 	if (fabs(y) > 0.0 || signbit(y) == 0)
    731 		atf_tc_fail_nonfatal("trunc(-0.0) != -0.0");
    732 #endif
    733 }
    734 
    735 ATF_TC(trunc_zero_pos);
    736 ATF_TC_HEAD(trunc_zero_pos, tc)
    737 {
    738 	atf_tc_set_md_var(tc, "descr", "Test trunc(+0.0) == +0.0");
    739 }
    740 
    741 ATF_TC_BODY(trunc_zero_pos, tc)
    742 {
    743 #ifndef __vax__
    744 	const double x = 0.0L;
    745 	double y = trunc(x);
    746 
    747 	if (fabs(y) > 0.0 || signbit(y) != 0)
    748 		atf_tc_fail_nonfatal("trunc(+0.0) != +0.0");
    749 #endif
    750 }
    751 
    752 /*
    753  * truncf(3)
    754  */
    755 ATF_TC(truncf_basic);
    756 ATF_TC_HEAD(truncf_basic, tc)
    757 {
    758 	atf_tc_set_md_var(tc, "descr", "A basic test of truncf(3)");
    759 }
    760 
    761 ATF_TC_BODY(truncf_basic, tc)
    762 {
    763 	const float x = 0.9999999;
    764 	const float y = 0.0000001;
    765 
    766 	ATF_CHECK(truncf(x) < SMALL_NUM);
    767 	ATF_CHECK(truncf(y) < SMALL_NUM);
    768 }
    769 
    770 ATF_TC(truncf_nan);
    771 ATF_TC_HEAD(truncf_nan, tc)
    772 {
    773 	atf_tc_set_md_var(tc, "descr", "Test truncf(NaN) == NaN");
    774 }
    775 
    776 ATF_TC_BODY(truncf_nan, tc)
    777 {
    778 #ifndef __vax__
    779 	const float x = 0.0L / 0.0L;
    780 
    781 	ATF_CHECK(isnan(truncf(x)) != 0);
    782 #endif
    783 }
    784 
    785 ATF_TC(truncf_inf_neg);
    786 ATF_TC_HEAD(truncf_inf_neg, tc)
    787 {
    788 	atf_tc_set_md_var(tc, "descr", "Test truncf(-Inf) == -Inf");
    789 }
    790 
    791 ATF_TC_BODY(truncf_inf_neg, tc)
    792 {
    793 #ifndef __vax__
    794 	const float x = -1.0L / 0.0L;
    795 	float y = truncf(x);
    796 
    797 	if (isinf(y) == 0 || signbit(y) == 0)
    798 		atf_tc_fail_nonfatal("truncf(-Inf) != -Inf");
    799 #endif
    800 }
    801 
    802 ATF_TC(truncf_inf_pos);
    803 ATF_TC_HEAD(truncf_inf_pos, tc)
    804 {
    805 	atf_tc_set_md_var(tc, "descr", "Test truncf(+Inf) == +Inf");
    806 }
    807 
    808 ATF_TC_BODY(truncf_inf_pos, tc)
    809 {
    810 #ifndef __vax__
    811 	const float x = 1.0L / 0.0L;
    812 	float y = truncf(x);
    813 
    814 	if (isinf(y) == 0 || signbit(y) != 0)
    815 		atf_tc_fail_nonfatal("truncf(+Inf) != +Inf");
    816 #endif
    817 }
    818 
    819 ATF_TC(truncf_zero_neg);
    820 ATF_TC_HEAD(truncf_zero_neg, tc)
    821 {
    822 	atf_tc_set_md_var(tc, "descr", "Test truncf(-0.0) == -0.0");
    823 }
    824 
    825 ATF_TC_BODY(truncf_zero_neg, tc)
    826 {
    827 #ifndef __vax__
    828 	const float x = -0.0L;
    829 	float y = truncf(x);
    830 
    831 	if (fabsf(y) > 0.0 || signbit(y) == 0)
    832 		atf_tc_fail_nonfatal("truncf(-0.0) != -0.0");
    833 #endif
    834 }
    835 
    836 ATF_TC(truncf_zero_pos);
    837 ATF_TC_HEAD(truncf_zero_pos, tc)
    838 {
    839 	atf_tc_set_md_var(tc, "descr", "Test truncf(+0.0) == +0.0");
    840 }
    841 
    842 ATF_TC_BODY(truncf_zero_pos, tc)
    843 {
    844 #ifndef __vax__
    845 	const float x = 0.0L;
    846 	float y = truncf(x);
    847 
    848 	if (fabsf(y) > 0.0 || signbit(y) != 0)
    849 		atf_tc_fail_nonfatal("truncf(+0.0) != +0.0");
    850 #endif
    851 }
    852 
    853 /*
    854  * truncl(3)
    855  */
    856 ATF_TC(truncl_basic);
    857 ATF_TC_HEAD(truncl_basic, tc)
    858 {
    859 	atf_tc_set_md_var(tc, "descr", "A basic test of truncl(3)");
    860 }
    861 
    862 ATF_TC_BODY(truncl_basic, tc)
    863 {
    864 	const long double x = 0.9999999;
    865 	const long double y = 0.0000001;
    866 
    867 	ATF_CHECK(truncl(x) < SMALL_NUM);
    868 	ATF_CHECK(truncl(y) < SMALL_NUM);
    869 }
    870 
    871 ATF_TC(truncl_nan);
    872 ATF_TC_HEAD(truncl_nan, tc)
    873 {
    874 	atf_tc_set_md_var(tc, "descr", "Test truncl(NaN) == NaN");
    875 }
    876 
    877 ATF_TC_BODY(truncl_nan, tc)
    878 {
    879 #ifndef __vax__
    880 	const long double x = 0.0L / 0.0L;
    881 
    882 	ATF_CHECK(isnan(truncl(x)) != 0);
    883 #endif
    884 }
    885 
    886 ATF_TC(truncl_inf_neg);
    887 ATF_TC_HEAD(truncl_inf_neg, tc)
    888 {
    889 	atf_tc_set_md_var(tc, "descr", "Test truncl(-Inf) == -Inf");
    890 }
    891 
    892 ATF_TC_BODY(truncl_inf_neg, tc)
    893 {
    894 #ifndef __vax__
    895 	const long double x = -1.0L / 0.0L;
    896 	long double y = truncl(x);
    897 
    898 	if (isinf(y) == 0 || signbit(y) == 0)
    899 		atf_tc_fail_nonfatal("truncl(-Inf) != -Inf");
    900 #endif
    901 }
    902 
    903 ATF_TC(truncl_inf_pos);
    904 ATF_TC_HEAD(truncl_inf_pos, tc)
    905 {
    906 	atf_tc_set_md_var(tc, "descr", "Test truncl(+Inf) == +Inf");
    907 }
    908 
    909 ATF_TC_BODY(truncl_inf_pos, tc)
    910 {
    911 #ifndef __vax__
    912 	const long double x = 1.0L / 0.0L;
    913 	long double y = truncl(x);
    914 
    915 	if (isinf(y) == 0 || signbit(y) != 0)
    916 		atf_tc_fail_nonfatal("truncl(+Inf) != +Inf");
    917 #endif
    918 }
    919 
    920 ATF_TC(truncl_zero_neg);
    921 ATF_TC_HEAD(truncl_zero_neg, tc)
    922 {
    923 	atf_tc_set_md_var(tc, "descr", "Test truncl(-0.0) == -0.0");
    924 }
    925 
    926 ATF_TC_BODY(truncl_zero_neg, tc)
    927 {
    928 #ifndef __vax__
    929 	const long double x = -0.0L;
    930 	long double y = truncl(x);
    931 
    932 	if (fabsl(y) > 0.0 || signbit(y) == 0)
    933 		atf_tc_fail_nonfatal("truncl(-0.0) != -0.0");
    934 #endif
    935 }
    936 
    937 ATF_TC(truncl_zero_pos);
    938 ATF_TC_HEAD(truncl_zero_pos, tc)
    939 {
    940 	atf_tc_set_md_var(tc, "descr", "Test truncl(+0.0) == +0.0");
    941 }
    942 
    943 ATF_TC_BODY(truncl_zero_pos, tc)
    944 {
    945 #ifndef __vax__
    946 	const long double x = 0.0L;
    947 	long double y = truncl(x);
    948 
    949 	if (fabsl(y) > 0.0 || signbit(y) != 0)
    950 		atf_tc_fail_nonfatal("truncl(+0.0) != +0.0");
    951 #endif
    952 }
    953 
    954 ATF_TP_ADD_TCS(tp)
    955 {
    956 
    957 	ATF_TP_ADD_TC(tp, ceil_basic);
    958 	ATF_TP_ADD_TC(tp, ceil_nan);
    959 	ATF_TP_ADD_TC(tp, ceil_inf_neg);
    960 	ATF_TP_ADD_TC(tp, ceil_inf_pos);
    961 	ATF_TP_ADD_TC(tp, ceil_zero_neg);
    962 	ATF_TP_ADD_TC(tp, ceil_zero_pos);
    963 
    964 	ATF_TP_ADD_TC(tp, ceilf_basic);
    965 	ATF_TP_ADD_TC(tp, ceilf_nan);
    966 	ATF_TP_ADD_TC(tp, ceilf_inf_neg);
    967 	ATF_TP_ADD_TC(tp, ceilf_inf_pos);
    968 	ATF_TP_ADD_TC(tp, ceilf_zero_neg);
    969 	ATF_TP_ADD_TC(tp, ceilf_zero_pos);
    970 
    971 	ATF_TP_ADD_TC(tp, ceill_basic);
    972 	ATF_TP_ADD_TC(tp, ceill_nan);
    973 	ATF_TP_ADD_TC(tp, ceill_inf_neg);
    974 	ATF_TP_ADD_TC(tp, ceill_inf_pos);
    975 	ATF_TP_ADD_TC(tp, ceill_zero_neg);
    976 	ATF_TP_ADD_TC(tp, ceill_zero_pos);
    977 
    978 	ATF_TP_ADD_TC(tp, floor_basic);
    979 	ATF_TP_ADD_TC(tp, floor_nan);
    980 	ATF_TP_ADD_TC(tp, floor_inf_neg);
    981 	ATF_TP_ADD_TC(tp, floor_inf_pos);
    982 	ATF_TP_ADD_TC(tp, floor_zero_neg);
    983 	ATF_TP_ADD_TC(tp, floor_zero_pos);
    984 
    985 	ATF_TP_ADD_TC(tp, floorf_basic);
    986 	ATF_TP_ADD_TC(tp, floorf_nan);
    987 	ATF_TP_ADD_TC(tp, floorf_inf_neg);
    988 	ATF_TP_ADD_TC(tp, floorf_inf_pos);
    989 	ATF_TP_ADD_TC(tp, floorf_zero_neg);
    990 	ATF_TP_ADD_TC(tp, floorf_zero_pos);
    991 
    992 	ATF_TP_ADD_TC(tp, floorl_basic);
    993 	ATF_TP_ADD_TC(tp, floorl_nan);
    994 	ATF_TP_ADD_TC(tp, floorl_inf_neg);
    995 	ATF_TP_ADD_TC(tp, floorl_inf_pos);
    996 	ATF_TP_ADD_TC(tp, floorl_zero_neg);
    997 	ATF_TP_ADD_TC(tp, floorl_zero_pos);
    998 
    999 	ATF_TP_ADD_TC(tp, trunc_basic);
   1000 	ATF_TP_ADD_TC(tp, trunc_nan);
   1001 	ATF_TP_ADD_TC(tp, trunc_inf_neg);
   1002 	ATF_TP_ADD_TC(tp, trunc_inf_pos);
   1003 	ATF_TP_ADD_TC(tp, trunc_zero_neg);
   1004 	ATF_TP_ADD_TC(tp, trunc_zero_pos);
   1005 
   1006 	ATF_TP_ADD_TC(tp, truncf_basic);
   1007 	ATF_TP_ADD_TC(tp, truncf_nan);
   1008 	ATF_TP_ADD_TC(tp, truncf_inf_neg);
   1009 	ATF_TP_ADD_TC(tp, truncf_inf_pos);
   1010 	ATF_TP_ADD_TC(tp, truncf_zero_neg);
   1011 	ATF_TP_ADD_TC(tp, truncf_zero_pos);
   1012 
   1013 	ATF_TP_ADD_TC(tp, truncl_basic);
   1014 	ATF_TP_ADD_TC(tp, truncl_nan);
   1015 	ATF_TP_ADD_TC(tp, truncl_inf_neg);
   1016 	ATF_TP_ADD_TC(tp, truncl_inf_pos);
   1017 	ATF_TP_ADD_TC(tp, truncl_zero_neg);
   1018 	ATF_TP_ADD_TC(tp, truncl_zero_pos);
   1019 
   1020 	return atf_no_error();
   1021 }
   1022