Home | History | Annotate | Line # | Download | only in libm
t_ceil.c revision 1.8
      1 /* $NetBSD: t_ceil.c,v 1.8 2013/11/11 23:57:34 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.8 2013/11/11 23:57:34 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 ATF_TP_ADD_TCS(tp)
    652 {
    653 
    654 	ATF_TP_ADD_TC(tp, ceil_basic);
    655 	ATF_TP_ADD_TC(tp, ceil_nan);
    656 	ATF_TP_ADD_TC(tp, ceil_inf_neg);
    657 	ATF_TP_ADD_TC(tp, ceil_inf_pos);
    658 	ATF_TP_ADD_TC(tp, ceil_zero_neg);
    659 	ATF_TP_ADD_TC(tp, ceil_zero_pos);
    660 
    661 	ATF_TP_ADD_TC(tp, ceilf_basic);
    662 	ATF_TP_ADD_TC(tp, ceilf_nan);
    663 	ATF_TP_ADD_TC(tp, ceilf_inf_neg);
    664 	ATF_TP_ADD_TC(tp, ceilf_inf_pos);
    665 	ATF_TP_ADD_TC(tp, ceilf_zero_neg);
    666 	ATF_TP_ADD_TC(tp, ceilf_zero_pos);
    667 
    668 	ATF_TP_ADD_TC(tp, ceill_basic);
    669 	ATF_TP_ADD_TC(tp, ceill_nan);
    670 	ATF_TP_ADD_TC(tp, ceill_inf_neg);
    671 	ATF_TP_ADD_TC(tp, ceill_inf_pos);
    672 	ATF_TP_ADD_TC(tp, ceill_zero_neg);
    673 	ATF_TP_ADD_TC(tp, ceill_zero_pos);
    674 
    675 	ATF_TP_ADD_TC(tp, floor_basic);
    676 	ATF_TP_ADD_TC(tp, floor_nan);
    677 	ATF_TP_ADD_TC(tp, floor_inf_neg);
    678 	ATF_TP_ADD_TC(tp, floor_inf_pos);
    679 	ATF_TP_ADD_TC(tp, floor_zero_neg);
    680 	ATF_TP_ADD_TC(tp, floor_zero_pos);
    681 
    682 	ATF_TP_ADD_TC(tp, floorf_basic);
    683 	ATF_TP_ADD_TC(tp, floorf_nan);
    684 	ATF_TP_ADD_TC(tp, floorf_inf_neg);
    685 	ATF_TP_ADD_TC(tp, floorf_inf_pos);
    686 	ATF_TP_ADD_TC(tp, floorf_zero_neg);
    687 	ATF_TP_ADD_TC(tp, floorf_zero_pos);
    688 
    689 	ATF_TP_ADD_TC(tp, floorl_basic);
    690 	ATF_TP_ADD_TC(tp, floorl_nan);
    691 	ATF_TP_ADD_TC(tp, floorl_inf_neg);
    692 	ATF_TP_ADD_TC(tp, floorl_inf_pos);
    693 	ATF_TP_ADD_TC(tp, floorl_zero_neg);
    694 	ATF_TP_ADD_TC(tp, floorl_zero_pos);
    695 
    696 	return atf_no_error();
    697 }
    698