xref: /minix3/external/bsd/libc++/dist/libcxx/test/numerics/c.math/cmath.pass.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
14684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
24684ddb6SLionel Sambuc //
34684ddb6SLionel Sambuc //                     The LLVM Compiler Infrastructure
44684ddb6SLionel Sambuc //
54684ddb6SLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
64684ddb6SLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
74684ddb6SLionel Sambuc //
84684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
94684ddb6SLionel Sambuc 
104684ddb6SLionel Sambuc // <cmath>
114684ddb6SLionel Sambuc 
12*0a6a1f1dSLionel Sambuc // NOTE: isinf and isnan are tested separately because they are expected to fail
13*0a6a1f1dSLionel Sambuc // on linux. We don't want their expected failure to hide other failures in this file.
14*0a6a1f1dSLionel Sambuc 
154684ddb6SLionel Sambuc #include <cmath>
164684ddb6SLionel Sambuc #include <type_traits>
174684ddb6SLionel Sambuc #include <cassert>
184684ddb6SLionel Sambuc 
194684ddb6SLionel Sambuc #include "hexfloat.h"
204684ddb6SLionel Sambuc 
21*0a6a1f1dSLionel Sambuc // convertible to int/float/double/etc
22*0a6a1f1dSLionel Sambuc template <class T, int N=0>
23*0a6a1f1dSLionel Sambuc struct Value {
operator TValue24*0a6a1f1dSLionel Sambuc     operator T () { return T(N); }
25*0a6a1f1dSLionel Sambuc };
26*0a6a1f1dSLionel Sambuc 
test_abs()274684ddb6SLionel Sambuc void test_abs()
284684ddb6SLionel Sambuc {
294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::abs((float)0)), float>::value), "");
304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::abs((double)0)), double>::value), "");
314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::abs((long double)0)), long double>::value), "");
324684ddb6SLionel Sambuc     assert(std::abs(-1.) == 1);
334684ddb6SLionel Sambuc }
344684ddb6SLionel Sambuc 
test_acos()354684ddb6SLionel Sambuc void test_acos()
364684ddb6SLionel Sambuc {
374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((float)0)), float>::value), "");
384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((bool)0)), double>::value), "");
394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((unsigned short)0)), double>::value), "");
404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((int)0)), double>::value), "");
414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((unsigned int)0)), double>::value), "");
424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((long)0)), double>::value), "");
434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((unsigned long)0)), double>::value), "");
444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((long long)0)), double>::value), "");
454684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((unsigned long long)0)), double>::value), "");
464684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((double)0)), double>::value), "");
474684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acos((long double)0)), long double>::value), "");
484684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosf(0)), float>::value), "");
494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosl(0)), long double>::value), "");
504684ddb6SLionel Sambuc     assert(std::acos(1) == 0);
514684ddb6SLionel Sambuc }
524684ddb6SLionel Sambuc 
test_asin()534684ddb6SLionel Sambuc void test_asin()
544684ddb6SLionel Sambuc {
554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((float)0)), float>::value), "");
564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((bool)0)), double>::value), "");
574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((unsigned short)0)), double>::value), "");
584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((int)0)), double>::value), "");
594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((unsigned int)0)), double>::value), "");
604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((long)0)), double>::value), "");
614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((unsigned long)0)), double>::value), "");
624684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((long long)0)), double>::value), "");
634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((unsigned long long)0)), double>::value), "");
644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((double)0)), double>::value), "");
654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asin((long double)0)), long double>::value), "");
664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinf(0)), float>::value), "");
674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinl(0)), long double>::value), "");
684684ddb6SLionel Sambuc     assert(std::asin(0) == 0);
694684ddb6SLionel Sambuc }
704684ddb6SLionel Sambuc 
test_atan()714684ddb6SLionel Sambuc void test_atan()
724684ddb6SLionel Sambuc {
734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((float)0)), float>::value), "");
744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((bool)0)), double>::value), "");
754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((unsigned short)0)), double>::value), "");
764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((int)0)), double>::value), "");
774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((unsigned int)0)), double>::value), "");
784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((long)0)), double>::value), "");
794684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((unsigned long)0)), double>::value), "");
804684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((long long)0)), double>::value), "");
814684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((unsigned long long)0)), double>::value), "");
824684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((double)0)), double>::value), "");
834684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan((long double)0)), long double>::value), "");
844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanf(0)), float>::value), "");
854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanl(0)), long double>::value), "");
864684ddb6SLionel Sambuc     assert(std::atan(0) == 0);
874684ddb6SLionel Sambuc }
884684ddb6SLionel Sambuc 
test_atan2()894684ddb6SLionel Sambuc void test_atan2()
904684ddb6SLionel Sambuc {
914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((float)0, (float)0)), float>::value), "");
924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((bool)0, (float)0)), double>::value), "");
934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((unsigned short)0, (double)0)), double>::value), "");
944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((int)0, (long double)0)), long double>::value), "");
954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((float)0, (unsigned int)0)), double>::value), "");
964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((double)0, (long)0)), double>::value), "");
974684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((long double)0, (unsigned long)0)), long double>::value), "");
984684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((int)0, (long long)0)), double>::value), "");
994684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((int)0, (unsigned long long)0)), double>::value), "");
1004684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((double)0, (double)0)), double>::value), "");
1014684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((long double)0, (long double)0)), long double>::value), "");
1024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((float)0, (double)0)), double>::value), "");
1034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((float)0, (long double)0)), long double>::value), "");
1044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((double)0, (long double)0)), long double>::value), "");
1054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2f(0,0)), float>::value), "");
1064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2l(0,0)), long double>::value), "");
1074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atan2((int)0, (int)0)), double>::value), "");
1084684ddb6SLionel Sambuc     assert(std::atan2(0,1) == 0);
1094684ddb6SLionel Sambuc }
1104684ddb6SLionel Sambuc 
test_ceil()1114684ddb6SLionel Sambuc void test_ceil()
1124684ddb6SLionel Sambuc {
1134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((float)0)), float>::value), "");
1144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((bool)0)), double>::value), "");
1154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((unsigned short)0)), double>::value), "");
1164684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((int)0)), double>::value), "");
1174684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((unsigned int)0)), double>::value), "");
1184684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((long)0)), double>::value), "");
1194684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((unsigned long)0)), double>::value), "");
1204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((long long)0)), double>::value), "");
1214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((unsigned long long)0)), double>::value), "");
1224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((double)0)), double>::value), "");
1234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceil((long double)0)), long double>::value), "");
1244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceilf(0)), float>::value), "");
1254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ceill(0)), long double>::value), "");
1264684ddb6SLionel Sambuc     assert(std::ceil(0) == 0);
1274684ddb6SLionel Sambuc }
1284684ddb6SLionel Sambuc 
test_cos()1294684ddb6SLionel Sambuc void test_cos()
1304684ddb6SLionel Sambuc {
1314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((float)0)), float>::value), "");
1324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((bool)0)), double>::value), "");
1334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((unsigned short)0)), double>::value), "");
1344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((int)0)), double>::value), "");
1354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((unsigned int)0)), double>::value), "");
1364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((long)0)), double>::value), "");
1374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((unsigned long)0)), double>::value), "");
1384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((long long)0)), double>::value), "");
1394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((unsigned long long)0)), double>::value), "");
1404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((double)0)), double>::value), "");
1414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cos((long double)0)), long double>::value), "");
1424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosf(0)), float>::value), "");
1434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosl(0)), long double>::value), "");
1444684ddb6SLionel Sambuc     assert(std::cos(0) == 1);
1454684ddb6SLionel Sambuc }
1464684ddb6SLionel Sambuc 
test_cosh()1474684ddb6SLionel Sambuc void test_cosh()
1484684ddb6SLionel Sambuc {
1494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((float)0)), float>::value), "");
1504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((bool)0)), double>::value), "");
1514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((unsigned short)0)), double>::value), "");
1524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((int)0)), double>::value), "");
1534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((unsigned int)0)), double>::value), "");
1544684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((long)0)), double>::value), "");
1554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((unsigned long)0)), double>::value), "");
1564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((long long)0)), double>::value), "");
1574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((unsigned long long)0)), double>::value), "");
1584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((double)0)), double>::value), "");
1594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cosh((long double)0)), long double>::value), "");
1604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::coshf(0)), float>::value), "");
1614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::coshl(0)), long double>::value), "");
1624684ddb6SLionel Sambuc     assert(std::cosh(0) == 1);
1634684ddb6SLionel Sambuc }
1644684ddb6SLionel Sambuc 
test_exp()1654684ddb6SLionel Sambuc void test_exp()
1664684ddb6SLionel Sambuc {
1674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((float)0)), float>::value), "");
1684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((bool)0)), double>::value), "");
1694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((unsigned short)0)), double>::value), "");
1704684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((int)0)), double>::value), "");
1714684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((unsigned int)0)), double>::value), "");
1724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((long)0)), double>::value), "");
1734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((unsigned long)0)), double>::value), "");
1744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((long long)0)), double>::value), "");
1754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((unsigned long long)0)), double>::value), "");
1764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((double)0)), double>::value), "");
1774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp((long double)0)), long double>::value), "");
1784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expf(0)), float>::value), "");
1794684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expl(0)), long double>::value), "");
1804684ddb6SLionel Sambuc     assert(std::exp(0) == 1);
1814684ddb6SLionel Sambuc }
1824684ddb6SLionel Sambuc 
test_fabs()1834684ddb6SLionel Sambuc void test_fabs()
1844684ddb6SLionel Sambuc {
1854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((float)0)), float>::value), "");
1864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((bool)0)), double>::value), "");
1874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((unsigned short)0)), double>::value), "");
1884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((int)0)), double>::value), "");
1894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((unsigned int)0)), double>::value), "");
1904684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((long)0)), double>::value), "");
1914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((unsigned long)0)), double>::value), "");
1924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((long long)0)), double>::value), "");
1934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((unsigned long long)0)), double>::value), "");
1944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((double)0)), double>::value), "");
1954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fabs((long double)0)), long double>::value), "");
196*0a6a1f1dSLionel Sambuc     static_assert((std::is_same<decltype(std::fabsf(0.0f)), float>::value), "");
197*0a6a1f1dSLionel Sambuc     static_assert((std::is_same<decltype(std::fabsl(0.0L)), long double>::value), "");
1984684ddb6SLionel Sambuc     assert(std::fabs(-1) == 1);
1994684ddb6SLionel Sambuc }
2004684ddb6SLionel Sambuc 
test_floor()2014684ddb6SLionel Sambuc void test_floor()
2024684ddb6SLionel Sambuc {
2034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((float)0)), float>::value), "");
2044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((bool)0)), double>::value), "");
2054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((unsigned short)0)), double>::value), "");
2064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((int)0)), double>::value), "");
2074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((unsigned int)0)), double>::value), "");
2084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((long)0)), double>::value), "");
2094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((unsigned long)0)), double>::value), "");
2104684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((long long)0)), double>::value), "");
2114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((unsigned long long)0)), double>::value), "");
2124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((double)0)), double>::value), "");
2134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floor((long double)0)), long double>::value), "");
2144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floorf(0)), float>::value), "");
2154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::floorl(0)), long double>::value), "");
2164684ddb6SLionel Sambuc     assert(std::floor(1) == 1);
2174684ddb6SLionel Sambuc }
2184684ddb6SLionel Sambuc 
test_fmod()2194684ddb6SLionel Sambuc void test_fmod()
2204684ddb6SLionel Sambuc {
2214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((float)0, (float)0)), float>::value), "");
2224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((bool)0, (float)0)), double>::value), "");
2234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((unsigned short)0, (double)0)), double>::value), "");
2244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((int)0, (long double)0)), long double>::value), "");
2254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((float)0, (unsigned int)0)), double>::value), "");
2264684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((double)0, (long)0)), double>::value), "");
2274684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((long double)0, (unsigned long)0)), long double>::value), "");
2284684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((int)0, (long long)0)), double>::value), "");
2294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((int)0, (unsigned long long)0)), double>::value), "");
2304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((double)0, (double)0)), double>::value), "");
2314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((long double)0, (long double)0)), long double>::value), "");
2324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((float)0, (double)0)), double>::value), "");
2334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((float)0, (long double)0)), long double>::value), "");
2344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((double)0, (long double)0)), long double>::value), "");
2354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmodf(0,0)), float>::value), "");
2364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmodl(0,0)), long double>::value), "");
2374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmod((int)0, (int)0)), double>::value), "");
2384684ddb6SLionel Sambuc     assert(std::fmod(1.5,1) == .5);
2394684ddb6SLionel Sambuc }
2404684ddb6SLionel Sambuc 
test_frexp()2414684ddb6SLionel Sambuc void test_frexp()
2424684ddb6SLionel Sambuc {
2434684ddb6SLionel Sambuc     int ip;
2444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((float)0, &ip)), float>::value), "");
2454684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((bool)0, &ip)), double>::value), "");
2464684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((unsigned short)0, &ip)), double>::value), "");
2474684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((int)0, &ip)), double>::value), "");
2484684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((unsigned int)0, &ip)), double>::value), "");
2494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((long)0, &ip)), double>::value), "");
2504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((unsigned long)0, &ip)), double>::value), "");
2514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((long long)0, &ip)), double>::value), "");
2524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((unsigned long long)0, &ip)), double>::value), "");
2534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((double)0, &ip)), double>::value), "");
2544684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexp((long double)0, &ip)), long double>::value), "");
2554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexpf(0, &ip)), float>::value), "");
2564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::frexpl(0, &ip)), long double>::value), "");
2574684ddb6SLionel Sambuc     assert(std::frexp(0, &ip) == 0);
2584684ddb6SLionel Sambuc }
2594684ddb6SLionel Sambuc 
test_ldexp()2604684ddb6SLionel Sambuc void test_ldexp()
2614684ddb6SLionel Sambuc {
2624684ddb6SLionel Sambuc     int ip = 1;
2634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((float)0, ip)), float>::value), "");
2644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((bool)0, ip)), double>::value), "");
2654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((unsigned short)0, ip)), double>::value), "");
2664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((int)0, ip)), double>::value), "");
2674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((unsigned int)0, ip)), double>::value), "");
2684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((long)0, ip)), double>::value), "");
2694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((unsigned long)0, ip)), double>::value), "");
2704684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((long long)0, ip)), double>::value), "");
2714684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((unsigned long long)0, ip)), double>::value), "");
2724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((double)0, ip)), double>::value), "");
2734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexp((long double)0, ip)), long double>::value), "");
2744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexpf(0, ip)), float>::value), "");
2754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ldexpl(0, ip)), long double>::value), "");
2764684ddb6SLionel Sambuc     assert(std::ldexp(1, ip) == 2);
2774684ddb6SLionel Sambuc }
2784684ddb6SLionel Sambuc 
test_log()2794684ddb6SLionel Sambuc void test_log()
2804684ddb6SLionel Sambuc {
2814684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((float)0)), float>::value), "");
2824684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((bool)0)), double>::value), "");
2834684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((unsigned short)0)), double>::value), "");
2844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((int)0)), double>::value), "");
2854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((unsigned int)0)), double>::value), "");
2864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((long)0)), double>::value), "");
2874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((unsigned long)0)), double>::value), "");
2884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((long long)0)), double>::value), "");
2894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((unsigned long long)0)), double>::value), "");
2904684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((double)0)), double>::value), "");
2914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log((long double)0)), long double>::value), "");
2924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logf(0)), float>::value), "");
2934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logl(0)), long double>::value), "");
2944684ddb6SLionel Sambuc     assert(std::log(1) == 0);
2954684ddb6SLionel Sambuc }
2964684ddb6SLionel Sambuc 
test_log10()2974684ddb6SLionel Sambuc void test_log10()
2984684ddb6SLionel Sambuc {
2994684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((float)0)), float>::value), "");
3004684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((bool)0)), double>::value), "");
3014684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((unsigned short)0)), double>::value), "");
3024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((int)0)), double>::value), "");
3034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((unsigned int)0)), double>::value), "");
3044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((long)0)), double>::value), "");
3054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((unsigned long)0)), double>::value), "");
3064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((long long)0)), double>::value), "");
3074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((unsigned long long)0)), double>::value), "");
3084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((double)0)), double>::value), "");
3094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10((long double)0)), long double>::value), "");
3104684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10f(0)), float>::value), "");
3114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log10l(0)), long double>::value), "");
3124684ddb6SLionel Sambuc     assert(std::log10(1) == 0);
3134684ddb6SLionel Sambuc }
3144684ddb6SLionel Sambuc 
test_modf()3154684ddb6SLionel Sambuc void test_modf()
3164684ddb6SLionel Sambuc {
3174684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::modf((float)0, (float*)0)), float>::value), "");
3184684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::modf((double)0, (double*)0)), double>::value), "");
3194684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::modf((long double)0, (long double*)0)), long double>::value), "");
3204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::modff(0, (float*)0)), float>::value), "");
3214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::modfl(0, (long double*)0)), long double>::value), "");
3224684ddb6SLionel Sambuc     double i;
3234684ddb6SLionel Sambuc     assert(std::modf(1., &i) == 0);
3244684ddb6SLionel Sambuc }
3254684ddb6SLionel Sambuc 
test_pow()3264684ddb6SLionel Sambuc void test_pow()
3274684ddb6SLionel Sambuc {
3284684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((float)0, (float)0)), float>::value), "");
3294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((bool)0, (float)0)), double>::value), "");
3304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((unsigned short)0, (double)0)), double>::value), "");
3314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((int)0, (long double)0)), long double>::value), "");
3324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((float)0, (unsigned int)0)), double>::value), "");
3334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((double)0, (long)0)), double>::value), "");
3344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((long double)0, (unsigned long)0)), long double>::value), "");
3354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((int)0, (long long)0)), double>::value), "");
3364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((int)0, (unsigned long long)0)), double>::value), "");
3374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((double)0, (double)0)), double>::value), "");
3384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((long double)0, (long double)0)), long double>::value), "");
3394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((float)0, (double)0)), double>::value), "");
3404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((float)0, (long double)0)), long double>::value), "");
3414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((double)0, (long double)0)), long double>::value), "");
3424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::powf(0,0)), float>::value), "");
3434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::powl(0,0)), long double>::value), "");
3444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::pow((int)0, (int)0)), double>::value), "");
345*0a6a1f1dSLionel Sambuc //     static_assert((std::is_same<decltype(std::pow(Value<int>(), (int)0)), double>::value), "");
346*0a6a1f1dSLionel Sambuc //     static_assert((std::is_same<decltype(std::pow(Value<long double>(), (float)0)), long double>::value), "");
347*0a6a1f1dSLionel Sambuc //     static_assert((std::is_same<decltype(std::pow((float) 0, Value<float>())), float>::value), "");
3484684ddb6SLionel Sambuc     assert(std::pow(1,1) == 1);
349*0a6a1f1dSLionel Sambuc //     assert(std::pow(Value<int,1>(), Value<float,1>())  == 1);
350*0a6a1f1dSLionel Sambuc //     assert(std::pow(1.0f, Value<double,1>()) == 1);
351*0a6a1f1dSLionel Sambuc //     assert(std::pow(1.0, Value<int,1>()) == 1);
352*0a6a1f1dSLionel Sambuc //     assert(std::pow(Value<long double,1>(), 1LL) == 1);
3534684ddb6SLionel Sambuc }
3544684ddb6SLionel Sambuc 
test_sin()3554684ddb6SLionel Sambuc void test_sin()
3564684ddb6SLionel Sambuc {
3574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((float)0)), float>::value), "");
3584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((bool)0)), double>::value), "");
3594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((unsigned short)0)), double>::value), "");
3604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((int)0)), double>::value), "");
3614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((unsigned int)0)), double>::value), "");
3624684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((long)0)), double>::value), "");
3634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((unsigned long)0)), double>::value), "");
3644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((long long)0)), double>::value), "");
3654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((unsigned long long)0)), double>::value), "");
3664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((double)0)), double>::value), "");
3674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sin((long double)0)), long double>::value), "");
3684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinf(0)), float>::value), "");
3694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinl(0)), long double>::value), "");
3704684ddb6SLionel Sambuc     assert(std::sin(0) == 0);
3714684ddb6SLionel Sambuc }
3724684ddb6SLionel Sambuc 
test_sinh()3734684ddb6SLionel Sambuc void test_sinh()
3744684ddb6SLionel Sambuc {
3754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((float)0)), float>::value), "");
3764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((bool)0)), double>::value), "");
3774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((unsigned short)0)), double>::value), "");
3784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((int)0)), double>::value), "");
3794684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((unsigned int)0)), double>::value), "");
3804684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((long)0)), double>::value), "");
3814684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((unsigned long)0)), double>::value), "");
3824684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((long long)0)), double>::value), "");
3834684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((unsigned long long)0)), double>::value), "");
3844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((double)0)), double>::value), "");
3854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinh((long double)0)), long double>::value), "");
3864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinhf(0)), float>::value), "");
3874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sinhl(0)), long double>::value), "");
3884684ddb6SLionel Sambuc     assert(std::sinh(0) == 0);
3894684ddb6SLionel Sambuc }
3904684ddb6SLionel Sambuc 
test_sqrt()3914684ddb6SLionel Sambuc void test_sqrt()
3924684ddb6SLionel Sambuc {
3934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((float)0)), float>::value), "");
3944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((bool)0)), double>::value), "");
3954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((unsigned short)0)), double>::value), "");
3964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((int)0)), double>::value), "");
3974684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((unsigned int)0)), double>::value), "");
3984684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((long)0)), double>::value), "");
3994684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((unsigned long)0)), double>::value), "");
4004684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((long long)0)), double>::value), "");
4014684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((unsigned long long)0)), double>::value), "");
4024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((double)0)), double>::value), "");
4034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrt((long double)0)), long double>::value), "");
4044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrtf(0)), float>::value), "");
4054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::sqrtl(0)), long double>::value), "");
4064684ddb6SLionel Sambuc     assert(std::sqrt(4) == 2);
4074684ddb6SLionel Sambuc }
4084684ddb6SLionel Sambuc 
test_tan()4094684ddb6SLionel Sambuc void test_tan()
4104684ddb6SLionel Sambuc {
4114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((float)0)), float>::value), "");
4124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((bool)0)), double>::value), "");
4134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((unsigned short)0)), double>::value), "");
4144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((int)0)), double>::value), "");
4154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((unsigned int)0)), double>::value), "");
4164684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((long)0)), double>::value), "");
4174684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((unsigned long)0)), double>::value), "");
4184684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((long long)0)), double>::value), "");
4194684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((unsigned long long)0)), double>::value), "");
4204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((double)0)), double>::value), "");
4214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tan((long double)0)), long double>::value), "");
4224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanf(0)), float>::value), "");
4234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanl(0)), long double>::value), "");
4244684ddb6SLionel Sambuc     assert(std::tan(0) == 0);
4254684ddb6SLionel Sambuc }
4264684ddb6SLionel Sambuc 
test_tanh()4274684ddb6SLionel Sambuc void test_tanh()
4284684ddb6SLionel Sambuc {
4294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((float)0)), float>::value), "");
4304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((bool)0)), double>::value), "");
4314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((unsigned short)0)), double>::value), "");
4324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((int)0)), double>::value), "");
4334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((unsigned int)0)), double>::value), "");
4344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((long)0)), double>::value), "");
4354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((unsigned long)0)), double>::value), "");
4364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((long long)0)), double>::value), "");
4374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((unsigned long long)0)), double>::value), "");
4384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((double)0)), double>::value), "");
4394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanh((long double)0)), long double>::value), "");
4404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanhf(0)), float>::value), "");
4414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tanhl(0)), long double>::value), "");
4424684ddb6SLionel Sambuc     assert(std::tanh(0) == 0);
4434684ddb6SLionel Sambuc }
4444684ddb6SLionel Sambuc 
test_signbit()4454684ddb6SLionel Sambuc void test_signbit()
4464684ddb6SLionel Sambuc {
4474684ddb6SLionel Sambuc #ifdef signbit
4484684ddb6SLionel Sambuc #error signbit defined
4494684ddb6SLionel Sambuc #endif
4504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::signbit((float)0)), bool>::value), "");
4514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::signbit((double)0)), bool>::value), "");
4524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::signbit(0)), bool>::value), "");
4534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::signbit((long double)0)), bool>::value), "");
4544684ddb6SLionel Sambuc     assert(std::signbit(-1.0) == true);
4554684ddb6SLionel Sambuc }
4564684ddb6SLionel Sambuc 
test_fpclassify()4574684ddb6SLionel Sambuc void test_fpclassify()
4584684ddb6SLionel Sambuc {
4594684ddb6SLionel Sambuc #ifdef fpclassify
4604684ddb6SLionel Sambuc #error fpclassify defined
4614684ddb6SLionel Sambuc #endif
4624684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fpclassify((float)0)), int>::value), "");
4634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fpclassify((double)0)), int>::value), "");
4644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fpclassify(0)), int>::value), "");
4654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fpclassify((long double)0)), int>::value), "");
4664684ddb6SLionel Sambuc     assert(std::fpclassify(-1.0) == FP_NORMAL);
4674684ddb6SLionel Sambuc }
4684684ddb6SLionel Sambuc 
test_isfinite()4694684ddb6SLionel Sambuc void test_isfinite()
4704684ddb6SLionel Sambuc {
4714684ddb6SLionel Sambuc #ifdef isfinite
4724684ddb6SLionel Sambuc #error isfinite defined
4734684ddb6SLionel Sambuc #endif
4744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isfinite((float)0)), bool>::value), "");
4754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isfinite((double)0)), bool>::value), "");
4764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isfinite(0)), bool>::value), "");
4774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isfinite((long double)0)), bool>::value), "");
4784684ddb6SLionel Sambuc     assert(std::isfinite(-1.0) == true);
4794684ddb6SLionel Sambuc }
4804684ddb6SLionel Sambuc 
test_isnormal()4814684ddb6SLionel Sambuc void test_isnormal()
4824684ddb6SLionel Sambuc {
4834684ddb6SLionel Sambuc #ifdef isnormal
4844684ddb6SLionel Sambuc #error isnormal defined
4854684ddb6SLionel Sambuc #endif
4864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isnormal((float)0)), bool>::value), "");
4874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isnormal((double)0)), bool>::value), "");
4884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isnormal(0)), bool>::value), "");
4894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isnormal((long double)0)), bool>::value), "");
4904684ddb6SLionel Sambuc     assert(std::isnormal(-1.0) == true);
4914684ddb6SLionel Sambuc }
4924684ddb6SLionel Sambuc 
test_isgreater()4934684ddb6SLionel Sambuc void test_isgreater()
4944684ddb6SLionel Sambuc {
4954684ddb6SLionel Sambuc #ifdef isgreater
4964684ddb6SLionel Sambuc #error isgreater defined
4974684ddb6SLionel Sambuc #endif
4984684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((float)0, (float)0)), bool>::value), "");
4994684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((float)0, (double)0)), bool>::value), "");
5004684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((float)0, (long double)0)), bool>::value), "");
5014684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((double)0, (float)0)), bool>::value), "");
5024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((double)0, (double)0)), bool>::value), "");
5034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater(0, (double)0)), bool>::value), "");
5044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((double)0, (long double)0)), bool>::value), "");
5054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((long double)0, (float)0)), bool>::value), "");
5064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((long double)0, (double)0)), bool>::value), "");
5074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreater((long double)0, (long double)0)), bool>::value), "");
5084684ddb6SLionel Sambuc     assert(std::isgreater(-1.0, 0.F) == false);
5094684ddb6SLionel Sambuc }
5104684ddb6SLionel Sambuc 
test_isgreaterequal()5114684ddb6SLionel Sambuc void test_isgreaterequal()
5124684ddb6SLionel Sambuc {
5134684ddb6SLionel Sambuc #ifdef isgreaterequal
5144684ddb6SLionel Sambuc #error isgreaterequal defined
5154684ddb6SLionel Sambuc #endif
5164684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((float)0, (float)0)), bool>::value), "");
5174684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((float)0, (double)0)), bool>::value), "");
5184684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((float)0, (long double)0)), bool>::value), "");
5194684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((double)0, (float)0)), bool>::value), "");
5204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((double)0, (double)0)), bool>::value), "");
5214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal(0, (double)0)), bool>::value), "");
5224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((double)0, (long double)0)), bool>::value), "");
5234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((long double)0, (float)0)), bool>::value), "");
5244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((long double)0, (double)0)), bool>::value), "");
5254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isgreaterequal((long double)0, (long double)0)), bool>::value), "");
5264684ddb6SLionel Sambuc     assert(std::isgreaterequal(-1.0, 0.F) == false);
5274684ddb6SLionel Sambuc }
5284684ddb6SLionel Sambuc 
test_isless()5294684ddb6SLionel Sambuc void test_isless()
5304684ddb6SLionel Sambuc {
5314684ddb6SLionel Sambuc #ifdef isless
5324684ddb6SLionel Sambuc #error isless defined
5334684ddb6SLionel Sambuc #endif
5344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((float)0, (float)0)), bool>::value), "");
5354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((float)0, (double)0)), bool>::value), "");
5364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((float)0, (long double)0)), bool>::value), "");
5374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((double)0, (float)0)), bool>::value), "");
5384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((double)0, (double)0)), bool>::value), "");
5394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless(0, (double)0)), bool>::value), "");
5404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((double)0, (long double)0)), bool>::value), "");
5414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((long double)0, (float)0)), bool>::value), "");
5424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((long double)0, (double)0)), bool>::value), "");
5434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isless((long double)0, (long double)0)), bool>::value), "");
5444684ddb6SLionel Sambuc     assert(std::isless(-1.0, 0.F) == true);
5454684ddb6SLionel Sambuc }
5464684ddb6SLionel Sambuc 
test_islessequal()5474684ddb6SLionel Sambuc void test_islessequal()
5484684ddb6SLionel Sambuc {
5494684ddb6SLionel Sambuc #ifdef islessequal
5504684ddb6SLionel Sambuc #error islessequal defined
5514684ddb6SLionel Sambuc #endif
5524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((float)0, (float)0)), bool>::value), "");
5534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((float)0, (double)0)), bool>::value), "");
5544684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((float)0, (long double)0)), bool>::value), "");
5554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((double)0, (float)0)), bool>::value), "");
5564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((double)0, (double)0)), bool>::value), "");
5574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal(0, (double)0)), bool>::value), "");
5584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((double)0, (long double)0)), bool>::value), "");
5594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((long double)0, (float)0)), bool>::value), "");
5604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((long double)0, (double)0)), bool>::value), "");
5614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessequal((long double)0, (long double)0)), bool>::value), "");
5624684ddb6SLionel Sambuc     assert(std::islessequal(-1.0, 0.F) == true);
5634684ddb6SLionel Sambuc }
5644684ddb6SLionel Sambuc 
test_islessgreater()5654684ddb6SLionel Sambuc void test_islessgreater()
5664684ddb6SLionel Sambuc {
5674684ddb6SLionel Sambuc #ifdef islessgreater
5684684ddb6SLionel Sambuc #error islessgreater defined
5694684ddb6SLionel Sambuc #endif
5704684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((float)0, (float)0)), bool>::value), "");
5714684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((float)0, (double)0)), bool>::value), "");
5724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((float)0, (long double)0)), bool>::value), "");
5734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((double)0, (float)0)), bool>::value), "");
5744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((double)0, (double)0)), bool>::value), "");
5754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater(0, (double)0)), bool>::value), "");
5764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((double)0, (long double)0)), bool>::value), "");
5774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((long double)0, (float)0)), bool>::value), "");
5784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((long double)0, (double)0)), bool>::value), "");
5794684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::islessgreater((long double)0, (long double)0)), bool>::value), "");
5804684ddb6SLionel Sambuc     assert(std::islessgreater(-1.0, 0.F) == true);
5814684ddb6SLionel Sambuc }
5824684ddb6SLionel Sambuc 
test_isunordered()5834684ddb6SLionel Sambuc void test_isunordered()
5844684ddb6SLionel Sambuc {
5854684ddb6SLionel Sambuc #ifdef isunordered
5864684ddb6SLionel Sambuc #error isunordered defined
5874684ddb6SLionel Sambuc #endif
5884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((float)0, (float)0)), bool>::value), "");
5894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((float)0, (double)0)), bool>::value), "");
5904684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((float)0, (long double)0)), bool>::value), "");
5914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((double)0, (float)0)), bool>::value), "");
5924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((double)0, (double)0)), bool>::value), "");
5934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered(0, (double)0)), bool>::value), "");
5944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((double)0, (long double)0)), bool>::value), "");
5954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((long double)0, (float)0)), bool>::value), "");
5964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((long double)0, (double)0)), bool>::value), "");
5974684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::isunordered((long double)0, (long double)0)), bool>::value), "");
5984684ddb6SLionel Sambuc     assert(std::isunordered(-1.0, 0.F) == false);
5994684ddb6SLionel Sambuc }
6004684ddb6SLionel Sambuc 
test_acosh()6014684ddb6SLionel Sambuc void test_acosh()
6024684ddb6SLionel Sambuc {
6034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((float)0)), float>::value), "");
6044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((bool)0)), double>::value), "");
6054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((unsigned short)0)), double>::value), "");
6064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((int)0)), double>::value), "");
6074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((unsigned int)0)), double>::value), "");
6084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((long)0)), double>::value), "");
6094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((unsigned long)0)), double>::value), "");
6104684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((long long)0)), double>::value), "");
6114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((unsigned long long)0)), double>::value), "");
6124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((double)0)), double>::value), "");
6134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acosh((long double)0)), long double>::value), "");
6144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acoshf(0)), float>::value), "");
6154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::acoshl(0)), long double>::value), "");
6164684ddb6SLionel Sambuc     assert(std::acosh(1) == 0);
6174684ddb6SLionel Sambuc }
6184684ddb6SLionel Sambuc 
test_asinh()6194684ddb6SLionel Sambuc void test_asinh()
6204684ddb6SLionel Sambuc {
6214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((float)0)), float>::value), "");
6224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((bool)0)), double>::value), "");
6234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((unsigned short)0)), double>::value), "");
6244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((int)0)), double>::value), "");
6254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((unsigned int)0)), double>::value), "");
6264684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((long)0)), double>::value), "");
6274684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((unsigned long)0)), double>::value), "");
6284684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((long long)0)), double>::value), "");
6294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((unsigned long long)0)), double>::value), "");
6304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((double)0)), double>::value), "");
6314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinh((long double)0)), long double>::value), "");
6324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinhf(0)), float>::value), "");
6334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::asinhl(0)), long double>::value), "");
6344684ddb6SLionel Sambuc     assert(std::asinh(0) == 0);
6354684ddb6SLionel Sambuc }
6364684ddb6SLionel Sambuc 
test_atanh()6374684ddb6SLionel Sambuc void test_atanh()
6384684ddb6SLionel Sambuc {
6394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((float)0)), float>::value), "");
6404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((bool)0)), double>::value), "");
6414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((unsigned short)0)), double>::value), "");
6424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((int)0)), double>::value), "");
6434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((unsigned int)0)), double>::value), "");
6444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((long)0)), double>::value), "");
6454684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((unsigned long)0)), double>::value), "");
6464684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((long long)0)), double>::value), "");
6474684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((unsigned long long)0)), double>::value), "");
6484684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((double)0)), double>::value), "");
6494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanh((long double)0)), long double>::value), "");
6504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanhf(0)), float>::value), "");
6514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::atanhl(0)), long double>::value), "");
6524684ddb6SLionel Sambuc     assert(std::atanh(0) == 0);
6534684ddb6SLionel Sambuc }
6544684ddb6SLionel Sambuc 
test_cbrt()6554684ddb6SLionel Sambuc void test_cbrt()
6564684ddb6SLionel Sambuc {
6574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((float)0)), float>::value), "");
6584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((bool)0)), double>::value), "");
6594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((unsigned short)0)), double>::value), "");
6604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((int)0)), double>::value), "");
6614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((unsigned int)0)), double>::value), "");
6624684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((long)0)), double>::value), "");
6634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((unsigned long)0)), double>::value), "");
6644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((long long)0)), double>::value), "");
6654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((unsigned long long)0)), double>::value), "");
6664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((double)0)), double>::value), "");
6674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrt((long double)0)), long double>::value), "");
6684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrtf(0)), float>::value), "");
6694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::cbrtl(0)), long double>::value), "");
6704684ddb6SLionel Sambuc     assert(std::cbrt(1) == 1);
6714684ddb6SLionel Sambuc }
6724684ddb6SLionel Sambuc 
test_copysign()6734684ddb6SLionel Sambuc void test_copysign()
6744684ddb6SLionel Sambuc {
6754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((float)0, (float)0)), float>::value), "");
6764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((bool)0, (float)0)), double>::value), "");
6774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((unsigned short)0, (double)0)), double>::value), "");
6784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((int)0, (long double)0)), long double>::value), "");
6794684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((float)0, (unsigned int)0)), double>::value), "");
6804684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((double)0, (long)0)), double>::value), "");
6814684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((long double)0, (unsigned long)0)), long double>::value), "");
6824684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((int)0, (long long)0)), double>::value), "");
6834684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((int)0, (unsigned long long)0)), double>::value), "");
6844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((double)0, (double)0)), double>::value), "");
6854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((long double)0, (long double)0)), long double>::value), "");
6864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((float)0, (double)0)), double>::value), "");
6874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((float)0, (long double)0)), long double>::value), "");
6884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((double)0, (long double)0)), long double>::value), "");
6894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysignf(0,0)), float>::value), "");
6904684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysignl(0,0)), long double>::value), "");
6914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::copysign((int)0, (int)0)), double>::value), "");
6924684ddb6SLionel Sambuc     assert(std::copysign(1,1) == 1);
6934684ddb6SLionel Sambuc }
6944684ddb6SLionel Sambuc 
test_erf()6954684ddb6SLionel Sambuc void test_erf()
6964684ddb6SLionel Sambuc {
6974684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((float)0)), float>::value), "");
6984684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((bool)0)), double>::value), "");
6994684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((unsigned short)0)), double>::value), "");
7004684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((int)0)), double>::value), "");
7014684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((unsigned int)0)), double>::value), "");
7024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((long)0)), double>::value), "");
7034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((unsigned long)0)), double>::value), "");
7044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((long long)0)), double>::value), "");
7054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((unsigned long long)0)), double>::value), "");
7064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((double)0)), double>::value), "");
7074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erf((long double)0)), long double>::value), "");
7084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erff(0)), float>::value), "");
7094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfl(0)), long double>::value), "");
7104684ddb6SLionel Sambuc     assert(std::erf(0) == 0);
7114684ddb6SLionel Sambuc }
7124684ddb6SLionel Sambuc 
test_erfc()7134684ddb6SLionel Sambuc void test_erfc()
7144684ddb6SLionel Sambuc {
7154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((float)0)), float>::value), "");
7164684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((bool)0)), double>::value), "");
7174684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((unsigned short)0)), double>::value), "");
7184684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((int)0)), double>::value), "");
7194684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((unsigned int)0)), double>::value), "");
7204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((long)0)), double>::value), "");
7214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((unsigned long)0)), double>::value), "");
7224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((long long)0)), double>::value), "");
7234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((unsigned long long)0)), double>::value), "");
7244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((double)0)), double>::value), "");
7254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfc((long double)0)), long double>::value), "");
7264684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfcf(0)), float>::value), "");
7274684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::erfcl(0)), long double>::value), "");
7284684ddb6SLionel Sambuc     assert(std::erfc(0) == 1);
7294684ddb6SLionel Sambuc }
7304684ddb6SLionel Sambuc 
test_exp2()7314684ddb6SLionel Sambuc void test_exp2()
7324684ddb6SLionel Sambuc {
7334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((float)0)), float>::value), "");
7344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((bool)0)), double>::value), "");
7354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((unsigned short)0)), double>::value), "");
7364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((int)0)), double>::value), "");
7374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((unsigned int)0)), double>::value), "");
7384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((long)0)), double>::value), "");
7394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((unsigned long)0)), double>::value), "");
7404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((long long)0)), double>::value), "");
7414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((unsigned long long)0)), double>::value), "");
7424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((double)0)), double>::value), "");
7434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2((long double)0)), long double>::value), "");
7444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2f(0)), float>::value), "");
7454684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::exp2l(0)), long double>::value), "");
7464684ddb6SLionel Sambuc     assert(std::exp2(1) == 2);
7474684ddb6SLionel Sambuc }
7484684ddb6SLionel Sambuc 
test_expm1()7494684ddb6SLionel Sambuc void test_expm1()
7504684ddb6SLionel Sambuc {
7514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((float)0)), float>::value), "");
7524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((bool)0)), double>::value), "");
7534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((unsigned short)0)), double>::value), "");
7544684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((int)0)), double>::value), "");
7554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((unsigned int)0)), double>::value), "");
7564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((long)0)), double>::value), "");
7574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((unsigned long)0)), double>::value), "");
7584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((long long)0)), double>::value), "");
7594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((unsigned long long)0)), double>::value), "");
7604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((double)0)), double>::value), "");
7614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1((long double)0)), long double>::value), "");
7624684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1f(0)), float>::value), "");
7634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::expm1l(0)), long double>::value), "");
7644684ddb6SLionel Sambuc     assert(std::expm1(0) == 0);
7654684ddb6SLionel Sambuc }
7664684ddb6SLionel Sambuc 
test_fdim()7674684ddb6SLionel Sambuc void test_fdim()
7684684ddb6SLionel Sambuc {
7694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((float)0, (float)0)), float>::value), "");
7704684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((bool)0, (float)0)), double>::value), "");
7714684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((unsigned short)0, (double)0)), double>::value), "");
7724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((int)0, (long double)0)), long double>::value), "");
7734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((float)0, (unsigned int)0)), double>::value), "");
7744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((double)0, (long)0)), double>::value), "");
7754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((long double)0, (unsigned long)0)), long double>::value), "");
7764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((int)0, (long long)0)), double>::value), "");
7774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((int)0, (unsigned long long)0)), double>::value), "");
7784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((double)0, (double)0)), double>::value), "");
7794684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((long double)0, (long double)0)), long double>::value), "");
7804684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((float)0, (double)0)), double>::value), "");
7814684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((float)0, (long double)0)), long double>::value), "");
7824684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((double)0, (long double)0)), long double>::value), "");
7834684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdimf(0,0)), float>::value), "");
7844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdiml(0,0)), long double>::value), "");
7854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fdim((int)0, (int)0)), double>::value), "");
7864684ddb6SLionel Sambuc     assert(std::fdim(1,0) == 1);
7874684ddb6SLionel Sambuc }
7884684ddb6SLionel Sambuc 
test_fma()7894684ddb6SLionel Sambuc void test_fma()
7904684ddb6SLionel Sambuc {
7914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((bool)0, (float)0, (float)0)), double>::value), "");
7924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((char)0, (float)0, (float)0)), double>::value), "");
7934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((unsigned)0, (float)0, (float)0)), double>::value), "");
7944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((float)0, (int)0, (float)0)), double>::value), "");
7954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((float)0, (long)0, (float)0)), double>::value), "");
7964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (unsigned long long)0)), double>::value), "");
7974684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (double)0)), double>::value), "");
7984684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (long double)0)), long double>::value), "");
7994684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (float)0)), float>::value), "");
8004684ddb6SLionel Sambuc 
8014684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((bool)0, (double)0, (double)0)), double>::value), "");
8024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((char)0, (double)0, (double)0)), double>::value), "");
8034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((unsigned)0, (double)0, (double)0)), double>::value), "");
8044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((double)0, (int)0, (double)0)), double>::value), "");
8054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((double)0, (long)0, (double)0)), double>::value), "");
8064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((double)0, (double)0, (unsigned long long)0)), double>::value), "");
8074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((double)0, (double)0, (float)0)), double>::value), "");
8084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((double)0, (double)0, (long double)0)), long double>::value), "");
8094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((double)0, (double)0,  (double)0)), double>::value), "");
8104684ddb6SLionel Sambuc 
8114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((bool)0, (long double)0, (long double)0)), long double>::value), "");
8124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((char)0, (long double)0, (long double)0)), long double>::value), "");
8134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((unsigned)0, (long double)0, (long double)0)), long double>::value), "");
8144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((long double)0, (int)0, (long double)0)), long double>::value), "");
8154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((long double)0, (long)0, (long double)0)), long double>::value), "");
8164684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((long double)0, (long double)0, (unsigned long long)0)), long double>::value), "");
8174684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((long double)0, (long double)0, (float)0)), long double>::value), "");
8184684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((double)0, (long double)0, (long double)0)), long double>::value), "");
8194684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fma((long double)0, (long double)0, (long double)0)), long double>::value), "");
8204684ddb6SLionel Sambuc 
8214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmaf(0,0,0)), float>::value), "");
8224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmal(0,0,0)), long double>::value), "");
8234684ddb6SLionel Sambuc     assert(std::fma(1,1,1) == 2);
8244684ddb6SLionel Sambuc }
8254684ddb6SLionel Sambuc 
test_fmax()8264684ddb6SLionel Sambuc void test_fmax()
8274684ddb6SLionel Sambuc {
8284684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((float)0, (float)0)), float>::value), "");
8294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((bool)0, (float)0)), double>::value), "");
8304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((unsigned short)0, (double)0)), double>::value), "");
8314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((int)0, (long double)0)), long double>::value), "");
8324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((float)0, (unsigned int)0)), double>::value), "");
8334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((double)0, (long)0)), double>::value), "");
8344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((long double)0, (unsigned long)0)), long double>::value), "");
8354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((int)0, (long long)0)), double>::value), "");
8364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((int)0, (unsigned long long)0)), double>::value), "");
8374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((double)0, (double)0)), double>::value), "");
8384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((long double)0, (long double)0)), long double>::value), "");
8394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((float)0, (double)0)), double>::value), "");
8404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((float)0, (long double)0)), long double>::value), "");
8414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((double)0, (long double)0)), long double>::value), "");
8424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmaxf(0,0)), float>::value), "");
8434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmaxl(0,0)), long double>::value), "");
8444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmax((int)0, (int)0)), double>::value), "");
8454684ddb6SLionel Sambuc     assert(std::fmax(1,0) == 1);
8464684ddb6SLionel Sambuc }
8474684ddb6SLionel Sambuc 
test_fmin()8484684ddb6SLionel Sambuc void test_fmin()
8494684ddb6SLionel Sambuc {
8504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((float)0, (float)0)), float>::value), "");
8514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((bool)0, (float)0)), double>::value), "");
8524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((unsigned short)0, (double)0)), double>::value), "");
8534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((int)0, (long double)0)), long double>::value), "");
8544684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((float)0, (unsigned int)0)), double>::value), "");
8554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((double)0, (long)0)), double>::value), "");
8564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((long double)0, (unsigned long)0)), long double>::value), "");
8574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((int)0, (long long)0)), double>::value), "");
8584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((int)0, (unsigned long long)0)), double>::value), "");
8594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((double)0, (double)0)), double>::value), "");
8604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((long double)0, (long double)0)), long double>::value), "");
8614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((float)0, (double)0)), double>::value), "");
8624684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((float)0, (long double)0)), long double>::value), "");
8634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((double)0, (long double)0)), long double>::value), "");
8644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fminf(0,0)), float>::value), "");
8654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fminl(0,0)), long double>::value), "");
8664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::fmin((int)0, (int)0)), double>::value), "");
8674684ddb6SLionel Sambuc     assert(std::fmin(1,0) == 0);
8684684ddb6SLionel Sambuc }
8694684ddb6SLionel Sambuc 
test_hypot()8704684ddb6SLionel Sambuc void test_hypot()
8714684ddb6SLionel Sambuc {
8724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((float)0, (float)0)), float>::value), "");
8734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((bool)0, (float)0)), double>::value), "");
8744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((unsigned short)0, (double)0)), double>::value), "");
8754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((int)0, (long double)0)), long double>::value), "");
8764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((float)0, (unsigned int)0)), double>::value), "");
8774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((double)0, (long)0)), double>::value), "");
8784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((long double)0, (unsigned long)0)), long double>::value), "");
8794684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((int)0, (long long)0)), double>::value), "");
8804684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((int)0, (unsigned long long)0)), double>::value), "");
8814684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((double)0, (double)0)), double>::value), "");
8824684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((long double)0, (long double)0)), long double>::value), "");
8834684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((float)0, (double)0)), double>::value), "");
8844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((float)0, (long double)0)), long double>::value), "");
8854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((double)0, (long double)0)), long double>::value), "");
8864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypotf(0,0)), float>::value), "");
8874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypotl(0,0)), long double>::value), "");
8884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::hypot((int)0, (int)0)), double>::value), "");
8894684ddb6SLionel Sambuc     assert(std::hypot(3,4) == 5);
8904684ddb6SLionel Sambuc }
8914684ddb6SLionel Sambuc 
test_ilogb()8924684ddb6SLionel Sambuc void test_ilogb()
8934684ddb6SLionel Sambuc {
8944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((float)0)), int>::value), "");
8954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((bool)0)), int>::value), "");
8964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((unsigned short)0)), int>::value), "");
8974684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((int)0)), int>::value), "");
8984684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((unsigned int)0)), int>::value), "");
8994684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((long)0)), int>::value), "");
9004684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((unsigned long)0)), int>::value), "");
9014684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((long long)0)), int>::value), "");
9024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((unsigned long long)0)), int>::value), "");
9034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((double)0)), int>::value), "");
9044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogb((long double)0)), int>::value), "");
9054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogbf(0)), int>::value), "");
9064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::ilogbl(0)), int>::value), "");
9074684ddb6SLionel Sambuc     assert(std::ilogb(1) == 0);
9084684ddb6SLionel Sambuc }
9094684ddb6SLionel Sambuc 
test_lgamma()9104684ddb6SLionel Sambuc void test_lgamma()
9114684ddb6SLionel Sambuc {
9124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((float)0)), float>::value), "");
9134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((bool)0)), double>::value), "");
9144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((unsigned short)0)), double>::value), "");
9154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((int)0)), double>::value), "");
9164684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((unsigned int)0)), double>::value), "");
9174684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((long)0)), double>::value), "");
9184684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((unsigned long)0)), double>::value), "");
9194684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((long long)0)), double>::value), "");
9204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((unsigned long long)0)), double>::value), "");
9214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((double)0)), double>::value), "");
9224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgamma((long double)0)), long double>::value), "");
9234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgammaf(0)), float>::value), "");
9244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lgammal(0)), long double>::value), "");
9254684ddb6SLionel Sambuc     assert(std::lgamma(1) == 0);
9264684ddb6SLionel Sambuc }
9274684ddb6SLionel Sambuc 
test_llrint()9284684ddb6SLionel Sambuc void test_llrint()
9294684ddb6SLionel Sambuc {
9304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((float)0)), long long>::value), "");
9314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((bool)0)), long long>::value), "");
9324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((unsigned short)0)), long long>::value), "");
9334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((int)0)), long long>::value), "");
9344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((unsigned int)0)), long long>::value), "");
9354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((long)0)), long long>::value), "");
9364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((unsigned long)0)), long long>::value), "");
9374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((long long)0)), long long>::value), "");
9384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((unsigned long long)0)), long long>::value), "");
9394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((double)0)), long long>::value), "");
9404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrint((long double)0)), long long>::value), "");
9414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrintf(0)), long long>::value), "");
9424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llrintl(0)), long long>::value), "");
9434684ddb6SLionel Sambuc     assert(std::llrint(1) == 1LL);
9444684ddb6SLionel Sambuc }
9454684ddb6SLionel Sambuc 
test_llround()9464684ddb6SLionel Sambuc void test_llround()
9474684ddb6SLionel Sambuc {
9484684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((float)0)), long long>::value), "");
9494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((bool)0)), long long>::value), "");
9504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((unsigned short)0)), long long>::value), "");
9514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((int)0)), long long>::value), "");
9524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((unsigned int)0)), long long>::value), "");
9534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((long)0)), long long>::value), "");
9544684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((unsigned long)0)), long long>::value), "");
9554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((long long)0)), long long>::value), "");
9564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((unsigned long long)0)), long long>::value), "");
9574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((double)0)), long long>::value), "");
9584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llround((long double)0)), long long>::value), "");
9594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llroundf(0)), long long>::value), "");
9604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::llroundl(0)), long long>::value), "");
9614684ddb6SLionel Sambuc     assert(std::llround(1) == 1LL);
9624684ddb6SLionel Sambuc }
9634684ddb6SLionel Sambuc 
test_log1p()9644684ddb6SLionel Sambuc void test_log1p()
9654684ddb6SLionel Sambuc {
9664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((float)0)), float>::value), "");
9674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((bool)0)), double>::value), "");
9684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((unsigned short)0)), double>::value), "");
9694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((int)0)), double>::value), "");
9704684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((unsigned int)0)), double>::value), "");
9714684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((long)0)), double>::value), "");
9724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((unsigned long)0)), double>::value), "");
9734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((long long)0)), double>::value), "");
9744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((unsigned long long)0)), double>::value), "");
9754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((double)0)), double>::value), "");
9764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1p((long double)0)), long double>::value), "");
9774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1pf(0)), float>::value), "");
9784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log1pl(0)), long double>::value), "");
9794684ddb6SLionel Sambuc     assert(std::log1p(0) == 0);
9804684ddb6SLionel Sambuc }
9814684ddb6SLionel Sambuc 
test_log2()9824684ddb6SLionel Sambuc void test_log2()
9834684ddb6SLionel Sambuc {
9844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((float)0)), float>::value), "");
9854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((bool)0)), double>::value), "");
9864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((unsigned short)0)), double>::value), "");
9874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((int)0)), double>::value), "");
9884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((unsigned int)0)), double>::value), "");
9894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((long)0)), double>::value), "");
9904684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((unsigned long)0)), double>::value), "");
9914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((long long)0)), double>::value), "");
9924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((unsigned long long)0)), double>::value), "");
9934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((double)0)), double>::value), "");
9944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2((long double)0)), long double>::value), "");
9954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2f(0)), float>::value), "");
9964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::log2l(0)), long double>::value), "");
9974684ddb6SLionel Sambuc     assert(std::log2(1) == 0);
9984684ddb6SLionel Sambuc }
9994684ddb6SLionel Sambuc 
test_logb()10004684ddb6SLionel Sambuc void test_logb()
10014684ddb6SLionel Sambuc {
10024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((float)0)), float>::value), "");
10034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((bool)0)), double>::value), "");
10044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((unsigned short)0)), double>::value), "");
10054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((int)0)), double>::value), "");
10064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((unsigned int)0)), double>::value), "");
10074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((long)0)), double>::value), "");
10084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((unsigned long)0)), double>::value), "");
10094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((long long)0)), double>::value), "");
10104684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((unsigned long long)0)), double>::value), "");
10114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((double)0)), double>::value), "");
10124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logb((long double)0)), long double>::value), "");
10134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logbf(0)), float>::value), "");
10144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::logbl(0)), long double>::value), "");
10154684ddb6SLionel Sambuc     assert(std::logb(1) == 0);
10164684ddb6SLionel Sambuc }
10174684ddb6SLionel Sambuc 
test_lrint()10184684ddb6SLionel Sambuc void test_lrint()
10194684ddb6SLionel Sambuc {
10204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((float)0)), long>::value), "");
10214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((bool)0)), long>::value), "");
10224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((unsigned short)0)), long>::value), "");
10234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((int)0)), long>::value), "");
10244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((unsigned int)0)), long>::value), "");
10254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((long)0)), long>::value), "");
10264684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((unsigned long)0)), long>::value), "");
10274684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((long long)0)), long>::value), "");
10284684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((unsigned long long)0)), long>::value), "");
10294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((double)0)), long>::value), "");
10304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrint((long double)0)), long>::value), "");
10314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrintf(0)), long>::value), "");
10324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lrintl(0)), long>::value), "");
10334684ddb6SLionel Sambuc     assert(std::lrint(1) == 1L);
10344684ddb6SLionel Sambuc }
10354684ddb6SLionel Sambuc 
test_lround()10364684ddb6SLionel Sambuc void test_lround()
10374684ddb6SLionel Sambuc {
10384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((float)0)), long>::value), "");
10394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((bool)0)), long>::value), "");
10404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((unsigned short)0)), long>::value), "");
10414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((int)0)), long>::value), "");
10424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((unsigned int)0)), long>::value), "");
10434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((long)0)), long>::value), "");
10444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((unsigned long)0)), long>::value), "");
10454684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((long long)0)), long>::value), "");
10464684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((unsigned long long)0)), long>::value), "");
10474684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((double)0)), long>::value), "");
10484684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lround((long double)0)), long>::value), "");
10494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lroundf(0)), long>::value), "");
10504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::lroundl(0)), long>::value), "");
10514684ddb6SLionel Sambuc     assert(std::lround(1) == 1L);
10524684ddb6SLionel Sambuc }
10534684ddb6SLionel Sambuc 
test_nan()10544684ddb6SLionel Sambuc void test_nan()
10554684ddb6SLionel Sambuc {
10564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nan("")), double>::value), "");
10574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nanf("")), float>::value), "");
10584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nanl("")), long double>::value), "");
10594684ddb6SLionel Sambuc }
10604684ddb6SLionel Sambuc 
test_nearbyint()10614684ddb6SLionel Sambuc void test_nearbyint()
10624684ddb6SLionel Sambuc {
10634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((float)0)), float>::value), "");
10644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((bool)0)), double>::value), "");
10654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((unsigned short)0)), double>::value), "");
10664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((int)0)), double>::value), "");
10674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((unsigned int)0)), double>::value), "");
10684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((long)0)), double>::value), "");
10694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((unsigned long)0)), double>::value), "");
10704684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((long long)0)), double>::value), "");
10714684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((unsigned long long)0)), double>::value), "");
10724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((double)0)), double>::value), "");
10734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyint((long double)0)), long double>::value), "");
10744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyintf(0)), float>::value), "");
10754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nearbyintl(0)), long double>::value), "");
10764684ddb6SLionel Sambuc     assert(std::nearbyint(1) == 1);
10774684ddb6SLionel Sambuc }
10784684ddb6SLionel Sambuc 
test_nextafter()10794684ddb6SLionel Sambuc void test_nextafter()
10804684ddb6SLionel Sambuc {
10814684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((float)0, (float)0)), float>::value), "");
10824684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((bool)0, (float)0)), double>::value), "");
10834684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((unsigned short)0, (double)0)), double>::value), "");
10844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((int)0, (long double)0)), long double>::value), "");
10854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((float)0, (unsigned int)0)), double>::value), "");
10864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((double)0, (long)0)), double>::value), "");
10874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((long double)0, (unsigned long)0)), long double>::value), "");
10884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((int)0, (long long)0)), double>::value), "");
10894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((int)0, (unsigned long long)0)), double>::value), "");
10904684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((double)0, (double)0)), double>::value), "");
10914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((long double)0, (long double)0)), long double>::value), "");
10924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((float)0, (double)0)), double>::value), "");
10934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((float)0, (long double)0)), long double>::value), "");
10944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((double)0, (long double)0)), long double>::value), "");
10954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafterf(0,0)), float>::value), "");
10964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafterl(0,0)), long double>::value), "");
10974684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nextafter((int)0, (int)0)), double>::value), "");
10984684ddb6SLionel Sambuc     assert(std::nextafter(0,1) == hexfloat<double>(0x1, 0, -1074));
10994684ddb6SLionel Sambuc }
11004684ddb6SLionel Sambuc 
test_nexttoward()11014684ddb6SLionel Sambuc void test_nexttoward()
11024684ddb6SLionel Sambuc {
11034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((float)0, (long double)0)), float>::value), "");
11044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((bool)0, (long double)0)), double>::value), "");
11054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((unsigned short)0, (long double)0)), double>::value), "");
11064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((int)0, (long double)0)), double>::value), "");
11074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((unsigned int)0, (long double)0)), double>::value), "");
11084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((long)0, (long double)0)), double>::value), "");
11094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((unsigned long)0, (long double)0)), double>::value), "");
11104684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((long long)0, (long double)0)), double>::value), "");
11114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((unsigned long long)0, (long double)0)), double>::value), "");
11124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((double)0, (long double)0)), double>::value), "");
11134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttoward((long double)0, (long double)0)), long double>::value), "");
11144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttowardf(0, (long double)0)), float>::value), "");
11154684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::nexttowardl(0, (long double)0)), long double>::value), "");
11164684ddb6SLionel Sambuc     assert(std::nexttoward(0, 1) == hexfloat<double>(0x1, 0, -1074));
11174684ddb6SLionel Sambuc }
11184684ddb6SLionel Sambuc 
test_remainder()11194684ddb6SLionel Sambuc void test_remainder()
11204684ddb6SLionel Sambuc {
11214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((float)0, (float)0)), float>::value), "");
11224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((bool)0, (float)0)), double>::value), "");
11234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((unsigned short)0, (double)0)), double>::value), "");
11244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((int)0, (long double)0)), long double>::value), "");
11254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((float)0, (unsigned int)0)), double>::value), "");
11264684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((double)0, (long)0)), double>::value), "");
11274684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((long double)0, (unsigned long)0)), long double>::value), "");
11284684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((int)0, (long long)0)), double>::value), "");
11294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((int)0, (unsigned long long)0)), double>::value), "");
11304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((double)0, (double)0)), double>::value), "");
11314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((long double)0, (long double)0)), long double>::value), "");
11324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((float)0, (double)0)), double>::value), "");
11334684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((float)0, (long double)0)), long double>::value), "");
11344684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((double)0, (long double)0)), long double>::value), "");
11354684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainderf(0,0)), float>::value), "");
11364684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainderl(0,0)), long double>::value), "");
11374684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remainder((int)0, (int)0)), double>::value), "");
11384684ddb6SLionel Sambuc     assert(std::remainder(0.5,1) == 0.5);
11394684ddb6SLionel Sambuc }
11404684ddb6SLionel Sambuc 
test_remquo()11414684ddb6SLionel Sambuc void test_remquo()
11424684ddb6SLionel Sambuc {
11434684ddb6SLionel Sambuc     int ip;
11444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((float)0, (float)0, &ip)), float>::value), "");
11454684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((bool)0, (float)0, &ip)), double>::value), "");
11464684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((unsigned short)0, (double)0, &ip)), double>::value), "");
11474684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((int)0, (long double)0, &ip)), long double>::value), "");
11484684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((float)0, (unsigned int)0, &ip)), double>::value), "");
11494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((double)0, (long)0, &ip)), double>::value), "");
11504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((long double)0, (unsigned long)0, &ip)), long double>::value), "");
11514684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((int)0, (long long)0, &ip)), double>::value), "");
11524684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((int)0, (unsigned long long)0, &ip)), double>::value), "");
11534684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((double)0, (double)0, &ip)), double>::value), "");
11544684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((long double)0, (long double)0, &ip)), long double>::value), "");
11554684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((float)0, (double)0, &ip)), double>::value), "");
11564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((float)0, (long double)0, &ip)), long double>::value), "");
11574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((double)0, (long double)0, &ip)), long double>::value), "");
11584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquof(0,0, &ip)), float>::value), "");
11594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquol(0,0, &ip)), long double>::value), "");
11604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::remquo((int)0, (int)0, &ip)), double>::value), "");
11614684ddb6SLionel Sambuc     assert(std::remquo(0.5,1, &ip) == 0.5);
11624684ddb6SLionel Sambuc }
11634684ddb6SLionel Sambuc 
test_rint()11644684ddb6SLionel Sambuc void test_rint()
11654684ddb6SLionel Sambuc {
11664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((float)0)), float>::value), "");
11674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((bool)0)), double>::value), "");
11684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((unsigned short)0)), double>::value), "");
11694684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((int)0)), double>::value), "");
11704684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((unsigned int)0)), double>::value), "");
11714684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((long)0)), double>::value), "");
11724684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((unsigned long)0)), double>::value), "");
11734684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((long long)0)), double>::value), "");
11744684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((unsigned long long)0)), double>::value), "");
11754684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((double)0)), double>::value), "");
11764684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rint((long double)0)), long double>::value), "");
11774684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rintf(0)), float>::value), "");
11784684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::rintl(0)), long double>::value), "");
11794684ddb6SLionel Sambuc     assert(std::rint(1) == 1);
11804684ddb6SLionel Sambuc }
11814684ddb6SLionel Sambuc 
test_round()11824684ddb6SLionel Sambuc void test_round()
11834684ddb6SLionel Sambuc {
11844684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((float)0)), float>::value), "");
11854684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((bool)0)), double>::value), "");
11864684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((unsigned short)0)), double>::value), "");
11874684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((int)0)), double>::value), "");
11884684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((unsigned int)0)), double>::value), "");
11894684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((long)0)), double>::value), "");
11904684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((unsigned long)0)), double>::value), "");
11914684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((long long)0)), double>::value), "");
11924684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((unsigned long long)0)), double>::value), "");
11934684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((double)0)), double>::value), "");
11944684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::round((long double)0)), long double>::value), "");
11954684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::roundf(0)), float>::value), "");
11964684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::roundl(0)), long double>::value), "");
11974684ddb6SLionel Sambuc     assert(std::round(1) == 1);
11984684ddb6SLionel Sambuc }
11994684ddb6SLionel Sambuc 
test_scalbln()12004684ddb6SLionel Sambuc void test_scalbln()
12014684ddb6SLionel Sambuc {
12024684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((float)0, (long)0)), float>::value), "");
12034684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((bool)0, (long)0)), double>::value), "");
12044684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((unsigned short)0, (long)0)), double>::value), "");
12054684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((int)0, (long)0)), double>::value), "");
12064684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((unsigned int)0, (long)0)), double>::value), "");
12074684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((long)0, (long)0)), double>::value), "");
12084684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((unsigned long)0, (long)0)), double>::value), "");
12094684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((long long)0, (long)0)), double>::value), "");
12104684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((unsigned long long)0, (long)0)), double>::value), "");
12114684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((double)0, (long)0)), double>::value), "");
12124684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbln((long double)0, (long)0)), long double>::value), "");
12134684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalblnf(0, (long)0)), float>::value), "");
12144684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalblnl(0, (long)0)), long double>::value), "");
12154684ddb6SLionel Sambuc     assert(std::scalbln(1, 1) == 2);
12164684ddb6SLionel Sambuc }
12174684ddb6SLionel Sambuc 
test_scalbn()12184684ddb6SLionel Sambuc void test_scalbn()
12194684ddb6SLionel Sambuc {
12204684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((float)0, (int)0)), float>::value), "");
12214684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((bool)0, (int)0)), double>::value), "");
12224684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((unsigned short)0, (int)0)), double>::value), "");
12234684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((int)0, (int)0)), double>::value), "");
12244684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((unsigned int)0, (int)0)), double>::value), "");
12254684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((long)0, (int)0)), double>::value), "");
12264684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((unsigned long)0, (int)0)), double>::value), "");
12274684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((long long)0, (int)0)), double>::value), "");
12284684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((unsigned long long)0, (int)0)), double>::value), "");
12294684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((double)0, (int)0)), double>::value), "");
12304684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbn((long double)0, (int)0)), long double>::value), "");
12314684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbnf(0, (int)0)), float>::value), "");
12324684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::scalbnl(0, (int)0)), long double>::value), "");
12334684ddb6SLionel Sambuc     assert(std::scalbn(1, 1) == 2);
12344684ddb6SLionel Sambuc }
12354684ddb6SLionel Sambuc 
test_tgamma()12364684ddb6SLionel Sambuc void test_tgamma()
12374684ddb6SLionel Sambuc {
12384684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((float)0)), float>::value), "");
12394684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((bool)0)), double>::value), "");
12404684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((unsigned short)0)), double>::value), "");
12414684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((int)0)), double>::value), "");
12424684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((unsigned int)0)), double>::value), "");
12434684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((long)0)), double>::value), "");
12444684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((unsigned long)0)), double>::value), "");
12454684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((long long)0)), double>::value), "");
12464684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((unsigned long long)0)), double>::value), "");
12474684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((double)0)), double>::value), "");
12484684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgamma((long double)0)), long double>::value), "");
12494684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgammaf(0)), float>::value), "");
12504684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::tgammal(0)), long double>::value), "");
12514684ddb6SLionel Sambuc     assert(std::tgamma(1) == 1);
12524684ddb6SLionel Sambuc }
12534684ddb6SLionel Sambuc 
test_trunc()12544684ddb6SLionel Sambuc void test_trunc()
12554684ddb6SLionel Sambuc {
12564684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((float)0)), float>::value), "");
12574684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((bool)0)), double>::value), "");
12584684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((unsigned short)0)), double>::value), "");
12594684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((int)0)), double>::value), "");
12604684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((unsigned int)0)), double>::value), "");
12614684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((long)0)), double>::value), "");
12624684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((unsigned long)0)), double>::value), "");
12634684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((long long)0)), double>::value), "");
12644684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((unsigned long long)0)), double>::value), "");
12654684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((double)0)), double>::value), "");
12664684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::trunc((long double)0)), long double>::value), "");
12674684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::truncf(0)), float>::value), "");
12684684ddb6SLionel Sambuc     static_assert((std::is_same<decltype(std::truncl(0)), long double>::value), "");
12694684ddb6SLionel Sambuc     assert(std::trunc(1) == 1);
12704684ddb6SLionel Sambuc }
12714684ddb6SLionel Sambuc 
main()12724684ddb6SLionel Sambuc int main()
12734684ddb6SLionel Sambuc {
1274*0a6a1f1dSLionel Sambuc     test_abs();
12754684ddb6SLionel Sambuc     test_acos();
12764684ddb6SLionel Sambuc     test_asin();
12774684ddb6SLionel Sambuc     test_atan();
12784684ddb6SLionel Sambuc     test_atan2();
12794684ddb6SLionel Sambuc     test_ceil();
12804684ddb6SLionel Sambuc     test_cos();
12814684ddb6SLionel Sambuc     test_cosh();
12824684ddb6SLionel Sambuc     test_exp();
12834684ddb6SLionel Sambuc     test_fabs();
12844684ddb6SLionel Sambuc     test_floor();
12854684ddb6SLionel Sambuc     test_fmod();
12864684ddb6SLionel Sambuc     test_frexp();
12874684ddb6SLionel Sambuc     test_ldexp();
12884684ddb6SLionel Sambuc     test_log();
12894684ddb6SLionel Sambuc     test_log10();
12904684ddb6SLionel Sambuc     test_modf();
12914684ddb6SLionel Sambuc     test_pow();
12924684ddb6SLionel Sambuc     test_sin();
12934684ddb6SLionel Sambuc     test_sinh();
12944684ddb6SLionel Sambuc     test_sqrt();
12954684ddb6SLionel Sambuc     test_tan();
12964684ddb6SLionel Sambuc     test_tanh();
12974684ddb6SLionel Sambuc     test_signbit();
12984684ddb6SLionel Sambuc     test_fpclassify();
12994684ddb6SLionel Sambuc     test_isfinite();
13004684ddb6SLionel Sambuc     test_isnormal();
13014684ddb6SLionel Sambuc     test_isgreater();
13024684ddb6SLionel Sambuc     test_isgreaterequal();
13034684ddb6SLionel Sambuc     test_isless();
13044684ddb6SLionel Sambuc     test_islessequal();
13054684ddb6SLionel Sambuc     test_islessgreater();
13064684ddb6SLionel Sambuc     test_isunordered();
13074684ddb6SLionel Sambuc     test_acosh();
13084684ddb6SLionel Sambuc     test_asinh();
13094684ddb6SLionel Sambuc     test_atanh();
13104684ddb6SLionel Sambuc     test_cbrt();
13114684ddb6SLionel Sambuc     test_copysign();
13124684ddb6SLionel Sambuc     test_erf();
13134684ddb6SLionel Sambuc     test_erfc();
13144684ddb6SLionel Sambuc     test_exp2();
13154684ddb6SLionel Sambuc     test_expm1();
13164684ddb6SLionel Sambuc     test_fdim();
13174684ddb6SLionel Sambuc     test_fma();
13184684ddb6SLionel Sambuc     test_fmax();
13194684ddb6SLionel Sambuc     test_fmin();
13204684ddb6SLionel Sambuc     test_hypot();
13214684ddb6SLionel Sambuc     test_ilogb();
13224684ddb6SLionel Sambuc     test_lgamma();
13234684ddb6SLionel Sambuc     test_llrint();
13244684ddb6SLionel Sambuc     test_llround();
13254684ddb6SLionel Sambuc     test_log1p();
13264684ddb6SLionel Sambuc     test_log2();
13274684ddb6SLionel Sambuc     test_logb();
13284684ddb6SLionel Sambuc     test_lrint();
13294684ddb6SLionel Sambuc     test_lround();
13304684ddb6SLionel Sambuc     test_nan();
13314684ddb6SLionel Sambuc     test_nearbyint();
13324684ddb6SLionel Sambuc     test_nextafter();
13334684ddb6SLionel Sambuc     test_nexttoward();
13344684ddb6SLionel Sambuc     test_remainder();
13354684ddb6SLionel Sambuc     test_remquo();
13364684ddb6SLionel Sambuc     test_rint();
13374684ddb6SLionel Sambuc     test_round();
13384684ddb6SLionel Sambuc     test_scalbln();
13394684ddb6SLionel Sambuc     test_scalbn();
13404684ddb6SLionel Sambuc     test_tgamma();
13414684ddb6SLionel Sambuc     test_trunc();
13424684ddb6SLionel Sambuc }
1343