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