1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <math.h> 11 12 // XFAIL: linux 13 14 #include <math.h> 15 #include <type_traits> 16 #include <cassert> 17 18 #include "hexfloat.h" 19 20 void test_acos() 21 { 22 static_assert((std::is_same<decltype(acos((double)0)), double>::value), ""); 23 static_assert((std::is_same<decltype(acosf(0)), float>::value), ""); 24 static_assert((std::is_same<decltype(acosl(0)), long double>::value), ""); 25 assert(acos(1) == 0); 26 } 27 28 void test_asin() 29 { 30 static_assert((std::is_same<decltype(asin((double)0)), double>::value), ""); 31 static_assert((std::is_same<decltype(asinf(0)), float>::value), ""); 32 static_assert((std::is_same<decltype(asinl(0)), long double>::value), ""); 33 assert(asin(0) == 0); 34 } 35 36 void test_atan() 37 { 38 static_assert((std::is_same<decltype(atan((double)0)), double>::value), ""); 39 static_assert((std::is_same<decltype(atanf(0)), float>::value), ""); 40 static_assert((std::is_same<decltype(atanl(0)), long double>::value), ""); 41 assert(atan(0) == 0); 42 } 43 44 void test_atan2() 45 { 46 static_assert((std::is_same<decltype(atan2((double)0, (double)0)), double>::value), ""); 47 static_assert((std::is_same<decltype(atan2f(0,0)), float>::value), ""); 48 static_assert((std::is_same<decltype(atan2l(0,0)), long double>::value), ""); 49 assert(atan2(0,1) == 0); 50 } 51 52 void test_ceil() 53 { 54 static_assert((std::is_same<decltype(ceil((double)0)), double>::value), ""); 55 static_assert((std::is_same<decltype(ceilf(0)), float>::value), ""); 56 static_assert((std::is_same<decltype(ceill(0)), long double>::value), ""); 57 assert(ceil(0) == 0); 58 } 59 60 void test_cos() 61 { 62 static_assert((std::is_same<decltype(cos((double)0)), double>::value), ""); 63 static_assert((std::is_same<decltype(cosf(0)), float>::value), ""); 64 static_assert((std::is_same<decltype(cosl(0)), long double>::value), ""); 65 assert(cos(0) == 1); 66 } 67 68 void test_cosh() 69 { 70 static_assert((std::is_same<decltype(cosh((double)0)), double>::value), ""); 71 static_assert((std::is_same<decltype(coshf(0)), float>::value), ""); 72 static_assert((std::is_same<decltype(coshl(0)), long double>::value), ""); 73 assert(cosh(0) == 1); 74 } 75 76 void test_exp() 77 { 78 static_assert((std::is_same<decltype(exp((double)0)), double>::value), ""); 79 static_assert((std::is_same<decltype(expf(0)), float>::value), ""); 80 static_assert((std::is_same<decltype(expl(0)), long double>::value), ""); 81 assert(exp(0) == 1); 82 } 83 84 void test_fabs() 85 { 86 static_assert((std::is_same<decltype(fabs((double)0)), double>::value), ""); 87 static_assert((std::is_same<decltype(fabsf(0.f)), float>::value), ""); 88 static_assert((std::is_same<decltype(fabsl(0.L)), long double>::value), ""); 89 assert(fabs(-1.f) == 1); 90 } 91 92 void test_floor() 93 { 94 static_assert((std::is_same<decltype(floor((double)0)), double>::value), ""); 95 static_assert((std::is_same<decltype(floorf(0)), float>::value), ""); 96 static_assert((std::is_same<decltype(floorl(0)), long double>::value), ""); 97 assert(floor(1) == 1); 98 } 99 100 void test_fmod() 101 { 102 static_assert((std::is_same<decltype(fmod((double)0, (double)0)), double>::value), ""); 103 static_assert((std::is_same<decltype(fmodf(0,0)), float>::value), ""); 104 static_assert((std::is_same<decltype(fmodl(0,0)), long double>::value), ""); 105 assert(fmod(1.5,1) == .5); 106 } 107 108 void test_frexp() 109 { 110 int ip; 111 static_assert((std::is_same<decltype(frexp((double)0, &ip)), double>::value), ""); 112 static_assert((std::is_same<decltype(frexpf(0, &ip)), float>::value), ""); 113 static_assert((std::is_same<decltype(frexpl(0, &ip)), long double>::value), ""); 114 assert(frexp(0, &ip) == 0); 115 } 116 117 void test_ldexp() 118 { 119 int ip = 1; 120 static_assert((std::is_same<decltype(ldexp((double)0, ip)), double>::value), ""); 121 static_assert((std::is_same<decltype(ldexpf(0, ip)), float>::value), ""); 122 static_assert((std::is_same<decltype(ldexpl(0, ip)), long double>::value), ""); 123 assert(ldexp(1, ip) == 2); 124 } 125 126 void test_log() 127 { 128 static_assert((std::is_same<decltype(log((double)0)), double>::value), ""); 129 static_assert((std::is_same<decltype(logf(0)), float>::value), ""); 130 static_assert((std::is_same<decltype(logl(0)), long double>::value), ""); 131 assert(log(1) == 0); 132 } 133 134 void test_log10() 135 { 136 static_assert((std::is_same<decltype(log10((double)0)), double>::value), ""); 137 static_assert((std::is_same<decltype(log10f(0)), float>::value), ""); 138 static_assert((std::is_same<decltype(log10l(0)), long double>::value), ""); 139 assert(log10(1) == 0); 140 } 141 142 void test_modf() 143 { 144 static_assert((std::is_same<decltype(modf((double)0, (double*)0)), double>::value), ""); 145 static_assert((std::is_same<decltype(modff(0, (float*)0)), float>::value), ""); 146 static_assert((std::is_same<decltype(modfl(0, (long double*)0)), long double>::value), ""); 147 double i; 148 assert(modf(1., &i) == 0); 149 } 150 151 void test_pow() 152 { 153 static_assert((std::is_same<decltype(pow((double)0, (double)0)), double>::value), ""); 154 static_assert((std::is_same<decltype(powf(0,0)), float>::value), ""); 155 static_assert((std::is_same<decltype(powl(0,0)), long double>::value), ""); 156 assert(pow(1,1) == 1); 157 } 158 159 void test_sin() 160 { 161 static_assert((std::is_same<decltype(sin((double)0)), double>::value), ""); 162 static_assert((std::is_same<decltype(sinf(0)), float>::value), ""); 163 static_assert((std::is_same<decltype(sinl(0)), long double>::value), ""); 164 assert(sin(0) == 0); 165 } 166 167 void test_sinh() 168 { 169 static_assert((std::is_same<decltype(sinh((double)0)), double>::value), ""); 170 static_assert((std::is_same<decltype(sinhf(0)), float>::value), ""); 171 static_assert((std::is_same<decltype(sinhl(0)), long double>::value), ""); 172 assert(sinh(0) == 0); 173 } 174 175 void test_sqrt() 176 { 177 static_assert((std::is_same<decltype(sqrt((double)0)), double>::value), ""); 178 static_assert((std::is_same<decltype(sqrtf(0)), float>::value), ""); 179 static_assert((std::is_same<decltype(sqrtl(0)), long double>::value), ""); 180 assert(sqrt(4) == 2); 181 } 182 183 void test_tan() 184 { 185 static_assert((std::is_same<decltype(tan((double)0)), double>::value), ""); 186 static_assert((std::is_same<decltype(tanf(0)), float>::value), ""); 187 static_assert((std::is_same<decltype(tanl(0)), long double>::value), ""); 188 assert(tan(0) == 0); 189 } 190 191 void test_tanh() 192 { 193 static_assert((std::is_same<decltype(tanh((double)0)), double>::value), ""); 194 static_assert((std::is_same<decltype(tanhf(0)), float>::value), ""); 195 static_assert((std::is_same<decltype(tanhl(0)), long double>::value), ""); 196 assert(tanh(0) == 0); 197 } 198 199 void test_signbit() 200 { 201 static_assert((std::is_same<decltype(signbit((float)0)), bool>::value), ""); 202 static_assert((std::is_same<decltype(signbit((double)0)), bool>::value), ""); 203 static_assert((std::is_same<decltype(signbit((long double)0)), bool>::value), ""); 204 assert(signbit(-1.0) == true); 205 } 206 207 void test_fpclassify() 208 { 209 static_assert((std::is_same<decltype(fpclassify((float)0)), int>::value), ""); 210 static_assert((std::is_same<decltype(fpclassify((double)0)), int>::value), ""); 211 static_assert((std::is_same<decltype(fpclassify((long double)0)), int>::value), ""); 212 assert(fpclassify(-1.0) == FP_NORMAL); 213 } 214 215 void test_isfinite() 216 { 217 static_assert((std::is_same<decltype(isfinite((float)0)), bool>::value), ""); 218 static_assert((std::is_same<decltype(isfinite((double)0)), bool>::value), ""); 219 static_assert((std::is_same<decltype(isfinite((long double)0)), bool>::value), ""); 220 assert(isfinite(-1.0) == true); 221 } 222 223 void test_isinf() 224 { 225 static_assert((std::is_same<decltype(isinf((float)0)), bool>::value), ""); 226 static_assert((std::is_same<decltype(isinf((double)0)), bool>::value), ""); 227 static_assert((std::is_same<decltype(isinf((long double)0)), bool>::value), ""); 228 assert(isinf(-1.0) == false); 229 } 230 231 void test_isnan() 232 { 233 static_assert((std::is_same<decltype(isnan((float)0)), bool>::value), ""); 234 static_assert((std::is_same<decltype(isnan((double)0)), bool>::value), ""); 235 static_assert((std::is_same<decltype(isnan((long double)0)), bool>::value), ""); 236 assert(isnan(-1.0) == false); 237 } 238 239 void test_isnormal() 240 { 241 static_assert((std::is_same<decltype(isnormal((float)0)), bool>::value), ""); 242 static_assert((std::is_same<decltype(isnormal((double)0)), bool>::value), ""); 243 static_assert((std::is_same<decltype(isnormal((long double)0)), bool>::value), ""); 244 assert(isnormal(-1.0) == true); 245 } 246 247 void test_isgreater() 248 { 249 static_assert((std::is_same<decltype(isgreater((float)0, (float)0)), bool>::value), ""); 250 static_assert((std::is_same<decltype(isgreater((float)0, (double)0)), bool>::value), ""); 251 static_assert((std::is_same<decltype(isgreater((float)0, (long double)0)), bool>::value), ""); 252 static_assert((std::is_same<decltype(isgreater((double)0, (float)0)), bool>::value), ""); 253 static_assert((std::is_same<decltype(isgreater((double)0, (double)0)), bool>::value), ""); 254 static_assert((std::is_same<decltype(isgreater((double)0, (long double)0)), bool>::value), ""); 255 static_assert((std::is_same<decltype(isgreater((long double)0, (float)0)), bool>::value), ""); 256 static_assert((std::is_same<decltype(isgreater((long double)0, (double)0)), bool>::value), ""); 257 static_assert((std::is_same<decltype(isgreater((long double)0, (long double)0)), bool>::value), ""); 258 assert(isgreater(-1.0, 0.F) == false); 259 } 260 261 void test_isgreaterequal() 262 { 263 static_assert((std::is_same<decltype(isgreaterequal((float)0, (float)0)), bool>::value), ""); 264 static_assert((std::is_same<decltype(isgreaterequal((float)0, (double)0)), bool>::value), ""); 265 static_assert((std::is_same<decltype(isgreaterequal((float)0, (long double)0)), bool>::value), ""); 266 static_assert((std::is_same<decltype(isgreaterequal((double)0, (float)0)), bool>::value), ""); 267 static_assert((std::is_same<decltype(isgreaterequal((double)0, (double)0)), bool>::value), ""); 268 static_assert((std::is_same<decltype(isgreaterequal((double)0, (long double)0)), bool>::value), ""); 269 static_assert((std::is_same<decltype(isgreaterequal((long double)0, (float)0)), bool>::value), ""); 270 static_assert((std::is_same<decltype(isgreaterequal((long double)0, (double)0)), bool>::value), ""); 271 static_assert((std::is_same<decltype(isgreaterequal((long double)0, (long double)0)), bool>::value), ""); 272 assert(isgreaterequal(-1.0, 0.F) == false); 273 } 274 275 void test_isless() 276 { 277 static_assert((std::is_same<decltype(isless((float)0, (float)0)), bool>::value), ""); 278 static_assert((std::is_same<decltype(isless((float)0, (double)0)), bool>::value), ""); 279 static_assert((std::is_same<decltype(isless((float)0, (long double)0)), bool>::value), ""); 280 static_assert((std::is_same<decltype(isless((double)0, (float)0)), bool>::value), ""); 281 static_assert((std::is_same<decltype(isless((double)0, (double)0)), bool>::value), ""); 282 static_assert((std::is_same<decltype(isless((double)0, (long double)0)), bool>::value), ""); 283 static_assert((std::is_same<decltype(isless((long double)0, (float)0)), bool>::value), ""); 284 static_assert((std::is_same<decltype(isless((long double)0, (double)0)), bool>::value), ""); 285 static_assert((std::is_same<decltype(isless((long double)0, (long double)0)), bool>::value), ""); 286 assert(isless(-1.0, 0.F) == true); 287 } 288 289 void test_islessequal() 290 { 291 static_assert((std::is_same<decltype(islessequal((float)0, (float)0)), bool>::value), ""); 292 static_assert((std::is_same<decltype(islessequal((float)0, (double)0)), bool>::value), ""); 293 static_assert((std::is_same<decltype(islessequal((float)0, (long double)0)), bool>::value), ""); 294 static_assert((std::is_same<decltype(islessequal((double)0, (float)0)), bool>::value), ""); 295 static_assert((std::is_same<decltype(islessequal((double)0, (double)0)), bool>::value), ""); 296 static_assert((std::is_same<decltype(islessequal((double)0, (long double)0)), bool>::value), ""); 297 static_assert((std::is_same<decltype(islessequal((long double)0, (float)0)), bool>::value), ""); 298 static_assert((std::is_same<decltype(islessequal((long double)0, (double)0)), bool>::value), ""); 299 static_assert((std::is_same<decltype(islessequal((long double)0, (long double)0)), bool>::value), ""); 300 assert(islessequal(-1.0, 0.F) == true); 301 } 302 303 void test_islessgreater() 304 { 305 static_assert((std::is_same<decltype(islessgreater((float)0, (float)0)), bool>::value), ""); 306 static_assert((std::is_same<decltype(islessgreater((float)0, (double)0)), bool>::value), ""); 307 static_assert((std::is_same<decltype(islessgreater((float)0, (long double)0)), bool>::value), ""); 308 static_assert((std::is_same<decltype(islessgreater((double)0, (float)0)), bool>::value), ""); 309 static_assert((std::is_same<decltype(islessgreater((double)0, (double)0)), bool>::value), ""); 310 static_assert((std::is_same<decltype(islessgreater((double)0, (long double)0)), bool>::value), ""); 311 static_assert((std::is_same<decltype(islessgreater((long double)0, (float)0)), bool>::value), ""); 312 static_assert((std::is_same<decltype(islessgreater((long double)0, (double)0)), bool>::value), ""); 313 static_assert((std::is_same<decltype(islessgreater((long double)0, (long double)0)), bool>::value), ""); 314 assert(islessgreater(-1.0, 0.F) == true); 315 } 316 317 void test_isunordered() 318 { 319 static_assert((std::is_same<decltype(isunordered((float)0, (float)0)), bool>::value), ""); 320 static_assert((std::is_same<decltype(isunordered((float)0, (double)0)), bool>::value), ""); 321 static_assert((std::is_same<decltype(isunordered((float)0, (long double)0)), bool>::value), ""); 322 static_assert((std::is_same<decltype(isunordered((double)0, (float)0)), bool>::value), ""); 323 static_assert((std::is_same<decltype(isunordered((double)0, (double)0)), bool>::value), ""); 324 static_assert((std::is_same<decltype(isunordered((double)0, (long double)0)), bool>::value), ""); 325 static_assert((std::is_same<decltype(isunordered((long double)0, (float)0)), bool>::value), ""); 326 static_assert((std::is_same<decltype(isunordered((long double)0, (double)0)), bool>::value), ""); 327 static_assert((std::is_same<decltype(isunordered((long double)0, (long double)0)), bool>::value), ""); 328 assert(isunordered(-1.0, 0.F) == false); 329 } 330 331 void test_acosh() 332 { 333 static_assert((std::is_same<decltype(acosh((double)0)), double>::value), ""); 334 static_assert((std::is_same<decltype(acoshf(0)), float>::value), ""); 335 static_assert((std::is_same<decltype(acoshl(0)), long double>::value), ""); 336 assert(acosh(1) == 0); 337 } 338 339 void test_asinh() 340 { 341 static_assert((std::is_same<decltype(asinh((double)0)), double>::value), ""); 342 static_assert((std::is_same<decltype(asinhf(0)), float>::value), ""); 343 static_assert((std::is_same<decltype(asinhl(0)), long double>::value), ""); 344 assert(asinh(0) == 0); 345 } 346 347 void test_atanh() 348 { 349 static_assert((std::is_same<decltype(atanh((double)0)), double>::value), ""); 350 static_assert((std::is_same<decltype(atanhf(0)), float>::value), ""); 351 static_assert((std::is_same<decltype(atanhl(0)), long double>::value), ""); 352 assert(atanh(0) == 0); 353 } 354 355 void test_cbrt() 356 { 357 static_assert((std::is_same<decltype(cbrt((double)0)), double>::value), ""); 358 static_assert((std::is_same<decltype(cbrtf(0)), float>::value), ""); 359 static_assert((std::is_same<decltype(cbrtl(0)), long double>::value), ""); 360 assert(cbrt(1) == 1); 361 } 362 363 void test_copysign() 364 { 365 static_assert((std::is_same<decltype(copysign((double)0, (double)0)), double>::value), ""); 366 static_assert((std::is_same<decltype(copysignf(0,0)), float>::value), ""); 367 static_assert((std::is_same<decltype(copysignl(0,0)), long double>::value), ""); 368 assert(copysign(1,1) == 1); 369 } 370 371 void test_erf() 372 { 373 static_assert((std::is_same<decltype(erf((double)0)), double>::value), ""); 374 static_assert((std::is_same<decltype(erff(0)), float>::value), ""); 375 static_assert((std::is_same<decltype(erfl(0)), long double>::value), ""); 376 assert(erf(0) == 0); 377 } 378 379 void test_erfc() 380 { 381 static_assert((std::is_same<decltype(erfc((double)0)), double>::value), ""); 382 static_assert((std::is_same<decltype(erfcf(0)), float>::value), ""); 383 static_assert((std::is_same<decltype(erfcl(0)), long double>::value), ""); 384 assert(erfc(0) == 1); 385 } 386 387 void test_exp2() 388 { 389 static_assert((std::is_same<decltype(exp2((double)0)), double>::value), ""); 390 static_assert((std::is_same<decltype(exp2f(0)), float>::value), ""); 391 static_assert((std::is_same<decltype(exp2l(0)), long double>::value), ""); 392 assert(exp2(1) == 2); 393 } 394 395 void test_expm1() 396 { 397 static_assert((std::is_same<decltype(expm1((double)0)), double>::value), ""); 398 static_assert((std::is_same<decltype(expm1f(0)), float>::value), ""); 399 static_assert((std::is_same<decltype(expm1l(0)), long double>::value), ""); 400 assert(expm1(0) == 0); 401 } 402 403 void test_fdim() 404 { 405 static_assert((std::is_same<decltype(fdim((double)0, (double)0)), double>::value), ""); 406 static_assert((std::is_same<decltype(fdimf(0,0)), float>::value), ""); 407 static_assert((std::is_same<decltype(fdiml(0,0)), long double>::value), ""); 408 assert(fdim(1,0) == 1); 409 } 410 411 void test_fma() 412 { 413 static_assert((std::is_same<decltype(fma((double)0, (double)0, (double)0)), double>::value), ""); 414 static_assert((std::is_same<decltype(fmaf(0,0,0)), float>::value), ""); 415 static_assert((std::is_same<decltype(fmal(0,0,0)), long double>::value), ""); 416 assert(fma(1,1,1) == 2); 417 } 418 419 void test_fmax() 420 { 421 static_assert((std::is_same<decltype(fmax((double)0, (double)0)), double>::value), ""); 422 static_assert((std::is_same<decltype(fmaxf(0,0)), float>::value), ""); 423 static_assert((std::is_same<decltype(fmaxl(0,0)), long double>::value), ""); 424 assert(fmax(1,0) == 1); 425 } 426 427 void test_fmin() 428 { 429 static_assert((std::is_same<decltype(fmin((double)0, (double)0)), double>::value), ""); 430 static_assert((std::is_same<decltype(fminf(0,0)), float>::value), ""); 431 static_assert((std::is_same<decltype(fminl(0,0)), long double>::value), ""); 432 assert(fmin(1,0) == 0); 433 } 434 435 void test_hypot() 436 { 437 static_assert((std::is_same<decltype(hypot((double)0, (double)0)), double>::value), ""); 438 static_assert((std::is_same<decltype(hypotf(0,0)), float>::value), ""); 439 static_assert((std::is_same<decltype(hypotl(0,0)), long double>::value), ""); 440 assert(hypot(3,4) == 5); 441 } 442 443 void test_ilogb() 444 { 445 static_assert((std::is_same<decltype(ilogb((double)0)), int>::value), ""); 446 static_assert((std::is_same<decltype(ilogbf(0)), int>::value), ""); 447 static_assert((std::is_same<decltype(ilogbl(0)), int>::value), ""); 448 assert(ilogb(1) == 0); 449 } 450 451 void test_lgamma() 452 { 453 static_assert((std::is_same<decltype(lgamma((double)0)), double>::value), ""); 454 static_assert((std::is_same<decltype(lgammaf(0)), float>::value), ""); 455 static_assert((std::is_same<decltype(lgammal(0)), long double>::value), ""); 456 assert(lgamma(1) == 0); 457 } 458 459 void test_llrint() 460 { 461 static_assert((std::is_same<decltype(llrint((double)0)), long long>::value), ""); 462 static_assert((std::is_same<decltype(llrintf(0)), long long>::value), ""); 463 static_assert((std::is_same<decltype(llrintl(0)), long long>::value), ""); 464 assert(llrint(1) == 1LL); 465 } 466 467 void test_llround() 468 { 469 static_assert((std::is_same<decltype(llround((double)0)), long long>::value), ""); 470 static_assert((std::is_same<decltype(llroundf(0)), long long>::value), ""); 471 static_assert((std::is_same<decltype(llroundl(0)), long long>::value), ""); 472 assert(llround(1) == 1LL); 473 } 474 475 void test_log1p() 476 { 477 static_assert((std::is_same<decltype(log1p((double)0)), double>::value), ""); 478 static_assert((std::is_same<decltype(log1pf(0)), float>::value), ""); 479 static_assert((std::is_same<decltype(log1pl(0)), long double>::value), ""); 480 assert(log1p(0) == 0); 481 } 482 483 void test_log2() 484 { 485 static_assert((std::is_same<decltype(log2((double)0)), double>::value), ""); 486 static_assert((std::is_same<decltype(log2f(0)), float>::value), ""); 487 static_assert((std::is_same<decltype(log2l(0)), long double>::value), ""); 488 assert(log2(1) == 0); 489 } 490 491 void test_logb() 492 { 493 static_assert((std::is_same<decltype(logb((double)0)), double>::value), ""); 494 static_assert((std::is_same<decltype(logbf(0)), float>::value), ""); 495 static_assert((std::is_same<decltype(logbl(0)), long double>::value), ""); 496 assert(logb(1) == 0); 497 } 498 499 void test_lrint() 500 { 501 static_assert((std::is_same<decltype(lrint((double)0)), long>::value), ""); 502 static_assert((std::is_same<decltype(lrintf(0)), long>::value), ""); 503 static_assert((std::is_same<decltype(lrintl(0)), long>::value), ""); 504 assert(lrint(1) == 1L); 505 } 506 507 void test_lround() 508 { 509 static_assert((std::is_same<decltype(lround((double)0)), long>::value), ""); 510 static_assert((std::is_same<decltype(lroundf(0)), long>::value), ""); 511 static_assert((std::is_same<decltype(lroundl(0)), long>::value), ""); 512 assert(lround(1) == 1L); 513 } 514 515 void test_nan() 516 { 517 static_assert((std::is_same<decltype(nan("")), double>::value), ""); 518 static_assert((std::is_same<decltype(nanf("")), float>::value), ""); 519 static_assert((std::is_same<decltype(nanl("")), long double>::value), ""); 520 } 521 522 void test_nearbyint() 523 { 524 static_assert((std::is_same<decltype(nearbyint((double)0)), double>::value), ""); 525 static_assert((std::is_same<decltype(nearbyintf(0)), float>::value), ""); 526 static_assert((std::is_same<decltype(nearbyintl(0)), long double>::value), ""); 527 assert(nearbyint(1) == 1); 528 } 529 530 void test_nextafter() 531 { 532 static_assert((std::is_same<decltype(nextafter((double)0, (double)0)), double>::value), ""); 533 static_assert((std::is_same<decltype(nextafterf(0,0)), float>::value), ""); 534 static_assert((std::is_same<decltype(nextafterl(0,0)), long double>::value), ""); 535 assert(nextafter(0,1) == hexfloat<double>(0x1, 0, -1074)); 536 } 537 538 void test_nexttoward() 539 { 540 static_assert((std::is_same<decltype(nexttoward((double)0, (long double)0)), double>::value), ""); 541 static_assert((std::is_same<decltype(nexttowardf(0, (long double)0)), float>::value), ""); 542 static_assert((std::is_same<decltype(nexttowardl(0, (long double)0)), long double>::value), ""); 543 assert(nexttoward(0, 1) == hexfloat<double>(0x1, 0, -1074)); 544 } 545 546 void test_remainder() 547 { 548 static_assert((std::is_same<decltype(remainder((double)0, (double)0)), double>::value), ""); 549 static_assert((std::is_same<decltype(remainderf(0,0)), float>::value), ""); 550 static_assert((std::is_same<decltype(remainderl(0,0)), long double>::value), ""); 551 static_assert((std::is_same<decltype(remainder((int)0, (int)0)), double>::value), ""); 552 assert(remainder(0.5,1) == 0.5); 553 } 554 555 void test_remquo() 556 { 557 int ip; 558 static_assert((std::is_same<decltype(remquo((double)0, (double)0, &ip)), double>::value), ""); 559 static_assert((std::is_same<decltype(remquof(0,0, &ip)), float>::value), ""); 560 static_assert((std::is_same<decltype(remquol(0,0, &ip)), long double>::value), ""); 561 assert(remquo(0.5,1, &ip) == 0.5); 562 } 563 564 void test_rint() 565 { 566 static_assert((std::is_same<decltype(rint((double)0)), double>::value), ""); 567 static_assert((std::is_same<decltype(rintf(0)), float>::value), ""); 568 static_assert((std::is_same<decltype(rintl(0)), long double>::value), ""); 569 assert(rint(1) == 1); 570 } 571 572 void test_round() 573 { 574 static_assert((std::is_same<decltype(round((double)0)), double>::value), ""); 575 static_assert((std::is_same<decltype(roundf(0)), float>::value), ""); 576 static_assert((std::is_same<decltype(roundl(0)), long double>::value), ""); 577 assert(round(1) == 1); 578 } 579 580 void test_scalbln() 581 { 582 static_assert((std::is_same<decltype(scalbln((double)0, (long)0)), double>::value), ""); 583 static_assert((std::is_same<decltype(scalblnf(0, (long)0)), float>::value), ""); 584 static_assert((std::is_same<decltype(scalblnl(0, (long)0)), long double>::value), ""); 585 assert(scalbln(1, 1) == 2); 586 } 587 588 void test_scalbn() 589 { 590 static_assert((std::is_same<decltype(scalbn((double)0, (int)0)), double>::value), ""); 591 static_assert((std::is_same<decltype(scalbnf(0, (int)0)), float>::value), ""); 592 static_assert((std::is_same<decltype(scalbnl(0, (int)0)), long double>::value), ""); 593 assert(scalbn(1, 1) == 2); 594 } 595 596 void test_tgamma() 597 { 598 static_assert((std::is_same<decltype(tgamma((double)0)), double>::value), ""); 599 static_assert((std::is_same<decltype(tgammaf(0)), float>::value), ""); 600 static_assert((std::is_same<decltype(tgammal(0)), long double>::value), ""); 601 assert(tgamma(1) == 1); 602 } 603 604 void test_trunc() 605 { 606 static_assert((std::is_same<decltype(trunc((double)0)), double>::value), ""); 607 static_assert((std::is_same<decltype(truncf(0)), float>::value), ""); 608 static_assert((std::is_same<decltype(truncl(0)), long double>::value), ""); 609 assert(trunc(1) == 1); 610 } 611 612 int main() 613 { 614 test_acos(); 615 test_asin(); 616 test_atan(); 617 test_atan2(); 618 test_ceil(); 619 test_cos(); 620 test_cosh(); 621 test_exp(); 622 test_fabs(); 623 test_floor(); 624 test_fmod(); 625 test_frexp(); 626 test_ldexp(); 627 test_log(); 628 test_log10(); 629 test_modf(); 630 test_pow(); 631 test_sin(); 632 test_sinh(); 633 test_sqrt(); 634 test_tan(); 635 test_tanh(); 636 test_signbit(); 637 test_fpclassify(); 638 test_isfinite(); 639 test_isinf(); 640 test_isnan(); 641 test_isnormal(); 642 test_isgreater(); 643 test_isgreaterequal(); 644 test_isless(); 645 test_islessequal(); 646 test_islessgreater(); 647 test_isunordered(); 648 test_acosh(); 649 test_asinh(); 650 test_atanh(); 651 test_cbrt(); 652 test_copysign(); 653 test_erf(); 654 test_erfc(); 655 test_exp2(); 656 test_expm1(); 657 test_fdim(); 658 test_fma(); 659 test_fmax(); 660 test_fmin(); 661 test_hypot(); 662 test_ilogb(); 663 test_lgamma(); 664 test_llrint(); 665 test_llround(); 666 test_log1p(); 667 test_log2(); 668 test_logb(); 669 test_lrint(); 670 test_lround(); 671 test_nan(); 672 test_nearbyint(); 673 test_nextafter(); 674 test_nexttoward(); 675 test_remainder(); 676 test_remquo(); 677 test_rint(); 678 test_round(); 679 test_scalbln(); 680 test_scalbn(); 681 test_tgamma(); 682 test_trunc(); 683 } 684