1*29ebc681Smartin /* $NetBSD: t_ceil.c,v 1.10 2014/03/03 10:39:08 martin Exp $ */
257842fd3Sjruoho
357842fd3Sjruoho /*-
457842fd3Sjruoho * Copyright (c) 2011 The NetBSD Foundation, Inc.
557842fd3Sjruoho * All rights reserved.
657842fd3Sjruoho *
757842fd3Sjruoho * This code is derived from software contributed to The NetBSD Foundation
857842fd3Sjruoho * by Jukka Ruohonen.
957842fd3Sjruoho *
1057842fd3Sjruoho * Redistribution and use in source and binary forms, with or without
1157842fd3Sjruoho * modification, are permitted provided that the following conditions
1257842fd3Sjruoho * are met:
1357842fd3Sjruoho * 1. Redistributions of source code must retain the above copyright
1457842fd3Sjruoho * notice, this list of conditions and the following disclaimer.
1557842fd3Sjruoho * 2. Redistributions in binary form must reproduce the above copyright
1657842fd3Sjruoho * notice, this list of conditions and the following disclaimer in the
1757842fd3Sjruoho * documentation and/or other materials provided with the distribution.
1857842fd3Sjruoho *
1957842fd3Sjruoho * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2057842fd3Sjruoho * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2157842fd3Sjruoho * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2257842fd3Sjruoho * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2357842fd3Sjruoho * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2457842fd3Sjruoho * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2557842fd3Sjruoho * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2657842fd3Sjruoho * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2757842fd3Sjruoho * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2857842fd3Sjruoho * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2957842fd3Sjruoho * POSSIBILITY OF SUCH DAMAGE.
3057842fd3Sjruoho */
3157842fd3Sjruoho #include <sys/cdefs.h>
32*29ebc681Smartin __RCSID("$NetBSD: t_ceil.c,v 1.10 2014/03/03 10:39:08 martin Exp $");
3357842fd3Sjruoho
3457842fd3Sjruoho #include <atf-c.h>
35bfd40496Sjruoho #include <math.h>
36bfd40496Sjruoho #include <limits.h>
37bfd40496Sjruoho #include <stdio.h>
3857842fd3Sjruoho
398aa49555Smrg #ifdef __vax__
408aa49555Smrg #define SMALL_NUM 1.0e-38
418aa49555Smrg #else
428aa49555Smrg #define SMALL_NUM 1.0e-40
438aa49555Smrg #endif
448aa49555Smrg
456c414326Sjruoho /*
466c414326Sjruoho * ceil(3)
476c414326Sjruoho */
48bfd40496Sjruoho ATF_TC(ceil_basic);
ATF_TC_HEAD(ceil_basic,tc)49bfd40496Sjruoho ATF_TC_HEAD(ceil_basic, tc)
5057842fd3Sjruoho {
51bfd40496Sjruoho atf_tc_set_md_var(tc, "descr", "A basic test of ceil(3)");
5257842fd3Sjruoho }
53bfd40496Sjruoho
ATF_TC_BODY(ceil_basic,tc)54bfd40496Sjruoho ATF_TC_BODY(ceil_basic, tc)
55bfd40496Sjruoho {
56bfd40496Sjruoho const double x = 0.999999999999999;
57bfd40496Sjruoho const double y = 0.000000000000001;
58bfd40496Sjruoho
59bfd40496Sjruoho ATF_CHECK(fabs(ceil(x) - 1) < SMALL_NUM);
60bfd40496Sjruoho ATF_CHECK(fabs(ceil(y) - 1) < SMALL_NUM);
61bfd40496Sjruoho }
62bfd40496Sjruoho
636c414326Sjruoho ATF_TC(ceil_nan);
ATF_TC_HEAD(ceil_nan,tc)646c414326Sjruoho ATF_TC_HEAD(ceil_nan, tc)
656c414326Sjruoho {
666c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceil(NaN) == NaN");
676c414326Sjruoho }
686c414326Sjruoho
ATF_TC_BODY(ceil_nan,tc)696c414326Sjruoho ATF_TC_BODY(ceil_nan, tc)
706c414326Sjruoho {
716c414326Sjruoho const double x = 0.0L / 0.0L;
726c414326Sjruoho
736c414326Sjruoho ATF_CHECK(isnan(ceil(x)) != 0);
746c414326Sjruoho }
756c414326Sjruoho
766c414326Sjruoho ATF_TC(ceil_inf_neg);
ATF_TC_HEAD(ceil_inf_neg,tc)776c414326Sjruoho ATF_TC_HEAD(ceil_inf_neg, tc)
786c414326Sjruoho {
796c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceil(-Inf) == -Inf");
806c414326Sjruoho }
816c414326Sjruoho
ATF_TC_BODY(ceil_inf_neg,tc)826c414326Sjruoho ATF_TC_BODY(ceil_inf_neg, tc)
836c414326Sjruoho {
846c414326Sjruoho const double x = -1.0L / 0.0L;
856c414326Sjruoho double y = ceil(x);
866c414326Sjruoho
876c414326Sjruoho if (isinf(y) == 0 || signbit(y) == 0)
886c414326Sjruoho atf_tc_fail_nonfatal("ceil(-Inf) != -Inf");
896c414326Sjruoho }
906c414326Sjruoho
916c414326Sjruoho ATF_TC(ceil_inf_pos);
ATF_TC_HEAD(ceil_inf_pos,tc)926c414326Sjruoho ATF_TC_HEAD(ceil_inf_pos, tc)
936c414326Sjruoho {
946c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceil(+Inf) == +Inf");
956c414326Sjruoho }
966c414326Sjruoho
ATF_TC_BODY(ceil_inf_pos,tc)976c414326Sjruoho ATF_TC_BODY(ceil_inf_pos, tc)
986c414326Sjruoho {
996c414326Sjruoho const double x = 1.0L / 0.0L;
1006c414326Sjruoho double y = ceil(x);
1016c414326Sjruoho
1026c414326Sjruoho if (isinf(y) == 0 || signbit(y) != 0)
1036c414326Sjruoho atf_tc_fail_nonfatal("ceil(+Inf) != +Inf");
1046c414326Sjruoho }
1056c414326Sjruoho
1066c414326Sjruoho ATF_TC(ceil_zero_neg);
ATF_TC_HEAD(ceil_zero_neg,tc)1076c414326Sjruoho ATF_TC_HEAD(ceil_zero_neg, tc)
1086c414326Sjruoho {
1096c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceil(-0.0) == -0.0");
1106c414326Sjruoho }
1116c414326Sjruoho
ATF_TC_BODY(ceil_zero_neg,tc)1126c414326Sjruoho ATF_TC_BODY(ceil_zero_neg, tc)
1136c414326Sjruoho {
1146c414326Sjruoho const double x = -0.0L;
1156c414326Sjruoho double y = ceil(x);
1166c414326Sjruoho
1176c414326Sjruoho if (fabs(y) > 0.0 || signbit(y) == 0)
1186c414326Sjruoho atf_tc_fail_nonfatal("ceil(-0.0) != -0.0");
1196c414326Sjruoho }
1206c414326Sjruoho
1216c414326Sjruoho ATF_TC(ceil_zero_pos);
ATF_TC_HEAD(ceil_zero_pos,tc)1226c414326Sjruoho ATF_TC_HEAD(ceil_zero_pos, tc)
1236c414326Sjruoho {
1246c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceil(+0.0) == +0.0");
1256c414326Sjruoho }
1266c414326Sjruoho
ATF_TC_BODY(ceil_zero_pos,tc)1276c414326Sjruoho ATF_TC_BODY(ceil_zero_pos, tc)
1286c414326Sjruoho {
1296c414326Sjruoho const double x = 0.0L;
1306c414326Sjruoho double y = ceil(x);
1316c414326Sjruoho
1326c414326Sjruoho if (fabs(y) > 0.0 || signbit(y) != 0)
1336c414326Sjruoho atf_tc_fail_nonfatal("ceil(+0.0) != +0.0");
1346c414326Sjruoho }
1356c414326Sjruoho
1366c414326Sjruoho /*
1376c414326Sjruoho * ceilf(3)
1386c414326Sjruoho */
139bfd40496Sjruoho ATF_TC(ceilf_basic);
ATF_TC_HEAD(ceilf_basic,tc)140bfd40496Sjruoho ATF_TC_HEAD(ceilf_basic, tc)
141bfd40496Sjruoho {
142bfd40496Sjruoho atf_tc_set_md_var(tc, "descr", "A basic test of ceilf(3)");
143bfd40496Sjruoho }
144bfd40496Sjruoho
ATF_TC_BODY(ceilf_basic,tc)145bfd40496Sjruoho ATF_TC_BODY(ceilf_basic, tc)
146bfd40496Sjruoho {
147bfd40496Sjruoho const float x = 0.9999999;
148bfd40496Sjruoho const float y = 0.0000001;
149bfd40496Sjruoho
150bfd40496Sjruoho ATF_CHECK(fabsf(ceilf(x) - 1) < SMALL_NUM);
151bfd40496Sjruoho ATF_CHECK(fabsf(ceilf(y) - 1) < SMALL_NUM);
152bfd40496Sjruoho }
153bfd40496Sjruoho
1546c414326Sjruoho ATF_TC(ceilf_nan);
ATF_TC_HEAD(ceilf_nan,tc)1556c414326Sjruoho ATF_TC_HEAD(ceilf_nan, tc)
1566c414326Sjruoho {
1576c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceilf(NaN) == NaN");
1586c414326Sjruoho }
1596c414326Sjruoho
ATF_TC_BODY(ceilf_nan,tc)1606c414326Sjruoho ATF_TC_BODY(ceilf_nan, tc)
1616c414326Sjruoho {
1626c414326Sjruoho const float x = 0.0L / 0.0L;
1636c414326Sjruoho
1646c414326Sjruoho ATF_CHECK(isnan(ceilf(x)) != 0);
1656c414326Sjruoho }
1666c414326Sjruoho
1676c414326Sjruoho ATF_TC(ceilf_inf_neg);
ATF_TC_HEAD(ceilf_inf_neg,tc)1686c414326Sjruoho ATF_TC_HEAD(ceilf_inf_neg, tc)
1696c414326Sjruoho {
1706c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceilf(-Inf) == -Inf");
1716c414326Sjruoho }
1726c414326Sjruoho
ATF_TC_BODY(ceilf_inf_neg,tc)1736c414326Sjruoho ATF_TC_BODY(ceilf_inf_neg, tc)
1746c414326Sjruoho {
1756c414326Sjruoho const float x = -1.0L / 0.0L;
1766c414326Sjruoho float y = ceilf(x);
1776c414326Sjruoho
1786c414326Sjruoho if (isinf(y) == 0 || signbit(y) == 0)
1796c414326Sjruoho atf_tc_fail_nonfatal("ceilf(-Inf) != -Inf");
1806c414326Sjruoho }
1816c414326Sjruoho
1826c414326Sjruoho ATF_TC(ceilf_inf_pos);
ATF_TC_HEAD(ceilf_inf_pos,tc)1836c414326Sjruoho ATF_TC_HEAD(ceilf_inf_pos, tc)
1846c414326Sjruoho {
1856c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceilf(+Inf) == +Inf");
1866c414326Sjruoho }
1876c414326Sjruoho
ATF_TC_BODY(ceilf_inf_pos,tc)1886c414326Sjruoho ATF_TC_BODY(ceilf_inf_pos, tc)
1896c414326Sjruoho {
1906c414326Sjruoho const float x = 1.0L / 0.0L;
1916c414326Sjruoho float y = ceilf(x);
1926c414326Sjruoho
1936c414326Sjruoho if (isinf(y) == 0 || signbit(y) != 0)
1946c414326Sjruoho atf_tc_fail_nonfatal("ceilf(+Inf) != +Inf");
1956c414326Sjruoho }
1966c414326Sjruoho
1976c414326Sjruoho ATF_TC(ceilf_zero_neg);
ATF_TC_HEAD(ceilf_zero_neg,tc)1986c414326Sjruoho ATF_TC_HEAD(ceilf_zero_neg, tc)
1996c414326Sjruoho {
2006c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceilf(-0.0) == -0.0");
2016c414326Sjruoho }
2026c414326Sjruoho
ATF_TC_BODY(ceilf_zero_neg,tc)2036c414326Sjruoho ATF_TC_BODY(ceilf_zero_neg, tc)
2046c414326Sjruoho {
2056c414326Sjruoho const float x = -0.0L;
2066c414326Sjruoho float y = ceilf(x);
2076c414326Sjruoho
2086c414326Sjruoho if (fabsf(y) > 0.0 || signbit(y) == 0)
2096c414326Sjruoho atf_tc_fail_nonfatal("ceilf(-0.0) != -0.0");
2106c414326Sjruoho }
2116c414326Sjruoho
2126c414326Sjruoho ATF_TC(ceilf_zero_pos);
ATF_TC_HEAD(ceilf_zero_pos,tc)2136c414326Sjruoho ATF_TC_HEAD(ceilf_zero_pos, tc)
2146c414326Sjruoho {
2156c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test ceilf(+0.0) == +0.0");
2166c414326Sjruoho }
2176c414326Sjruoho
ATF_TC_BODY(ceilf_zero_pos,tc)2186c414326Sjruoho ATF_TC_BODY(ceilf_zero_pos, tc)
2196c414326Sjruoho {
2206c414326Sjruoho const float x = 0.0L;
2216c414326Sjruoho float y = ceilf(x);
2226c414326Sjruoho
2236c414326Sjruoho if (fabsf(y) > 0.0 || signbit(y) != 0)
2246c414326Sjruoho atf_tc_fail_nonfatal("ceilf(+0.0) != +0.0");
2256c414326Sjruoho }
2266c414326Sjruoho
2276c414326Sjruoho /*
2282e412cf6Sjoerg * ceill(3)
2292e412cf6Sjoerg */
2302e412cf6Sjoerg ATF_TC(ceill_basic);
ATF_TC_HEAD(ceill_basic,tc)2312e412cf6Sjoerg ATF_TC_HEAD(ceill_basic, tc)
2322e412cf6Sjoerg {
2332e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "A basic test of ceill(3)");
2342e412cf6Sjoerg }
2352e412cf6Sjoerg
ATF_TC_BODY(ceill_basic,tc)2362e412cf6Sjoerg ATF_TC_BODY(ceill_basic, tc)
2372e412cf6Sjoerg {
2382e412cf6Sjoerg const long double x = 0.9999999;
2392e412cf6Sjoerg const long double y = 0.0000001;
2402e412cf6Sjoerg
2412e412cf6Sjoerg ATF_CHECK(fabsl(ceill(x) - 1) < SMALL_NUM);
2422e412cf6Sjoerg ATF_CHECK(fabsl(ceill(y) - 1) < SMALL_NUM);
2432e412cf6Sjoerg }
2442e412cf6Sjoerg
2452e412cf6Sjoerg ATF_TC(ceill_nan);
ATF_TC_HEAD(ceill_nan,tc)2462e412cf6Sjoerg ATF_TC_HEAD(ceill_nan, tc)
2472e412cf6Sjoerg {
2482e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test ceill(NaN) == NaN");
2492e412cf6Sjoerg }
2502e412cf6Sjoerg
ATF_TC_BODY(ceill_nan,tc)2512e412cf6Sjoerg ATF_TC_BODY(ceill_nan, tc)
2522e412cf6Sjoerg {
2532e412cf6Sjoerg const long double x = 0.0L / 0.0L;
2542e412cf6Sjoerg
2552e412cf6Sjoerg ATF_CHECK(isnan(ceill(x)) != 0);
2562e412cf6Sjoerg }
2572e412cf6Sjoerg
2582e412cf6Sjoerg ATF_TC(ceill_inf_neg);
ATF_TC_HEAD(ceill_inf_neg,tc)2592e412cf6Sjoerg ATF_TC_HEAD(ceill_inf_neg, tc)
2602e412cf6Sjoerg {
2612e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test ceill(-Inf) == -Inf");
2622e412cf6Sjoerg }
2632e412cf6Sjoerg
ATF_TC_BODY(ceill_inf_neg,tc)2642e412cf6Sjoerg ATF_TC_BODY(ceill_inf_neg, tc)
2652e412cf6Sjoerg {
2662e412cf6Sjoerg const long double x = -1.0L / 0.0L;
2672e412cf6Sjoerg long double y = ceill(x);
2682e412cf6Sjoerg
2692e412cf6Sjoerg if (isinf(y) == 0 || signbit(y) == 0)
2702e412cf6Sjoerg atf_tc_fail_nonfatal("ceill(-Inf) != -Inf");
2712e412cf6Sjoerg }
2722e412cf6Sjoerg
2732e412cf6Sjoerg ATF_TC(ceill_inf_pos);
ATF_TC_HEAD(ceill_inf_pos,tc)2742e412cf6Sjoerg ATF_TC_HEAD(ceill_inf_pos, tc)
2752e412cf6Sjoerg {
2762e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test ceill(+Inf) == +Inf");
2772e412cf6Sjoerg }
2782e412cf6Sjoerg
ATF_TC_BODY(ceill_inf_pos,tc)2792e412cf6Sjoerg ATF_TC_BODY(ceill_inf_pos, tc)
2802e412cf6Sjoerg {
2812e412cf6Sjoerg const long double x = 1.0L / 0.0L;
2822e412cf6Sjoerg long double y = ceill(x);
2832e412cf6Sjoerg
2842e412cf6Sjoerg if (isinf(y) == 0 || signbit(y) != 0)
2852e412cf6Sjoerg atf_tc_fail_nonfatal("ceill(+Inf) != +Inf");
2862e412cf6Sjoerg }
2872e412cf6Sjoerg
2882e412cf6Sjoerg ATF_TC(ceill_zero_neg);
ATF_TC_HEAD(ceill_zero_neg,tc)2892e412cf6Sjoerg ATF_TC_HEAD(ceill_zero_neg, tc)
2902e412cf6Sjoerg {
2912e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test ceill(-0.0) == -0.0");
2922e412cf6Sjoerg }
2932e412cf6Sjoerg
ATF_TC_BODY(ceill_zero_neg,tc)2942e412cf6Sjoerg ATF_TC_BODY(ceill_zero_neg, tc)
2952e412cf6Sjoerg {
2962e412cf6Sjoerg const long double x = -0.0L;
2972e412cf6Sjoerg long double y = ceill(x);
2982e412cf6Sjoerg
2992e412cf6Sjoerg if (fabsl(y) > 0.0 || signbit(y) == 0)
3002e412cf6Sjoerg atf_tc_fail_nonfatal("ceill(-0.0) != -0.0");
3012e412cf6Sjoerg }
3022e412cf6Sjoerg
3032e412cf6Sjoerg ATF_TC(ceill_zero_pos);
ATF_TC_HEAD(ceill_zero_pos,tc)3042e412cf6Sjoerg ATF_TC_HEAD(ceill_zero_pos, tc)
3052e412cf6Sjoerg {
3062e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test ceill(+0.0) == +0.0");
3072e412cf6Sjoerg }
3082e412cf6Sjoerg
ATF_TC_BODY(ceill_zero_pos,tc)3092e412cf6Sjoerg ATF_TC_BODY(ceill_zero_pos, tc)
3102e412cf6Sjoerg {
3112e412cf6Sjoerg const long double x = 0.0L;
3122e412cf6Sjoerg long double y = ceill(x);
3132e412cf6Sjoerg
3142e412cf6Sjoerg if (fabsl(y) > 0.0 || signbit(y) != 0)
3152e412cf6Sjoerg atf_tc_fail_nonfatal("ceill(+0.0) != +0.0");
3162e412cf6Sjoerg }
3172e412cf6Sjoerg
3182e412cf6Sjoerg /*
3196c414326Sjruoho * floor(3)
3206c414326Sjruoho */
321bfd40496Sjruoho ATF_TC(floor_basic);
ATF_TC_HEAD(floor_basic,tc)322bfd40496Sjruoho ATF_TC_HEAD(floor_basic, tc)
323bfd40496Sjruoho {
324bfd40496Sjruoho atf_tc_set_md_var(tc, "descr", "A basic test of floor(3)");
325bfd40496Sjruoho }
326bfd40496Sjruoho
ATF_TC_BODY(floor_basic,tc)327bfd40496Sjruoho ATF_TC_BODY(floor_basic, tc)
328bfd40496Sjruoho {
329bfd40496Sjruoho const double x = 0.999999999999999;
330bfd40496Sjruoho const double y = 0.000000000000001;
331bfd40496Sjruoho
332bfd40496Sjruoho ATF_CHECK(floor(x) < SMALL_NUM);
333bfd40496Sjruoho ATF_CHECK(floor(y) < SMALL_NUM);
334bfd40496Sjruoho }
335bfd40496Sjruoho
3366c414326Sjruoho ATF_TC(floor_nan);
ATF_TC_HEAD(floor_nan,tc)3376c414326Sjruoho ATF_TC_HEAD(floor_nan, tc)
3386c414326Sjruoho {
3396c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floor(NaN) == NaN");
3406c414326Sjruoho }
3416c414326Sjruoho
ATF_TC_BODY(floor_nan,tc)3426c414326Sjruoho ATF_TC_BODY(floor_nan, tc)
3436c414326Sjruoho {
3446c414326Sjruoho const double x = 0.0L / 0.0L;
3456c414326Sjruoho
3466c414326Sjruoho ATF_CHECK(isnan(floor(x)) != 0);
3476c414326Sjruoho }
3486c414326Sjruoho
3496c414326Sjruoho ATF_TC(floor_inf_neg);
ATF_TC_HEAD(floor_inf_neg,tc)3506c414326Sjruoho ATF_TC_HEAD(floor_inf_neg, tc)
3516c414326Sjruoho {
3526c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floor(-Inf) == -Inf");
3536c414326Sjruoho }
3546c414326Sjruoho
ATF_TC_BODY(floor_inf_neg,tc)3556c414326Sjruoho ATF_TC_BODY(floor_inf_neg, tc)
3566c414326Sjruoho {
3576c414326Sjruoho const double x = -1.0L / 0.0L;
3586c414326Sjruoho double y = floor(x);
3596c414326Sjruoho
3606c414326Sjruoho if (isinf(y) == 0 || signbit(y) == 0)
3616c414326Sjruoho atf_tc_fail_nonfatal("floor(-Inf) != -Inf");
3626c414326Sjruoho }
3636c414326Sjruoho
3646c414326Sjruoho ATF_TC(floor_inf_pos);
ATF_TC_HEAD(floor_inf_pos,tc)3656c414326Sjruoho ATF_TC_HEAD(floor_inf_pos, tc)
3666c414326Sjruoho {
3676c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floor(+Inf) == +Inf");
3686c414326Sjruoho }
3696c414326Sjruoho
ATF_TC_BODY(floor_inf_pos,tc)3706c414326Sjruoho ATF_TC_BODY(floor_inf_pos, tc)
3716c414326Sjruoho {
3726c414326Sjruoho const double x = 1.0L / 0.0L;
3736c414326Sjruoho double y = floor(x);
3746c414326Sjruoho
3756c414326Sjruoho if (isinf(y) == 0 || signbit(y) != 0)
3766c414326Sjruoho atf_tc_fail_nonfatal("floor(+Inf) != +Inf");
3776c414326Sjruoho }
3786c414326Sjruoho
3796c414326Sjruoho ATF_TC(floor_zero_neg);
ATF_TC_HEAD(floor_zero_neg,tc)3806c414326Sjruoho ATF_TC_HEAD(floor_zero_neg, tc)
3816c414326Sjruoho {
3826c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floor(-0.0) == -0.0");
3836c414326Sjruoho }
3846c414326Sjruoho
ATF_TC_BODY(floor_zero_neg,tc)3856c414326Sjruoho ATF_TC_BODY(floor_zero_neg, tc)
3866c414326Sjruoho {
3876c414326Sjruoho const double x = -0.0L;
3886c414326Sjruoho double y = floor(x);
3896c414326Sjruoho
3906c414326Sjruoho if (fabs(y) > 0.0 || signbit(y) == 0)
3916c414326Sjruoho atf_tc_fail_nonfatal("floor(-0.0) != -0.0");
3926c414326Sjruoho }
3936c414326Sjruoho
3946c414326Sjruoho ATF_TC(floor_zero_pos);
ATF_TC_HEAD(floor_zero_pos,tc)3956c414326Sjruoho ATF_TC_HEAD(floor_zero_pos, tc)
3966c414326Sjruoho {
3976c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floor(+0.0) == +0.0");
3986c414326Sjruoho }
3996c414326Sjruoho
ATF_TC_BODY(floor_zero_pos,tc)4006c414326Sjruoho ATF_TC_BODY(floor_zero_pos, tc)
4016c414326Sjruoho {
4026c414326Sjruoho const double x = 0.0L;
4036c414326Sjruoho double y = floor(x);
4046c414326Sjruoho
4056c414326Sjruoho if (fabs(y) > 0.0 || signbit(y) != 0)
4066c414326Sjruoho atf_tc_fail_nonfatal("floor(+0.0) != +0.0");
4076c414326Sjruoho }
4086c414326Sjruoho
4096c414326Sjruoho /*
4106c414326Sjruoho * floorf(3)
4116c414326Sjruoho */
412bfd40496Sjruoho ATF_TC(floorf_basic);
ATF_TC_HEAD(floorf_basic,tc)413bfd40496Sjruoho ATF_TC_HEAD(floorf_basic, tc)
414bfd40496Sjruoho {
415bfd40496Sjruoho atf_tc_set_md_var(tc, "descr", "A basic test of floorf(3)");
416bfd40496Sjruoho }
417bfd40496Sjruoho
ATF_TC_BODY(floorf_basic,tc)418bfd40496Sjruoho ATF_TC_BODY(floorf_basic, tc)
419bfd40496Sjruoho {
420bfd40496Sjruoho const float x = 0.9999999;
421bfd40496Sjruoho const float y = 0.0000001;
422bfd40496Sjruoho
423bfd40496Sjruoho ATF_CHECK(floorf(x) < SMALL_NUM);
424bfd40496Sjruoho ATF_CHECK(floorf(y) < SMALL_NUM);
42557842fd3Sjruoho }
42657842fd3Sjruoho
4276c414326Sjruoho ATF_TC(floorf_nan);
ATF_TC_HEAD(floorf_nan,tc)4286c414326Sjruoho ATF_TC_HEAD(floorf_nan, tc)
4296c414326Sjruoho {
4306c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floorf(NaN) == NaN");
4316c414326Sjruoho }
4326c414326Sjruoho
ATF_TC_BODY(floorf_nan,tc)4336c414326Sjruoho ATF_TC_BODY(floorf_nan, tc)
4346c414326Sjruoho {
4356c414326Sjruoho const float x = 0.0L / 0.0L;
4366c414326Sjruoho
4376c414326Sjruoho ATF_CHECK(isnan(floorf(x)) != 0);
4386c414326Sjruoho }
4396c414326Sjruoho
4406c414326Sjruoho ATF_TC(floorf_inf_neg);
ATF_TC_HEAD(floorf_inf_neg,tc)4416c414326Sjruoho ATF_TC_HEAD(floorf_inf_neg, tc)
4426c414326Sjruoho {
4436c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floorf(-Inf) == -Inf");
4446c414326Sjruoho }
4456c414326Sjruoho
ATF_TC_BODY(floorf_inf_neg,tc)4466c414326Sjruoho ATF_TC_BODY(floorf_inf_neg, tc)
4476c414326Sjruoho {
4486c414326Sjruoho const float x = -1.0L / 0.0L;
4496c414326Sjruoho float y = floorf(x);
4506c414326Sjruoho
4516c414326Sjruoho if (isinf(y) == 0 || signbit(y) == 0)
4526c414326Sjruoho atf_tc_fail_nonfatal("floorf(-Inf) != -Inf");
4536c414326Sjruoho }
4546c414326Sjruoho
4556c414326Sjruoho ATF_TC(floorf_inf_pos);
ATF_TC_HEAD(floorf_inf_pos,tc)4566c414326Sjruoho ATF_TC_HEAD(floorf_inf_pos, tc)
4576c414326Sjruoho {
4586c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floorf(+Inf) == +Inf");
4596c414326Sjruoho }
4606c414326Sjruoho
ATF_TC_BODY(floorf_inf_pos,tc)4616c414326Sjruoho ATF_TC_BODY(floorf_inf_pos, tc)
4626c414326Sjruoho {
4636c414326Sjruoho const float x = 1.0L / 0.0L;
4646c414326Sjruoho float y = floorf(x);
4656c414326Sjruoho
4666c414326Sjruoho if (isinf(y) == 0 || signbit(y) != 0)
4676c414326Sjruoho atf_tc_fail_nonfatal("floorf(+Inf) != +Inf");
4686c414326Sjruoho }
4696c414326Sjruoho
4706c414326Sjruoho ATF_TC(floorf_zero_neg);
ATF_TC_HEAD(floorf_zero_neg,tc)4716c414326Sjruoho ATF_TC_HEAD(floorf_zero_neg, tc)
4726c414326Sjruoho {
4736c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floorf(-0.0) == -0.0");
4746c414326Sjruoho }
4756c414326Sjruoho
ATF_TC_BODY(floorf_zero_neg,tc)4766c414326Sjruoho ATF_TC_BODY(floorf_zero_neg, tc)
4776c414326Sjruoho {
4786c414326Sjruoho const float x = -0.0L;
4796c414326Sjruoho float y = floorf(x);
4806c414326Sjruoho
4816c414326Sjruoho if (fabsf(y) > 0.0 || signbit(y) == 0)
4826c414326Sjruoho atf_tc_fail_nonfatal("floorf(-0.0) != -0.0");
4836c414326Sjruoho }
4846c414326Sjruoho
4856c414326Sjruoho ATF_TC(floorf_zero_pos);
ATF_TC_HEAD(floorf_zero_pos,tc)4866c414326Sjruoho ATF_TC_HEAD(floorf_zero_pos, tc)
4876c414326Sjruoho {
4886c414326Sjruoho atf_tc_set_md_var(tc, "descr", "Test floorf(+0.0) == +0.0");
4896c414326Sjruoho }
4906c414326Sjruoho
ATF_TC_BODY(floorf_zero_pos,tc)4916c414326Sjruoho ATF_TC_BODY(floorf_zero_pos, tc)
4926c414326Sjruoho {
4936c414326Sjruoho const float x = 0.0L;
4946c414326Sjruoho float y = floorf(x);
4956c414326Sjruoho
4966c414326Sjruoho if (fabsf(y) > 0.0 || signbit(y) != 0)
4976c414326Sjruoho atf_tc_fail_nonfatal("floorf(+0.0) != +0.0");
4986c414326Sjruoho }
4996c414326Sjruoho
5002e412cf6Sjoerg /*
5012e412cf6Sjoerg * floorl(3)
5022e412cf6Sjoerg */
5032e412cf6Sjoerg ATF_TC(floorl_basic);
ATF_TC_HEAD(floorl_basic,tc)5042e412cf6Sjoerg ATF_TC_HEAD(floorl_basic, tc)
5052e412cf6Sjoerg {
5062e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "A basic test of floorl(3)");
5072e412cf6Sjoerg }
5082e412cf6Sjoerg
ATF_TC_BODY(floorl_basic,tc)5092e412cf6Sjoerg ATF_TC_BODY(floorl_basic, tc)
5102e412cf6Sjoerg {
5112e412cf6Sjoerg const long double x = 0.9999999;
5122e412cf6Sjoerg const long double y = 0.0000001;
5132e412cf6Sjoerg
5142e412cf6Sjoerg ATF_CHECK(floorl(x) < SMALL_NUM);
5152e412cf6Sjoerg ATF_CHECK(floorl(y) < SMALL_NUM);
5162e412cf6Sjoerg }
5172e412cf6Sjoerg
5182e412cf6Sjoerg ATF_TC(floorl_nan);
ATF_TC_HEAD(floorl_nan,tc)5192e412cf6Sjoerg ATF_TC_HEAD(floorl_nan, tc)
5202e412cf6Sjoerg {
5212e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test floorl(NaN) == NaN");
5222e412cf6Sjoerg }
5232e412cf6Sjoerg
ATF_TC_BODY(floorl_nan,tc)5242e412cf6Sjoerg ATF_TC_BODY(floorl_nan, tc)
5252e412cf6Sjoerg {
5262e412cf6Sjoerg const long double x = 0.0L / 0.0L;
5272e412cf6Sjoerg
5282e412cf6Sjoerg ATF_CHECK(isnan(floorl(x)) != 0);
5292e412cf6Sjoerg }
5302e412cf6Sjoerg
5312e412cf6Sjoerg ATF_TC(floorl_inf_neg);
ATF_TC_HEAD(floorl_inf_neg,tc)5322e412cf6Sjoerg ATF_TC_HEAD(floorl_inf_neg, tc)
5332e412cf6Sjoerg {
5342e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test floorl(-Inf) == -Inf");
5352e412cf6Sjoerg }
5362e412cf6Sjoerg
ATF_TC_BODY(floorl_inf_neg,tc)5372e412cf6Sjoerg ATF_TC_BODY(floorl_inf_neg, tc)
5382e412cf6Sjoerg {
5392e412cf6Sjoerg const long double x = -1.0L / 0.0L;
5402e412cf6Sjoerg long double y = floorl(x);
5412e412cf6Sjoerg
5422e412cf6Sjoerg if (isinf(y) == 0 || signbit(y) == 0)
5432e412cf6Sjoerg atf_tc_fail_nonfatal("floorl(-Inf) != -Inf");
5442e412cf6Sjoerg }
5452e412cf6Sjoerg
5462e412cf6Sjoerg ATF_TC(floorl_inf_pos);
ATF_TC_HEAD(floorl_inf_pos,tc)5472e412cf6Sjoerg ATF_TC_HEAD(floorl_inf_pos, tc)
5482e412cf6Sjoerg {
5492e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test floorl(+Inf) == +Inf");
5502e412cf6Sjoerg }
5512e412cf6Sjoerg
ATF_TC_BODY(floorl_inf_pos,tc)5522e412cf6Sjoerg ATF_TC_BODY(floorl_inf_pos, tc)
5532e412cf6Sjoerg {
5542e412cf6Sjoerg const long double x = 1.0L / 0.0L;
5552e412cf6Sjoerg long double y = floorl(x);
5562e412cf6Sjoerg
5572e412cf6Sjoerg if (isinf(y) == 0 || signbit(y) != 0)
5582e412cf6Sjoerg atf_tc_fail_nonfatal("floorl(+Inf) != +Inf");
5592e412cf6Sjoerg }
5602e412cf6Sjoerg
5612e412cf6Sjoerg ATF_TC(floorl_zero_neg);
ATF_TC_HEAD(floorl_zero_neg,tc)5622e412cf6Sjoerg ATF_TC_HEAD(floorl_zero_neg, tc)
5632e412cf6Sjoerg {
5642e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test floorl(-0.0) == -0.0");
5652e412cf6Sjoerg }
5662e412cf6Sjoerg
ATF_TC_BODY(floorl_zero_neg,tc)5672e412cf6Sjoerg ATF_TC_BODY(floorl_zero_neg, tc)
5682e412cf6Sjoerg {
5692e412cf6Sjoerg const long double x = -0.0L;
5702e412cf6Sjoerg long double y = floorl(x);
5712e412cf6Sjoerg
5722e412cf6Sjoerg if (fabsl(y) > 0.0 || signbit(y) == 0)
5732e412cf6Sjoerg atf_tc_fail_nonfatal("floorl(-0.0) != -0.0");
5742e412cf6Sjoerg }
5752e412cf6Sjoerg
5762e412cf6Sjoerg ATF_TC(floorl_zero_pos);
ATF_TC_HEAD(floorl_zero_pos,tc)5772e412cf6Sjoerg ATF_TC_HEAD(floorl_zero_pos, tc)
5782e412cf6Sjoerg {
5792e412cf6Sjoerg atf_tc_set_md_var(tc, "descr", "Test floorl(+0.0) == +0.0");
5802e412cf6Sjoerg }
5812e412cf6Sjoerg
ATF_TC_BODY(floorl_zero_pos,tc)5822e412cf6Sjoerg ATF_TC_BODY(floorl_zero_pos, tc)
5832e412cf6Sjoerg {
5842e412cf6Sjoerg const long double x = 0.0L;
5852e412cf6Sjoerg long double y = floorl(x);
5862e412cf6Sjoerg
5872e412cf6Sjoerg if (fabsl(y) > 0.0 || signbit(y) != 0)
5882e412cf6Sjoerg atf_tc_fail_nonfatal("floorl(+0.0) != +0.0");
5892e412cf6Sjoerg }
5902e412cf6Sjoerg
591cbc2f8caSjoerg /*
592cbc2f8caSjoerg * trunc(3)
593cbc2f8caSjoerg */
594cbc2f8caSjoerg ATF_TC(trunc_basic);
ATF_TC_HEAD(trunc_basic,tc)595cbc2f8caSjoerg ATF_TC_HEAD(trunc_basic, tc)
596cbc2f8caSjoerg {
597cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "A basic test of trunc(3)");
598cbc2f8caSjoerg }
599cbc2f8caSjoerg
ATF_TC_BODY(trunc_basic,tc)600cbc2f8caSjoerg ATF_TC_BODY(trunc_basic, tc)
601cbc2f8caSjoerg {
602cbc2f8caSjoerg const double x = 0.999999999999999;
603cbc2f8caSjoerg const double y = 0.000000000000001;
604cbc2f8caSjoerg
605cbc2f8caSjoerg ATF_CHECK(trunc(x) < SMALL_NUM);
606cbc2f8caSjoerg ATF_CHECK(trunc(y) < SMALL_NUM);
607cbc2f8caSjoerg }
608cbc2f8caSjoerg
609cbc2f8caSjoerg ATF_TC(trunc_nan);
ATF_TC_HEAD(trunc_nan,tc)610cbc2f8caSjoerg ATF_TC_HEAD(trunc_nan, tc)
611cbc2f8caSjoerg {
612cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test trunc(NaN) == NaN");
613cbc2f8caSjoerg }
614cbc2f8caSjoerg
ATF_TC_BODY(trunc_nan,tc)615cbc2f8caSjoerg ATF_TC_BODY(trunc_nan, tc)
616cbc2f8caSjoerg {
617cbc2f8caSjoerg const double x = 0.0L / 0.0L;
618cbc2f8caSjoerg
619cbc2f8caSjoerg ATF_CHECK(isnan(trunc(x)) != 0);
620cbc2f8caSjoerg }
621cbc2f8caSjoerg
622cbc2f8caSjoerg ATF_TC(trunc_inf_neg);
ATF_TC_HEAD(trunc_inf_neg,tc)623cbc2f8caSjoerg ATF_TC_HEAD(trunc_inf_neg, tc)
624cbc2f8caSjoerg {
625cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test trunc(-Inf) == -Inf");
626cbc2f8caSjoerg }
627cbc2f8caSjoerg
ATF_TC_BODY(trunc_inf_neg,tc)628cbc2f8caSjoerg ATF_TC_BODY(trunc_inf_neg, tc)
629cbc2f8caSjoerg {
630cbc2f8caSjoerg const double x = -1.0L / 0.0L;
631cbc2f8caSjoerg double y = trunc(x);
632cbc2f8caSjoerg
633cbc2f8caSjoerg if (isinf(y) == 0 || signbit(y) == 0)
634cbc2f8caSjoerg atf_tc_fail_nonfatal("trunc(-Inf) != -Inf");
635cbc2f8caSjoerg }
636cbc2f8caSjoerg
637cbc2f8caSjoerg ATF_TC(trunc_inf_pos);
ATF_TC_HEAD(trunc_inf_pos,tc)638cbc2f8caSjoerg ATF_TC_HEAD(trunc_inf_pos, tc)
639cbc2f8caSjoerg {
640cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test trunc(+Inf) == +Inf");
641cbc2f8caSjoerg }
642cbc2f8caSjoerg
ATF_TC_BODY(trunc_inf_pos,tc)643cbc2f8caSjoerg ATF_TC_BODY(trunc_inf_pos, tc)
644cbc2f8caSjoerg {
645cbc2f8caSjoerg const double x = 1.0L / 0.0L;
646cbc2f8caSjoerg double y = trunc(x);
647cbc2f8caSjoerg
648cbc2f8caSjoerg if (isinf(y) == 0 || signbit(y) != 0)
649cbc2f8caSjoerg atf_tc_fail_nonfatal("trunc(+Inf) != +Inf");
650cbc2f8caSjoerg }
651cbc2f8caSjoerg
652cbc2f8caSjoerg ATF_TC(trunc_zero_neg);
ATF_TC_HEAD(trunc_zero_neg,tc)653cbc2f8caSjoerg ATF_TC_HEAD(trunc_zero_neg, tc)
654cbc2f8caSjoerg {
655cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test trunc(-0.0) == -0.0");
656cbc2f8caSjoerg }
657cbc2f8caSjoerg
ATF_TC_BODY(trunc_zero_neg,tc)658cbc2f8caSjoerg ATF_TC_BODY(trunc_zero_neg, tc)
659cbc2f8caSjoerg {
660cbc2f8caSjoerg const double x = -0.0L;
661cbc2f8caSjoerg double y = trunc(x);
662cbc2f8caSjoerg
663cbc2f8caSjoerg if (fabs(y) > 0.0 || signbit(y) == 0)
664cbc2f8caSjoerg atf_tc_fail_nonfatal("trunc(-0.0) != -0.0");
665cbc2f8caSjoerg }
666cbc2f8caSjoerg
667cbc2f8caSjoerg ATF_TC(trunc_zero_pos);
ATF_TC_HEAD(trunc_zero_pos,tc)668cbc2f8caSjoerg ATF_TC_HEAD(trunc_zero_pos, tc)
669cbc2f8caSjoerg {
670cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test trunc(+0.0) == +0.0");
671cbc2f8caSjoerg }
672cbc2f8caSjoerg
ATF_TC_BODY(trunc_zero_pos,tc)673cbc2f8caSjoerg ATF_TC_BODY(trunc_zero_pos, tc)
674cbc2f8caSjoerg {
675cbc2f8caSjoerg const double x = 0.0L;
676cbc2f8caSjoerg double y = trunc(x);
677cbc2f8caSjoerg
678cbc2f8caSjoerg if (fabs(y) > 0.0 || signbit(y) != 0)
679cbc2f8caSjoerg atf_tc_fail_nonfatal("trunc(+0.0) != +0.0");
680cbc2f8caSjoerg }
681cbc2f8caSjoerg
682cbc2f8caSjoerg /*
683cbc2f8caSjoerg * truncf(3)
684cbc2f8caSjoerg */
685cbc2f8caSjoerg ATF_TC(truncf_basic);
ATF_TC_HEAD(truncf_basic,tc)686cbc2f8caSjoerg ATF_TC_HEAD(truncf_basic, tc)
687cbc2f8caSjoerg {
688cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "A basic test of truncf(3)");
689cbc2f8caSjoerg }
690cbc2f8caSjoerg
ATF_TC_BODY(truncf_basic,tc)691cbc2f8caSjoerg ATF_TC_BODY(truncf_basic, tc)
692cbc2f8caSjoerg {
693cbc2f8caSjoerg const float x = 0.9999999;
694cbc2f8caSjoerg const float y = 0.0000001;
695cbc2f8caSjoerg
696cbc2f8caSjoerg ATF_CHECK(truncf(x) < SMALL_NUM);
697cbc2f8caSjoerg ATF_CHECK(truncf(y) < SMALL_NUM);
698cbc2f8caSjoerg }
699cbc2f8caSjoerg
700cbc2f8caSjoerg ATF_TC(truncf_nan);
ATF_TC_HEAD(truncf_nan,tc)701cbc2f8caSjoerg ATF_TC_HEAD(truncf_nan, tc)
702cbc2f8caSjoerg {
703cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncf(NaN) == NaN");
704cbc2f8caSjoerg }
705cbc2f8caSjoerg
ATF_TC_BODY(truncf_nan,tc)706cbc2f8caSjoerg ATF_TC_BODY(truncf_nan, tc)
707cbc2f8caSjoerg {
708cbc2f8caSjoerg const float x = 0.0L / 0.0L;
709cbc2f8caSjoerg
710cbc2f8caSjoerg ATF_CHECK(isnan(truncf(x)) != 0);
711cbc2f8caSjoerg }
712cbc2f8caSjoerg
713cbc2f8caSjoerg ATF_TC(truncf_inf_neg);
ATF_TC_HEAD(truncf_inf_neg,tc)714cbc2f8caSjoerg ATF_TC_HEAD(truncf_inf_neg, tc)
715cbc2f8caSjoerg {
716cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncf(-Inf) == -Inf");
717cbc2f8caSjoerg }
718cbc2f8caSjoerg
ATF_TC_BODY(truncf_inf_neg,tc)719cbc2f8caSjoerg ATF_TC_BODY(truncf_inf_neg, tc)
720cbc2f8caSjoerg {
721cbc2f8caSjoerg const float x = -1.0L / 0.0L;
722cbc2f8caSjoerg float y = truncf(x);
723cbc2f8caSjoerg
724cbc2f8caSjoerg if (isinf(y) == 0 || signbit(y) == 0)
725cbc2f8caSjoerg atf_tc_fail_nonfatal("truncf(-Inf) != -Inf");
726cbc2f8caSjoerg }
727cbc2f8caSjoerg
728cbc2f8caSjoerg ATF_TC(truncf_inf_pos);
ATF_TC_HEAD(truncf_inf_pos,tc)729cbc2f8caSjoerg ATF_TC_HEAD(truncf_inf_pos, tc)
730cbc2f8caSjoerg {
731cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncf(+Inf) == +Inf");
732cbc2f8caSjoerg }
733cbc2f8caSjoerg
ATF_TC_BODY(truncf_inf_pos,tc)734cbc2f8caSjoerg ATF_TC_BODY(truncf_inf_pos, tc)
735cbc2f8caSjoerg {
736cbc2f8caSjoerg const float x = 1.0L / 0.0L;
737cbc2f8caSjoerg float y = truncf(x);
738cbc2f8caSjoerg
739cbc2f8caSjoerg if (isinf(y) == 0 || signbit(y) != 0)
740cbc2f8caSjoerg atf_tc_fail_nonfatal("truncf(+Inf) != +Inf");
741cbc2f8caSjoerg }
742cbc2f8caSjoerg
743cbc2f8caSjoerg ATF_TC(truncf_zero_neg);
ATF_TC_HEAD(truncf_zero_neg,tc)744cbc2f8caSjoerg ATF_TC_HEAD(truncf_zero_neg, tc)
745cbc2f8caSjoerg {
746cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncf(-0.0) == -0.0");
747cbc2f8caSjoerg }
748cbc2f8caSjoerg
ATF_TC_BODY(truncf_zero_neg,tc)749cbc2f8caSjoerg ATF_TC_BODY(truncf_zero_neg, tc)
750cbc2f8caSjoerg {
751cbc2f8caSjoerg const float x = -0.0L;
752cbc2f8caSjoerg float y = truncf(x);
753cbc2f8caSjoerg
754cbc2f8caSjoerg if (fabsf(y) > 0.0 || signbit(y) == 0)
755cbc2f8caSjoerg atf_tc_fail_nonfatal("truncf(-0.0) != -0.0");
756cbc2f8caSjoerg }
757cbc2f8caSjoerg
758cbc2f8caSjoerg ATF_TC(truncf_zero_pos);
ATF_TC_HEAD(truncf_zero_pos,tc)759cbc2f8caSjoerg ATF_TC_HEAD(truncf_zero_pos, tc)
760cbc2f8caSjoerg {
761cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncf(+0.0) == +0.0");
762cbc2f8caSjoerg }
763cbc2f8caSjoerg
ATF_TC_BODY(truncf_zero_pos,tc)764cbc2f8caSjoerg ATF_TC_BODY(truncf_zero_pos, tc)
765cbc2f8caSjoerg {
766cbc2f8caSjoerg const float x = 0.0L;
767cbc2f8caSjoerg float y = truncf(x);
768cbc2f8caSjoerg
769cbc2f8caSjoerg if (fabsf(y) > 0.0 || signbit(y) != 0)
770cbc2f8caSjoerg atf_tc_fail_nonfatal("truncf(+0.0) != +0.0");
771cbc2f8caSjoerg }
772cbc2f8caSjoerg
773cbc2f8caSjoerg /*
774cbc2f8caSjoerg * truncl(3)
775cbc2f8caSjoerg */
776cbc2f8caSjoerg ATF_TC(truncl_basic);
ATF_TC_HEAD(truncl_basic,tc)777cbc2f8caSjoerg ATF_TC_HEAD(truncl_basic, tc)
778cbc2f8caSjoerg {
779cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "A basic test of truncl(3)");
780cbc2f8caSjoerg }
781cbc2f8caSjoerg
ATF_TC_BODY(truncl_basic,tc)782cbc2f8caSjoerg ATF_TC_BODY(truncl_basic, tc)
783cbc2f8caSjoerg {
784cbc2f8caSjoerg const long double x = 0.9999999;
785cbc2f8caSjoerg const long double y = 0.0000001;
786cbc2f8caSjoerg
787cbc2f8caSjoerg ATF_CHECK(truncl(x) < SMALL_NUM);
788cbc2f8caSjoerg ATF_CHECK(truncl(y) < SMALL_NUM);
789cbc2f8caSjoerg }
790cbc2f8caSjoerg
791cbc2f8caSjoerg ATF_TC(truncl_nan);
ATF_TC_HEAD(truncl_nan,tc)792cbc2f8caSjoerg ATF_TC_HEAD(truncl_nan, tc)
793cbc2f8caSjoerg {
794cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncl(NaN) == NaN");
795cbc2f8caSjoerg }
796cbc2f8caSjoerg
ATF_TC_BODY(truncl_nan,tc)797cbc2f8caSjoerg ATF_TC_BODY(truncl_nan, tc)
798cbc2f8caSjoerg {
799cbc2f8caSjoerg const long double x = 0.0L / 0.0L;
800cbc2f8caSjoerg
801cbc2f8caSjoerg ATF_CHECK(isnan(truncl(x)) != 0);
802cbc2f8caSjoerg }
803cbc2f8caSjoerg
804cbc2f8caSjoerg ATF_TC(truncl_inf_neg);
ATF_TC_HEAD(truncl_inf_neg,tc)805cbc2f8caSjoerg ATF_TC_HEAD(truncl_inf_neg, tc)
806cbc2f8caSjoerg {
807cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncl(-Inf) == -Inf");
808cbc2f8caSjoerg }
809cbc2f8caSjoerg
ATF_TC_BODY(truncl_inf_neg,tc)810cbc2f8caSjoerg ATF_TC_BODY(truncl_inf_neg, tc)
811cbc2f8caSjoerg {
812cbc2f8caSjoerg const long double x = -1.0L / 0.0L;
813cbc2f8caSjoerg long double y = truncl(x);
814cbc2f8caSjoerg
815cbc2f8caSjoerg if (isinf(y) == 0 || signbit(y) == 0)
816cbc2f8caSjoerg atf_tc_fail_nonfatal("truncl(-Inf) != -Inf");
817cbc2f8caSjoerg }
818cbc2f8caSjoerg
819cbc2f8caSjoerg ATF_TC(truncl_inf_pos);
ATF_TC_HEAD(truncl_inf_pos,tc)820cbc2f8caSjoerg ATF_TC_HEAD(truncl_inf_pos, tc)
821cbc2f8caSjoerg {
822cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncl(+Inf) == +Inf");
823cbc2f8caSjoerg }
824cbc2f8caSjoerg
ATF_TC_BODY(truncl_inf_pos,tc)825cbc2f8caSjoerg ATF_TC_BODY(truncl_inf_pos, tc)
826cbc2f8caSjoerg {
827cbc2f8caSjoerg const long double x = 1.0L / 0.0L;
828cbc2f8caSjoerg long double y = truncl(x);
829cbc2f8caSjoerg
830cbc2f8caSjoerg if (isinf(y) == 0 || signbit(y) != 0)
831cbc2f8caSjoerg atf_tc_fail_nonfatal("truncl(+Inf) != +Inf");
832cbc2f8caSjoerg }
833cbc2f8caSjoerg
834cbc2f8caSjoerg ATF_TC(truncl_zero_neg);
ATF_TC_HEAD(truncl_zero_neg,tc)835cbc2f8caSjoerg ATF_TC_HEAD(truncl_zero_neg, tc)
836cbc2f8caSjoerg {
837cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncl(-0.0) == -0.0");
838cbc2f8caSjoerg }
839cbc2f8caSjoerg
ATF_TC_BODY(truncl_zero_neg,tc)840cbc2f8caSjoerg ATF_TC_BODY(truncl_zero_neg, tc)
841cbc2f8caSjoerg {
842cbc2f8caSjoerg const long double x = -0.0L;
843cbc2f8caSjoerg long double y = truncl(x);
844cbc2f8caSjoerg
845cbc2f8caSjoerg if (fabsl(y) > 0.0 || signbit(y) == 0)
846cbc2f8caSjoerg atf_tc_fail_nonfatal("truncl(-0.0) != -0.0");
847cbc2f8caSjoerg }
848cbc2f8caSjoerg
849cbc2f8caSjoerg ATF_TC(truncl_zero_pos);
ATF_TC_HEAD(truncl_zero_pos,tc)850cbc2f8caSjoerg ATF_TC_HEAD(truncl_zero_pos, tc)
851cbc2f8caSjoerg {
852cbc2f8caSjoerg atf_tc_set_md_var(tc, "descr", "Test truncl(+0.0) == +0.0");
853cbc2f8caSjoerg }
854cbc2f8caSjoerg
ATF_TC_BODY(truncl_zero_pos,tc)855cbc2f8caSjoerg ATF_TC_BODY(truncl_zero_pos, tc)
856cbc2f8caSjoerg {
857cbc2f8caSjoerg const long double x = 0.0L;
858cbc2f8caSjoerg long double y = truncl(x);
859cbc2f8caSjoerg
860cbc2f8caSjoerg if (fabsl(y) > 0.0 || signbit(y) != 0)
861cbc2f8caSjoerg atf_tc_fail_nonfatal("truncl(+0.0) != +0.0");
862cbc2f8caSjoerg }
863cbc2f8caSjoerg
ATF_TP_ADD_TCS(tp)86457842fd3Sjruoho ATF_TP_ADD_TCS(tp)
86557842fd3Sjruoho {
866bfd40496Sjruoho
867bfd40496Sjruoho ATF_TP_ADD_TC(tp, ceil_basic);
8686c414326Sjruoho ATF_TP_ADD_TC(tp, ceil_nan);
8696c414326Sjruoho ATF_TP_ADD_TC(tp, ceil_inf_neg);
8706c414326Sjruoho ATF_TP_ADD_TC(tp, ceil_inf_pos);
8716c414326Sjruoho ATF_TP_ADD_TC(tp, ceil_zero_neg);
8726c414326Sjruoho ATF_TP_ADD_TC(tp, ceil_zero_pos);
8736c414326Sjruoho
874bfd40496Sjruoho ATF_TP_ADD_TC(tp, ceilf_basic);
8756c414326Sjruoho ATF_TP_ADD_TC(tp, ceilf_nan);
8766c414326Sjruoho ATF_TP_ADD_TC(tp, ceilf_inf_neg);
8776c414326Sjruoho ATF_TP_ADD_TC(tp, ceilf_inf_pos);
8786c414326Sjruoho ATF_TP_ADD_TC(tp, ceilf_zero_neg);
8796c414326Sjruoho ATF_TP_ADD_TC(tp, ceilf_zero_pos);
8806c414326Sjruoho
8812e412cf6Sjoerg ATF_TP_ADD_TC(tp, ceill_basic);
8822e412cf6Sjoerg ATF_TP_ADD_TC(tp, ceill_nan);
8832e412cf6Sjoerg ATF_TP_ADD_TC(tp, ceill_inf_neg);
8842e412cf6Sjoerg ATF_TP_ADD_TC(tp, ceill_inf_pos);
8852e412cf6Sjoerg ATF_TP_ADD_TC(tp, ceill_zero_neg);
8862e412cf6Sjoerg ATF_TP_ADD_TC(tp, ceill_zero_pos);
8872e412cf6Sjoerg
8885fe09634Sjruoho ATF_TP_ADD_TC(tp, floor_basic);
8896c414326Sjruoho ATF_TP_ADD_TC(tp, floor_nan);
8906c414326Sjruoho ATF_TP_ADD_TC(tp, floor_inf_neg);
8916c414326Sjruoho ATF_TP_ADD_TC(tp, floor_inf_pos);
8926c414326Sjruoho ATF_TP_ADD_TC(tp, floor_zero_neg);
8936c414326Sjruoho ATF_TP_ADD_TC(tp, floor_zero_pos);
8946c414326Sjruoho
895bfd40496Sjruoho ATF_TP_ADD_TC(tp, floorf_basic);
8966c414326Sjruoho ATF_TP_ADD_TC(tp, floorf_nan);
8976c414326Sjruoho ATF_TP_ADD_TC(tp, floorf_inf_neg);
8986c414326Sjruoho ATF_TP_ADD_TC(tp, floorf_inf_pos);
8996c414326Sjruoho ATF_TP_ADD_TC(tp, floorf_zero_neg);
9006c414326Sjruoho ATF_TP_ADD_TC(tp, floorf_zero_pos);
90157842fd3Sjruoho
9022e412cf6Sjoerg ATF_TP_ADD_TC(tp, floorl_basic);
9032e412cf6Sjoerg ATF_TP_ADD_TC(tp, floorl_nan);
9042e412cf6Sjoerg ATF_TP_ADD_TC(tp, floorl_inf_neg);
9052e412cf6Sjoerg ATF_TP_ADD_TC(tp, floorl_inf_pos);
9062e412cf6Sjoerg ATF_TP_ADD_TC(tp, floorl_zero_neg);
9072e412cf6Sjoerg ATF_TP_ADD_TC(tp, floorl_zero_pos);
9082e412cf6Sjoerg
909cbc2f8caSjoerg ATF_TP_ADD_TC(tp, trunc_basic);
910cbc2f8caSjoerg ATF_TP_ADD_TC(tp, trunc_nan);
911cbc2f8caSjoerg ATF_TP_ADD_TC(tp, trunc_inf_neg);
912cbc2f8caSjoerg ATF_TP_ADD_TC(tp, trunc_inf_pos);
913cbc2f8caSjoerg ATF_TP_ADD_TC(tp, trunc_zero_neg);
914cbc2f8caSjoerg ATF_TP_ADD_TC(tp, trunc_zero_pos);
915cbc2f8caSjoerg
916cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncf_basic);
917cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncf_nan);
918cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncf_inf_neg);
919cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncf_inf_pos);
920cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncf_zero_neg);
921cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncf_zero_pos);
922cbc2f8caSjoerg
923cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncl_basic);
924cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncl_nan);
925cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncl_inf_neg);
926cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncl_inf_pos);
927cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncl_zero_neg);
928cbc2f8caSjoerg ATF_TP_ADD_TC(tp, truncl_zero_pos);
929cbc2f8caSjoerg
93057842fd3Sjruoho return atf_no_error();
93157842fd3Sjruoho }
932