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 static_assert((std::is_same<decltype(isinf((double)0)), bool>::value), ""); 225 static_assert((std::is_same<decltype(isinf((long double)0)), bool>::value), ""); 226 assert(isinf(-1.0) == false); 227 } 228 229 void test_isnan() 230 { 231 static_assert((std::is_same<decltype(isnan((float)0)), bool>::value), ""); 232 static_assert((std::is_same<decltype(isnan((double)0)), bool>::value), ""); 233 static_assert((std::is_same<decltype(isnan((long double)0)), bool>::value), ""); 234 assert(isnan(-1.0) == false); 235 } 236 237 void test_isnormal() 238 { 239 static_assert((std::is_same<decltype(isnormal((float)0)), bool>::value), ""); 240 static_assert((std::is_same<decltype(isnormal((double)0)), bool>::value), ""); 241 static_assert((std::is_same<decltype(isnormal((long double)0)), bool>::value), ""); 242 assert(isnormal(-1.0) == true); 243 } 244 245 void test_isgreater() 246 { 247 static_assert((std::is_same<decltype(isgreater((float)0, (float)0)), bool>::value), ""); 248 static_assert((std::is_same<decltype(isgreater((float)0, (double)0)), bool>::value), ""); 249 static_assert((std::is_same<decltype(isgreater((float)0, (long double)0)), bool>::value), ""); 250 static_assert((std::is_same<decltype(isgreater((double)0, (float)0)), bool>::value), ""); 251 static_assert((std::is_same<decltype(isgreater((double)0, (double)0)), bool>::value), ""); 252 static_assert((std::is_same<decltype(isgreater((double)0, (long double)0)), bool>::value), ""); 253 static_assert((std::is_same<decltype(isgreater((long double)0, (float)0)), bool>::value), ""); 254 static_assert((std::is_same<decltype(isgreater((long double)0, (double)0)), bool>::value), ""); 255 static_assert((std::is_same<decltype(isgreater((long double)0, (long double)0)), bool>::value), ""); 256 assert(isgreater(-1.0, 0.F) == false); 257 } 258 259 void test_isgreaterequal() 260 { 261 static_assert((std::is_same<decltype(isgreaterequal((float)0, (float)0)), bool>::value), ""); 262 static_assert((std::is_same<decltype(isgreaterequal((float)0, (double)0)), bool>::value), ""); 263 static_assert((std::is_same<decltype(isgreaterequal((float)0, (long double)0)), bool>::value), ""); 264 static_assert((std::is_same<decltype(isgreaterequal((double)0, (float)0)), bool>::value), ""); 265 static_assert((std::is_same<decltype(isgreaterequal((double)0, (double)0)), bool>::value), ""); 266 static_assert((std::is_same<decltype(isgreaterequal((double)0, (long double)0)), bool>::value), ""); 267 static_assert((std::is_same<decltype(isgreaterequal((long double)0, (float)0)), bool>::value), ""); 268 static_assert((std::is_same<decltype(isgreaterequal((long double)0, (double)0)), bool>::value), ""); 269 static_assert((std::is_same<decltype(isgreaterequal((long double)0, (long double)0)), bool>::value), ""); 270 assert(isgreaterequal(-1.0, 0.F) == false); 271 } 272 273 void test_isless() 274 { 275 static_assert((std::is_same<decltype(isless((float)0, (float)0)), bool>::value), ""); 276 static_assert((std::is_same<decltype(isless((float)0, (double)0)), bool>::value), ""); 277 static_assert((std::is_same<decltype(isless((float)0, (long double)0)), bool>::value), ""); 278 static_assert((std::is_same<decltype(isless((double)0, (float)0)), bool>::value), ""); 279 static_assert((std::is_same<decltype(isless((double)0, (double)0)), bool>::value), ""); 280 static_assert((std::is_same<decltype(isless((double)0, (long double)0)), bool>::value), ""); 281 static_assert((std::is_same<decltype(isless((long double)0, (float)0)), bool>::value), ""); 282 static_assert((std::is_same<decltype(isless((long double)0, (double)0)), bool>::value), ""); 283 static_assert((std::is_same<decltype(isless((long double)0, (long double)0)), bool>::value), ""); 284 assert(isless(-1.0, 0.F) == true); 285 } 286 287 void test_islessequal() 288 { 289 static_assert((std::is_same<decltype(islessequal((float)0, (float)0)), bool>::value), ""); 290 static_assert((std::is_same<decltype(islessequal((float)0, (double)0)), bool>::value), ""); 291 static_assert((std::is_same<decltype(islessequal((float)0, (long double)0)), bool>::value), ""); 292 static_assert((std::is_same<decltype(islessequal((double)0, (float)0)), bool>::value), ""); 293 static_assert((std::is_same<decltype(islessequal((double)0, (double)0)), bool>::value), ""); 294 static_assert((std::is_same<decltype(islessequal((double)0, (long double)0)), bool>::value), ""); 295 static_assert((std::is_same<decltype(islessequal((long double)0, (float)0)), bool>::value), ""); 296 static_assert((std::is_same<decltype(islessequal((long double)0, (double)0)), bool>::value), ""); 297 static_assert((std::is_same<decltype(islessequal((long double)0, (long double)0)), bool>::value), ""); 298 assert(islessequal(-1.0, 0.F) == true); 299 } 300 301 void test_islessgreater() 302 { 303 static_assert((std::is_same<decltype(islessgreater((float)0, (float)0)), bool>::value), ""); 304 static_assert((std::is_same<decltype(islessgreater((float)0, (double)0)), bool>::value), ""); 305 static_assert((std::is_same<decltype(islessgreater((float)0, (long double)0)), bool>::value), ""); 306 static_assert((std::is_same<decltype(islessgreater((double)0, (float)0)), bool>::value), ""); 307 static_assert((std::is_same<decltype(islessgreater((double)0, (double)0)), bool>::value), ""); 308 static_assert((std::is_same<decltype(islessgreater((double)0, (long double)0)), bool>::value), ""); 309 static_assert((std::is_same<decltype(islessgreater((long double)0, (float)0)), bool>::value), ""); 310 static_assert((std::is_same<decltype(islessgreater((long double)0, (double)0)), bool>::value), ""); 311 static_assert((std::is_same<decltype(islessgreater((long double)0, (long double)0)), bool>::value), ""); 312 assert(islessgreater(-1.0, 0.F) == true); 313 } 314 315 void test_isunordered() 316 { 317 static_assert((std::is_same<decltype(isunordered((float)0, (float)0)), bool>::value), ""); 318 static_assert((std::is_same<decltype(isunordered((float)0, (double)0)), bool>::value), ""); 319 static_assert((std::is_same<decltype(isunordered((float)0, (long double)0)), bool>::value), ""); 320 static_assert((std::is_same<decltype(isunordered((double)0, (float)0)), bool>::value), ""); 321 static_assert((std::is_same<decltype(isunordered((double)0, (double)0)), bool>::value), ""); 322 static_assert((std::is_same<decltype(isunordered((double)0, (long double)0)), bool>::value), ""); 323 static_assert((std::is_same<decltype(isunordered((long double)0, (float)0)), bool>::value), ""); 324 static_assert((std::is_same<decltype(isunordered((long double)0, (double)0)), bool>::value), ""); 325 static_assert((std::is_same<decltype(isunordered((long double)0, (long double)0)), bool>::value), ""); 326 assert(isunordered(-1.0, 0.F) == false); 327 } 328 329 void test_acosh() 330 { 331 static_assert((std::is_same<decltype(acosh((double)0)), double>::value), ""); 332 static_assert((std::is_same<decltype(acoshf(0)), float>::value), ""); 333 static_assert((std::is_same<decltype(acoshl(0)), long double>::value), ""); 334 assert(acosh(1) == 0); 335 } 336 337 void test_asinh() 338 { 339 static_assert((std::is_same<decltype(asinh((double)0)), double>::value), ""); 340 static_assert((std::is_same<decltype(asinhf(0)), float>::value), ""); 341 static_assert((std::is_same<decltype(asinhl(0)), long double>::value), ""); 342 assert(asinh(0) == 0); 343 } 344 345 void test_atanh() 346 { 347 static_assert((std::is_same<decltype(atanh((double)0)), double>::value), ""); 348 static_assert((std::is_same<decltype(atanhf(0)), float>::value), ""); 349 static_assert((std::is_same<decltype(atanhl(0)), long double>::value), ""); 350 assert(atanh(0) == 0); 351 } 352 353 void test_cbrt() 354 { 355 static_assert((std::is_same<decltype(cbrt((double)0)), double>::value), ""); 356 static_assert((std::is_same<decltype(cbrtf(0)), float>::value), ""); 357 static_assert((std::is_same<decltype(cbrtl(0)), long double>::value), ""); 358 assert(cbrt(1) == 1); 359 } 360 361 void test_copysign() 362 { 363 static_assert((std::is_same<decltype(copysign((double)0, (double)0)), double>::value), ""); 364 static_assert((std::is_same<decltype(copysignf(0,0)), float>::value), ""); 365 static_assert((std::is_same<decltype(copysignl(0,0)), long double>::value), ""); 366 assert(copysign(1,1) == 1); 367 } 368 369 void test_erf() 370 { 371 static_assert((std::is_same<decltype(erf((double)0)), double>::value), ""); 372 static_assert((std::is_same<decltype(erff(0)), float>::value), ""); 373 static_assert((std::is_same<decltype(erfl(0)), long double>::value), ""); 374 assert(erf(0) == 0); 375 } 376 377 void test_erfc() 378 { 379 static_assert((std::is_same<decltype(erfc((double)0)), double>::value), ""); 380 static_assert((std::is_same<decltype(erfcf(0)), float>::value), ""); 381 static_assert((std::is_same<decltype(erfcl(0)), long double>::value), ""); 382 assert(erfc(0) == 1); 383 } 384 385 void test_exp2() 386 { 387 static_assert((std::is_same<decltype(exp2((double)0)), double>::value), ""); 388 static_assert((std::is_same<decltype(exp2f(0)), float>::value), ""); 389 static_assert((std::is_same<decltype(exp2l(0)), long double>::value), ""); 390 assert(exp2(1) == 2); 391 } 392 393 void test_expm1() 394 { 395 static_assert((std::is_same<decltype(expm1((double)0)), double>::value), ""); 396 static_assert((std::is_same<decltype(expm1f(0)), float>::value), ""); 397 static_assert((std::is_same<decltype(expm1l(0)), long double>::value), ""); 398 assert(expm1(0) == 0); 399 } 400 401 void test_fdim() 402 { 403 static_assert((std::is_same<decltype(fdim((double)0, (double)0)), double>::value), ""); 404 static_assert((std::is_same<decltype(fdimf(0,0)), float>::value), ""); 405 static_assert((std::is_same<decltype(fdiml(0,0)), long double>::value), ""); 406 assert(fdim(1,0) == 1); 407 } 408 409 void test_fma() 410 { 411 static_assert((std::is_same<decltype(fma((double)0, (double)0, (double)0)), double>::value), ""); 412 static_assert((std::is_same<decltype(fmaf(0,0,0)), float>::value), ""); 413 static_assert((std::is_same<decltype(fmal(0,0,0)), long double>::value), ""); 414 assert(fma(1,1,1) == 2); 415 } 416 417 void test_fmax() 418 { 419 static_assert((std::is_same<decltype(fmax((double)0, (double)0)), double>::value), ""); 420 static_assert((std::is_same<decltype(fmaxf(0,0)), float>::value), ""); 421 static_assert((std::is_same<decltype(fmaxl(0,0)), long double>::value), ""); 422 assert(fmax(1,0) == 1); 423 } 424 425 void test_fmin() 426 { 427 static_assert((std::is_same<decltype(fmin((double)0, (double)0)), double>::value), ""); 428 static_assert((std::is_same<decltype(fminf(0,0)), float>::value), ""); 429 static_assert((std::is_same<decltype(fminl(0,0)), long double>::value), ""); 430 assert(fmin(1,0) == 0); 431 } 432 433 void test_hypot() 434 { 435 static_assert((std::is_same<decltype(hypot((double)0, (double)0)), double>::value), ""); 436 static_assert((std::is_same<decltype(hypotf(0,0)), float>::value), ""); 437 static_assert((std::is_same<decltype(hypotl(0,0)), long double>::value), ""); 438 assert(hypot(3,4) == 5); 439 } 440 441 void test_ilogb() 442 { 443 static_assert((std::is_same<decltype(ilogb((double)0)), int>::value), ""); 444 static_assert((std::is_same<decltype(ilogbf(0)), int>::value), ""); 445 static_assert((std::is_same<decltype(ilogbl(0)), int>::value), ""); 446 assert(ilogb(1) == 0); 447 } 448 449 void test_lgamma() 450 { 451 static_assert((std::is_same<decltype(lgamma((double)0)), double>::value), ""); 452 static_assert((std::is_same<decltype(lgammaf(0)), float>::value), ""); 453 static_assert((std::is_same<decltype(lgammal(0)), long double>::value), ""); 454 assert(lgamma(1) == 0); 455 } 456 457 void test_llrint() 458 { 459 static_assert((std::is_same<decltype(llrint((double)0)), long long>::value), ""); 460 static_assert((std::is_same<decltype(llrintf(0)), long long>::value), ""); 461 static_assert((std::is_same<decltype(llrintl(0)), long long>::value), ""); 462 assert(llrint(1) == 1LL); 463 } 464 465 void test_llround() 466 { 467 static_assert((std::is_same<decltype(llround((double)0)), long long>::value), ""); 468 static_assert((std::is_same<decltype(llroundf(0)), long long>::value), ""); 469 static_assert((std::is_same<decltype(llroundl(0)), long long>::value), ""); 470 assert(llround(1) == 1LL); 471 } 472 473 void test_log1p() 474 { 475 static_assert((std::is_same<decltype(log1p((double)0)), double>::value), ""); 476 static_assert((std::is_same<decltype(log1pf(0)), float>::value), ""); 477 static_assert((std::is_same<decltype(log1pl(0)), long double>::value), ""); 478 assert(log1p(0) == 0); 479 } 480 481 void test_log2() 482 { 483 static_assert((std::is_same<decltype(log2((double)0)), double>::value), ""); 484 static_assert((std::is_same<decltype(log2f(0)), float>::value), ""); 485 static_assert((std::is_same<decltype(log2l(0)), long double>::value), ""); 486 assert(log2(1) == 0); 487 } 488 489 void test_logb() 490 { 491 static_assert((std::is_same<decltype(logb((double)0)), double>::value), ""); 492 static_assert((std::is_same<decltype(logbf(0)), float>::value), ""); 493 static_assert((std::is_same<decltype(logbl(0)), long double>::value), ""); 494 assert(logb(1) == 0); 495 } 496 497 void test_lrint() 498 { 499 static_assert((std::is_same<decltype(lrint((double)0)), long>::value), ""); 500 static_assert((std::is_same<decltype(lrintf(0)), long>::value), ""); 501 static_assert((std::is_same<decltype(lrintl(0)), long>::value), ""); 502 assert(lrint(1) == 1L); 503 } 504 505 void test_lround() 506 { 507 static_assert((std::is_same<decltype(lround((double)0)), long>::value), ""); 508 static_assert((std::is_same<decltype(lroundf(0)), long>::value), ""); 509 static_assert((std::is_same<decltype(lroundl(0)), long>::value), ""); 510 assert(lround(1) == 1L); 511 } 512 513 void test_nan() 514 { 515 static_assert((std::is_same<decltype(nan("")), double>::value), ""); 516 static_assert((std::is_same<decltype(nanf("")), float>::value), ""); 517 static_assert((std::is_same<decltype(nanl("")), long double>::value), ""); 518 } 519 520 void test_nearbyint() 521 { 522 static_assert((std::is_same<decltype(nearbyint((double)0)), double>::value), ""); 523 static_assert((std::is_same<decltype(nearbyintf(0)), float>::value), ""); 524 static_assert((std::is_same<decltype(nearbyintl(0)), long double>::value), ""); 525 assert(nearbyint(1) == 1); 526 } 527 528 void test_nextafter() 529 { 530 static_assert((std::is_same<decltype(nextafter((double)0, (double)0)), double>::value), ""); 531 static_assert((std::is_same<decltype(nextafterf(0,0)), float>::value), ""); 532 static_assert((std::is_same<decltype(nextafterl(0,0)), long double>::value), ""); 533 assert(nextafter(0,1) == hexfloat<double>(0x1, 0, -1074)); 534 } 535 536 void test_nexttoward() 537 { 538 static_assert((std::is_same<decltype(nexttoward((double)0, (long double)0)), double>::value), ""); 539 static_assert((std::is_same<decltype(nexttowardf(0, (long double)0)), float>::value), ""); 540 static_assert((std::is_same<decltype(nexttowardl(0, (long double)0)), long double>::value), ""); 541 assert(nexttoward(0, 1) == hexfloat<double>(0x1, 0, -1074)); 542 } 543 544 void test_remainder() 545 { 546 static_assert((std::is_same<decltype(remainder((double)0, (double)0)), double>::value), ""); 547 static_assert((std::is_same<decltype(remainderf(0,0)), float>::value), ""); 548 static_assert((std::is_same<decltype(remainderl(0,0)), long double>::value), ""); 549 static_assert((std::is_same<decltype(remainder((int)0, (int)0)), double>::value), ""); 550 assert(remainder(0.5,1) == 0.5); 551 } 552 553 void test_remquo() 554 { 555 int ip; 556 static_assert((std::is_same<decltype(remquo((double)0, (double)0, &ip)), double>::value), ""); 557 static_assert((std::is_same<decltype(remquof(0,0, &ip)), float>::value), ""); 558 static_assert((std::is_same<decltype(remquol(0,0, &ip)), long double>::value), ""); 559 assert(remquo(0.5,1, &ip) == 0.5); 560 } 561 562 void test_rint() 563 { 564 static_assert((std::is_same<decltype(rint((double)0)), double>::value), ""); 565 static_assert((std::is_same<decltype(rintf(0)), float>::value), ""); 566 static_assert((std::is_same<decltype(rintl(0)), long double>::value), ""); 567 assert(rint(1) == 1); 568 } 569 570 void test_round() 571 { 572 static_assert((std::is_same<decltype(round((double)0)), double>::value), ""); 573 static_assert((std::is_same<decltype(roundf(0)), float>::value), ""); 574 static_assert((std::is_same<decltype(roundl(0)), long double>::value), ""); 575 assert(round(1) == 1); 576 } 577 578 void test_scalbln() 579 { 580 static_assert((std::is_same<decltype(scalbln((double)0, (long)0)), double>::value), ""); 581 static_assert((std::is_same<decltype(scalblnf(0, (long)0)), float>::value), ""); 582 static_assert((std::is_same<decltype(scalblnl(0, (long)0)), long double>::value), ""); 583 assert(scalbln(1, 1) == 2); 584 } 585 586 void test_scalbn() 587 { 588 static_assert((std::is_same<decltype(scalbn((double)0, (int)0)), double>::value), ""); 589 static_assert((std::is_same<decltype(scalbnf(0, (int)0)), float>::value), ""); 590 static_assert((std::is_same<decltype(scalbnl(0, (int)0)), long double>::value), ""); 591 assert(scalbn(1, 1) == 2); 592 } 593 594 void test_tgamma() 595 { 596 static_assert((std::is_same<decltype(tgamma((double)0)), double>::value), ""); 597 static_assert((std::is_same<decltype(tgammaf(0)), float>::value), ""); 598 static_assert((std::is_same<decltype(tgammal(0)), long double>::value), ""); 599 assert(tgamma(1) == 1); 600 } 601 602 void test_trunc() 603 { 604 static_assert((std::is_same<decltype(trunc((double)0)), double>::value), ""); 605 static_assert((std::is_same<decltype(truncf(0)), float>::value), ""); 606 static_assert((std::is_same<decltype(truncl(0)), long double>::value), ""); 607 assert(trunc(1) == 1); 608 } 609 610 int main() 611 { 612 test_acos(); 613 test_asin(); 614 test_atan(); 615 test_atan2(); 616 test_ceil(); 617 test_cos(); 618 test_cosh(); 619 test_exp(); 620 test_fabs(); 621 test_floor(); 622 test_fmod(); 623 test_frexp(); 624 test_ldexp(); 625 test_log(); 626 test_log10(); 627 test_modf(); 628 test_pow(); 629 test_sin(); 630 test_sinh(); 631 test_sqrt(); 632 test_tan(); 633 test_tanh(); 634 test_signbit(); 635 test_fpclassify(); 636 test_isfinite(); 637 test_isinf(); 638 test_isnan(); 639 test_isnormal(); 640 test_isgreater(); 641 test_isgreaterequal(); 642 test_isless(); 643 test_islessequal(); 644 test_islessgreater(); 645 test_isunordered(); 646 test_acosh(); 647 test_asinh(); 648 test_atanh(); 649 test_cbrt(); 650 test_copysign(); 651 test_erf(); 652 test_erfc(); 653 test_exp2(); 654 test_expm1(); 655 test_fdim(); 656 test_fma(); 657 test_fmax(); 658 test_fmin(); 659 test_hypot(); 660 test_ilogb(); 661 test_lgamma(); 662 test_llrint(); 663 test_llround(); 664 test_log1p(); 665 test_log2(); 666 test_logb(); 667 test_lrint(); 668 test_lround(); 669 test_nan(); 670 test_nearbyint(); 671 test_nextafter(); 672 test_nexttoward(); 673 test_remainder(); 674 test_remquo(); 675 test_rint(); 676 test_round(); 677 test_scalbln(); 678 test_scalbn(); 679 test_tgamma(); 680 test_trunc(); 681 } 682