Home | History | Annotate | Download | only in depr.c.headers
      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)), float>::value), "");
     86     static_assert((std::is_same<decltype(fabsl(0)), long double>::value), "");
     87     assert(fabs(-1) == 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