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