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