cmath.pass.cpp 85 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is dual licensed under the MIT and the University of Illinois Open
  6. // Source Licenses. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <cmath>
  10. #include <cmath>
  11. #include <type_traits>
  12. #include <cassert>
  13. #include "../../hexfloat.h"
  14. void test_abs()
  15. {
  16. static_assert((std::is_same<decltype(std::abs((float)0)), float>::value), "");
  17. static_assert((std::is_same<decltype(std::abs((double)0)), double>::value), "");
  18. static_assert((std::is_same<decltype(std::abs((long double)0)), long double>::value), "");
  19. assert(std::abs(-1.) == 1);
  20. }
  21. void test_acos()
  22. {
  23. static_assert((std::is_same<decltype(std::acos((float)0)), float>::value), "");
  24. static_assert((std::is_same<decltype(std::acos((bool)0)), double>::value), "");
  25. static_assert((std::is_same<decltype(std::acos((unsigned short)0)), double>::value), "");
  26. static_assert((std::is_same<decltype(std::acos((int)0)), double>::value), "");
  27. static_assert((std::is_same<decltype(std::acos((unsigned int)0)), double>::value), "");
  28. static_assert((std::is_same<decltype(std::acos((long)0)), double>::value), "");
  29. static_assert((std::is_same<decltype(std::acos((unsigned long)0)), double>::value), "");
  30. static_assert((std::is_same<decltype(std::acos((long long)0)), double>::value), "");
  31. static_assert((std::is_same<decltype(std::acos((unsigned long long)0)), double>::value), "");
  32. static_assert((std::is_same<decltype(std::acos((double)0)), double>::value), "");
  33. static_assert((std::is_same<decltype(std::acos((long double)0)), long double>::value), "");
  34. static_assert((std::is_same<decltype(std::acosf(0)), float>::value), "");
  35. static_assert((std::is_same<decltype(std::acosl(0)), long double>::value), "");
  36. assert(std::acos(1) == 0);
  37. }
  38. void test_asin()
  39. {
  40. static_assert((std::is_same<decltype(std::asin((float)0)), float>::value), "");
  41. static_assert((std::is_same<decltype(std::asin((bool)0)), double>::value), "");
  42. static_assert((std::is_same<decltype(std::asin((unsigned short)0)), double>::value), "");
  43. static_assert((std::is_same<decltype(std::asin((int)0)), double>::value), "");
  44. static_assert((std::is_same<decltype(std::asin((unsigned int)0)), double>::value), "");
  45. static_assert((std::is_same<decltype(std::asin((long)0)), double>::value), "");
  46. static_assert((std::is_same<decltype(std::asin((unsigned long)0)), double>::value), "");
  47. static_assert((std::is_same<decltype(std::asin((long long)0)), double>::value), "");
  48. static_assert((std::is_same<decltype(std::asin((unsigned long long)0)), double>::value), "");
  49. static_assert((std::is_same<decltype(std::asin((double)0)), double>::value), "");
  50. static_assert((std::is_same<decltype(std::asin((long double)0)), long double>::value), "");
  51. static_assert((std::is_same<decltype(std::asinf(0)), float>::value), "");
  52. static_assert((std::is_same<decltype(std::asinl(0)), long double>::value), "");
  53. assert(std::asin(0) == 0);
  54. }
  55. void test_atan()
  56. {
  57. static_assert((std::is_same<decltype(std::atan((float)0)), float>::value), "");
  58. static_assert((std::is_same<decltype(std::atan((bool)0)), double>::value), "");
  59. static_assert((std::is_same<decltype(std::atan((unsigned short)0)), double>::value), "");
  60. static_assert((std::is_same<decltype(std::atan((int)0)), double>::value), "");
  61. static_assert((std::is_same<decltype(std::atan((unsigned int)0)), double>::value), "");
  62. static_assert((std::is_same<decltype(std::atan((long)0)), double>::value), "");
  63. static_assert((std::is_same<decltype(std::atan((unsigned long)0)), double>::value), "");
  64. static_assert((std::is_same<decltype(std::atan((long long)0)), double>::value), "");
  65. static_assert((std::is_same<decltype(std::atan((unsigned long long)0)), double>::value), "");
  66. static_assert((std::is_same<decltype(std::atan((double)0)), double>::value), "");
  67. static_assert((std::is_same<decltype(std::atan((long double)0)), long double>::value), "");
  68. static_assert((std::is_same<decltype(std::atanf(0)), float>::value), "");
  69. static_assert((std::is_same<decltype(std::atanl(0)), long double>::value), "");
  70. assert(std::atan(0) == 0);
  71. }
  72. void test_atan2()
  73. {
  74. static_assert((std::is_same<decltype(std::atan2((float)0, (float)0)), float>::value), "");
  75. static_assert((std::is_same<decltype(std::atan2((bool)0, (float)0)), double>::value), "");
  76. static_assert((std::is_same<decltype(std::atan2((unsigned short)0, (double)0)), double>::value), "");
  77. static_assert((std::is_same<decltype(std::atan2((int)0, (long double)0)), long double>::value), "");
  78. static_assert((std::is_same<decltype(std::atan2((float)0, (unsigned int)0)), double>::value), "");
  79. static_assert((std::is_same<decltype(std::atan2((double)0, (long)0)), double>::value), "");
  80. static_assert((std::is_same<decltype(std::atan2((long double)0, (unsigned long)0)), long double>::value), "");
  81. static_assert((std::is_same<decltype(std::atan2((int)0, (long long)0)), double>::value), "");
  82. static_assert((std::is_same<decltype(std::atan2((int)0, (unsigned long long)0)), double>::value), "");
  83. static_assert((std::is_same<decltype(std::atan2((double)0, (double)0)), double>::value), "");
  84. static_assert((std::is_same<decltype(std::atan2((long double)0, (long double)0)), long double>::value), "");
  85. static_assert((std::is_same<decltype(std::atan2((float)0, (double)0)), double>::value), "");
  86. static_assert((std::is_same<decltype(std::atan2((float)0, (long double)0)), long double>::value), "");
  87. static_assert((std::is_same<decltype(std::atan2((double)0, (long double)0)), long double>::value), "");
  88. static_assert((std::is_same<decltype(std::atan2f(0,0)), float>::value), "");
  89. static_assert((std::is_same<decltype(std::atan2l(0,0)), long double>::value), "");
  90. static_assert((std::is_same<decltype(std::atan2((int)0, (int)0)), double>::value), "");
  91. assert(std::atan2(0,1) == 0);
  92. }
  93. void test_ceil()
  94. {
  95. static_assert((std::is_same<decltype(std::ceil((float)0)), float>::value), "");
  96. static_assert((std::is_same<decltype(std::ceil((bool)0)), double>::value), "");
  97. static_assert((std::is_same<decltype(std::ceil((unsigned short)0)), double>::value), "");
  98. static_assert((std::is_same<decltype(std::ceil((int)0)), double>::value), "");
  99. static_assert((std::is_same<decltype(std::ceil((unsigned int)0)), double>::value), "");
  100. static_assert((std::is_same<decltype(std::ceil((long)0)), double>::value), "");
  101. static_assert((std::is_same<decltype(std::ceil((unsigned long)0)), double>::value), "");
  102. static_assert((std::is_same<decltype(std::ceil((long long)0)), double>::value), "");
  103. static_assert((std::is_same<decltype(std::ceil((unsigned long long)0)), double>::value), "");
  104. static_assert((std::is_same<decltype(std::ceil((double)0)), double>::value), "");
  105. static_assert((std::is_same<decltype(std::ceil((long double)0)), long double>::value), "");
  106. static_assert((std::is_same<decltype(std::ceilf(0)), float>::value), "");
  107. static_assert((std::is_same<decltype(std::ceill(0)), long double>::value), "");
  108. assert(std::ceil(0) == 0);
  109. }
  110. void test_cos()
  111. {
  112. static_assert((std::is_same<decltype(std::cos((float)0)), float>::value), "");
  113. static_assert((std::is_same<decltype(std::cos((bool)0)), double>::value), "");
  114. static_assert((std::is_same<decltype(std::cos((unsigned short)0)), double>::value), "");
  115. static_assert((std::is_same<decltype(std::cos((int)0)), double>::value), "");
  116. static_assert((std::is_same<decltype(std::cos((unsigned int)0)), double>::value), "");
  117. static_assert((std::is_same<decltype(std::cos((long)0)), double>::value), "");
  118. static_assert((std::is_same<decltype(std::cos((unsigned long)0)), double>::value), "");
  119. static_assert((std::is_same<decltype(std::cos((long long)0)), double>::value), "");
  120. static_assert((std::is_same<decltype(std::cos((unsigned long long)0)), double>::value), "");
  121. static_assert((std::is_same<decltype(std::cos((double)0)), double>::value), "");
  122. static_assert((std::is_same<decltype(std::cos((long double)0)), long double>::value), "");
  123. static_assert((std::is_same<decltype(std::cosf(0)), float>::value), "");
  124. static_assert((std::is_same<decltype(std::cosl(0)), long double>::value), "");
  125. assert(std::cos(0) == 1);
  126. }
  127. void test_cosh()
  128. {
  129. static_assert((std::is_same<decltype(std::cosh((float)0)), float>::value), "");
  130. static_assert((std::is_same<decltype(std::cosh((bool)0)), double>::value), "");
  131. static_assert((std::is_same<decltype(std::cosh((unsigned short)0)), double>::value), "");
  132. static_assert((std::is_same<decltype(std::cosh((int)0)), double>::value), "");
  133. static_assert((std::is_same<decltype(std::cosh((unsigned int)0)), double>::value), "");
  134. static_assert((std::is_same<decltype(std::cosh((long)0)), double>::value), "");
  135. static_assert((std::is_same<decltype(std::cosh((unsigned long)0)), double>::value), "");
  136. static_assert((std::is_same<decltype(std::cosh((long long)0)), double>::value), "");
  137. static_assert((std::is_same<decltype(std::cosh((unsigned long long)0)), double>::value), "");
  138. static_assert((std::is_same<decltype(std::cosh((double)0)), double>::value), "");
  139. static_assert((std::is_same<decltype(std::cosh((long double)0)), long double>::value), "");
  140. static_assert((std::is_same<decltype(std::coshf(0)), float>::value), "");
  141. static_assert((std::is_same<decltype(std::coshl(0)), long double>::value), "");
  142. assert(std::cosh(0) == 1);
  143. }
  144. void test_exp()
  145. {
  146. static_assert((std::is_same<decltype(std::exp((float)0)), float>::value), "");
  147. static_assert((std::is_same<decltype(std::exp((bool)0)), double>::value), "");
  148. static_assert((std::is_same<decltype(std::exp((unsigned short)0)), double>::value), "");
  149. static_assert((std::is_same<decltype(std::exp((int)0)), double>::value), "");
  150. static_assert((std::is_same<decltype(std::exp((unsigned int)0)), double>::value), "");
  151. static_assert((std::is_same<decltype(std::exp((long)0)), double>::value), "");
  152. static_assert((std::is_same<decltype(std::exp((unsigned long)0)), double>::value), "");
  153. static_assert((std::is_same<decltype(std::exp((long long)0)), double>::value), "");
  154. static_assert((std::is_same<decltype(std::exp((unsigned long long)0)), double>::value), "");
  155. static_assert((std::is_same<decltype(std::exp((double)0)), double>::value), "");
  156. static_assert((std::is_same<decltype(std::exp((long double)0)), long double>::value), "");
  157. static_assert((std::is_same<decltype(std::expf(0)), float>::value), "");
  158. static_assert((std::is_same<decltype(std::expl(0)), long double>::value), "");
  159. assert(std::exp(0) == 1);
  160. }
  161. void test_fabs()
  162. {
  163. static_assert((std::is_same<decltype(std::fabs((float)0)), float>::value), "");
  164. static_assert((std::is_same<decltype(std::fabs((bool)0)), double>::value), "");
  165. static_assert((std::is_same<decltype(std::fabs((unsigned short)0)), double>::value), "");
  166. static_assert((std::is_same<decltype(std::fabs((int)0)), double>::value), "");
  167. static_assert((std::is_same<decltype(std::fabs((unsigned int)0)), double>::value), "");
  168. static_assert((std::is_same<decltype(std::fabs((long)0)), double>::value), "");
  169. static_assert((std::is_same<decltype(std::fabs((unsigned long)0)), double>::value), "");
  170. static_assert((std::is_same<decltype(std::fabs((long long)0)), double>::value), "");
  171. static_assert((std::is_same<decltype(std::fabs((unsigned long long)0)), double>::value), "");
  172. static_assert((std::is_same<decltype(std::fabs((double)0)), double>::value), "");
  173. static_assert((std::is_same<decltype(std::fabs((long double)0)), long double>::value), "");
  174. static_assert((std::is_same<decltype(std::fabsf(0)), float>::value), "");
  175. static_assert((std::is_same<decltype(std::fabsl(0)), long double>::value), "");
  176. assert(std::fabs(-1) == 1);
  177. }
  178. void test_floor()
  179. {
  180. static_assert((std::is_same<decltype(std::floor((float)0)), float>::value), "");
  181. static_assert((std::is_same<decltype(std::floor((bool)0)), double>::value), "");
  182. static_assert((std::is_same<decltype(std::floor((unsigned short)0)), double>::value), "");
  183. static_assert((std::is_same<decltype(std::floor((int)0)), double>::value), "");
  184. static_assert((std::is_same<decltype(std::floor((unsigned int)0)), double>::value), "");
  185. static_assert((std::is_same<decltype(std::floor((long)0)), double>::value), "");
  186. static_assert((std::is_same<decltype(std::floor((unsigned long)0)), double>::value), "");
  187. static_assert((std::is_same<decltype(std::floor((long long)0)), double>::value), "");
  188. static_assert((std::is_same<decltype(std::floor((unsigned long long)0)), double>::value), "");
  189. static_assert((std::is_same<decltype(std::floor((double)0)), double>::value), "");
  190. static_assert((std::is_same<decltype(std::floor((long double)0)), long double>::value), "");
  191. static_assert((std::is_same<decltype(std::floorf(0)), float>::value), "");
  192. static_assert((std::is_same<decltype(std::floorl(0)), long double>::value), "");
  193. assert(std::floor(1) == 1);
  194. }
  195. void test_fmod()
  196. {
  197. static_assert((std::is_same<decltype(std::fmod((float)0, (float)0)), float>::value), "");
  198. static_assert((std::is_same<decltype(std::fmod((bool)0, (float)0)), double>::value), "");
  199. static_assert((std::is_same<decltype(std::fmod((unsigned short)0, (double)0)), double>::value), "");
  200. static_assert((std::is_same<decltype(std::fmod((int)0, (long double)0)), long double>::value), "");
  201. static_assert((std::is_same<decltype(std::fmod((float)0, (unsigned int)0)), double>::value), "");
  202. static_assert((std::is_same<decltype(std::fmod((double)0, (long)0)), double>::value), "");
  203. static_assert((std::is_same<decltype(std::fmod((long double)0, (unsigned long)0)), long double>::value), "");
  204. static_assert((std::is_same<decltype(std::fmod((int)0, (long long)0)), double>::value), "");
  205. static_assert((std::is_same<decltype(std::fmod((int)0, (unsigned long long)0)), double>::value), "");
  206. static_assert((std::is_same<decltype(std::fmod((double)0, (double)0)), double>::value), "");
  207. static_assert((std::is_same<decltype(std::fmod((long double)0, (long double)0)), long double>::value), "");
  208. static_assert((std::is_same<decltype(std::fmod((float)0, (double)0)), double>::value), "");
  209. static_assert((std::is_same<decltype(std::fmod((float)0, (long double)0)), long double>::value), "");
  210. static_assert((std::is_same<decltype(std::fmod((double)0, (long double)0)), long double>::value), "");
  211. static_assert((std::is_same<decltype(std::fmodf(0,0)), float>::value), "");
  212. static_assert((std::is_same<decltype(std::fmodl(0,0)), long double>::value), "");
  213. static_assert((std::is_same<decltype(std::fmod((int)0, (int)0)), double>::value), "");
  214. assert(std::fmod(1.5,1) == .5);
  215. }
  216. void test_frexp()
  217. {
  218. int ip;
  219. static_assert((std::is_same<decltype(std::frexp((float)0, &ip)), float>::value), "");
  220. static_assert((std::is_same<decltype(std::frexp((bool)0, &ip)), double>::value), "");
  221. static_assert((std::is_same<decltype(std::frexp((unsigned short)0, &ip)), double>::value), "");
  222. static_assert((std::is_same<decltype(std::frexp((int)0, &ip)), double>::value), "");
  223. static_assert((std::is_same<decltype(std::frexp((unsigned int)0, &ip)), double>::value), "");
  224. static_assert((std::is_same<decltype(std::frexp((long)0, &ip)), double>::value), "");
  225. static_assert((std::is_same<decltype(std::frexp((unsigned long)0, &ip)), double>::value), "");
  226. static_assert((std::is_same<decltype(std::frexp((long long)0, &ip)), double>::value), "");
  227. static_assert((std::is_same<decltype(std::frexp((unsigned long long)0, &ip)), double>::value), "");
  228. static_assert((std::is_same<decltype(std::frexp((double)0, &ip)), double>::value), "");
  229. static_assert((std::is_same<decltype(std::frexp((long double)0, &ip)), long double>::value), "");
  230. static_assert((std::is_same<decltype(std::frexpf(0, &ip)), float>::value), "");
  231. static_assert((std::is_same<decltype(std::frexpl(0, &ip)), long double>::value), "");
  232. assert(std::frexp(0, &ip) == 0);
  233. }
  234. void test_ldexp()
  235. {
  236. int ip = 1;
  237. static_assert((std::is_same<decltype(std::ldexp((float)0, ip)), float>::value), "");
  238. static_assert((std::is_same<decltype(std::ldexp((bool)0, ip)), double>::value), "");
  239. static_assert((std::is_same<decltype(std::ldexp((unsigned short)0, ip)), double>::value), "");
  240. static_assert((std::is_same<decltype(std::ldexp((int)0, ip)), double>::value), "");
  241. static_assert((std::is_same<decltype(std::ldexp((unsigned int)0, ip)), double>::value), "");
  242. static_assert((std::is_same<decltype(std::ldexp((long)0, ip)), double>::value), "");
  243. static_assert((std::is_same<decltype(std::ldexp((unsigned long)0, ip)), double>::value), "");
  244. static_assert((std::is_same<decltype(std::ldexp((long long)0, ip)), double>::value), "");
  245. static_assert((std::is_same<decltype(std::ldexp((unsigned long long)0, ip)), double>::value), "");
  246. static_assert((std::is_same<decltype(std::ldexp((double)0, ip)), double>::value), "");
  247. static_assert((std::is_same<decltype(std::ldexp((long double)0, ip)), long double>::value), "");
  248. static_assert((std::is_same<decltype(std::ldexpf(0, ip)), float>::value), "");
  249. static_assert((std::is_same<decltype(std::ldexpl(0, ip)), long double>::value), "");
  250. assert(std::ldexp(1, ip) == 2);
  251. }
  252. void test_log()
  253. {
  254. static_assert((std::is_same<decltype(std::log((float)0)), float>::value), "");
  255. static_assert((std::is_same<decltype(std::log((bool)0)), double>::value), "");
  256. static_assert((std::is_same<decltype(std::log((unsigned short)0)), double>::value), "");
  257. static_assert((std::is_same<decltype(std::log((int)0)), double>::value), "");
  258. static_assert((std::is_same<decltype(std::log((unsigned int)0)), double>::value), "");
  259. static_assert((std::is_same<decltype(std::log((long)0)), double>::value), "");
  260. static_assert((std::is_same<decltype(std::log((unsigned long)0)), double>::value), "");
  261. static_assert((std::is_same<decltype(std::log((long long)0)), double>::value), "");
  262. static_assert((std::is_same<decltype(std::log((unsigned long long)0)), double>::value), "");
  263. static_assert((std::is_same<decltype(std::log((double)0)), double>::value), "");
  264. static_assert((std::is_same<decltype(std::log((long double)0)), long double>::value), "");
  265. static_assert((std::is_same<decltype(std::logf(0)), float>::value), "");
  266. static_assert((std::is_same<decltype(std::logl(0)), long double>::value), "");
  267. assert(std::log(1) == 0);
  268. }
  269. void test_log10()
  270. {
  271. static_assert((std::is_same<decltype(std::log10((float)0)), float>::value), "");
  272. static_assert((std::is_same<decltype(std::log10((bool)0)), double>::value), "");
  273. static_assert((std::is_same<decltype(std::log10((unsigned short)0)), double>::value), "");
  274. static_assert((std::is_same<decltype(std::log10((int)0)), double>::value), "");
  275. static_assert((std::is_same<decltype(std::log10((unsigned int)0)), double>::value), "");
  276. static_assert((std::is_same<decltype(std::log10((long)0)), double>::value), "");
  277. static_assert((std::is_same<decltype(std::log10((unsigned long)0)), double>::value), "");
  278. static_assert((std::is_same<decltype(std::log10((long long)0)), double>::value), "");
  279. static_assert((std::is_same<decltype(std::log10((unsigned long long)0)), double>::value), "");
  280. static_assert((std::is_same<decltype(std::log10((double)0)), double>::value), "");
  281. static_assert((std::is_same<decltype(std::log10((long double)0)), long double>::value), "");
  282. static_assert((std::is_same<decltype(std::log10f(0)), float>::value), "");
  283. static_assert((std::is_same<decltype(std::log10l(0)), long double>::value), "");
  284. assert(std::log10(1) == 0);
  285. }
  286. void test_modf()
  287. {
  288. static_assert((std::is_same<decltype(std::modf((float)0, (float*)0)), float>::value), "");
  289. static_assert((std::is_same<decltype(std::modf((double)0, (double*)0)), double>::value), "");
  290. static_assert((std::is_same<decltype(std::modf((long double)0, (long double*)0)), long double>::value), "");
  291. static_assert((std::is_same<decltype(std::modff(0, (float*)0)), float>::value), "");
  292. static_assert((std::is_same<decltype(std::modfl(0, (long double*)0)), long double>::value), "");
  293. double i;
  294. assert(std::modf(1., &i) == 0);
  295. }
  296. void test_pow()
  297. {
  298. static_assert((std::is_same<decltype(std::pow((float)0, (float)0)), float>::value), "");
  299. static_assert((std::is_same<decltype(std::pow((bool)0, (float)0)), double>::value), "");
  300. static_assert((std::is_same<decltype(std::pow((unsigned short)0, (double)0)), double>::value), "");
  301. static_assert((std::is_same<decltype(std::pow((int)0, (long double)0)), long double>::value), "");
  302. static_assert((std::is_same<decltype(std::pow((float)0, (unsigned int)0)), double>::value), "");
  303. static_assert((std::is_same<decltype(std::pow((double)0, (long)0)), double>::value), "");
  304. static_assert((std::is_same<decltype(std::pow((long double)0, (unsigned long)0)), long double>::value), "");
  305. static_assert((std::is_same<decltype(std::pow((int)0, (long long)0)), double>::value), "");
  306. static_assert((std::is_same<decltype(std::pow((int)0, (unsigned long long)0)), double>::value), "");
  307. static_assert((std::is_same<decltype(std::pow((double)0, (double)0)), double>::value), "");
  308. static_assert((std::is_same<decltype(std::pow((long double)0, (long double)0)), long double>::value), "");
  309. static_assert((std::is_same<decltype(std::pow((float)0, (double)0)), double>::value), "");
  310. static_assert((std::is_same<decltype(std::pow((float)0, (long double)0)), long double>::value), "");
  311. static_assert((std::is_same<decltype(std::pow((double)0, (long double)0)), long double>::value), "");
  312. static_assert((std::is_same<decltype(std::powf(0,0)), float>::value), "");
  313. static_assert((std::is_same<decltype(std::powl(0,0)), long double>::value), "");
  314. static_assert((std::is_same<decltype(std::pow((int)0, (int)0)), double>::value), "");
  315. assert(std::pow(1,1) == 1);
  316. }
  317. void test_sin()
  318. {
  319. static_assert((std::is_same<decltype(std::sin((float)0)), float>::value), "");
  320. static_assert((std::is_same<decltype(std::sin((bool)0)), double>::value), "");
  321. static_assert((std::is_same<decltype(std::sin((unsigned short)0)), double>::value), "");
  322. static_assert((std::is_same<decltype(std::sin((int)0)), double>::value), "");
  323. static_assert((std::is_same<decltype(std::sin((unsigned int)0)), double>::value), "");
  324. static_assert((std::is_same<decltype(std::sin((long)0)), double>::value), "");
  325. static_assert((std::is_same<decltype(std::sin((unsigned long)0)), double>::value), "");
  326. static_assert((std::is_same<decltype(std::sin((long long)0)), double>::value), "");
  327. static_assert((std::is_same<decltype(std::sin((unsigned long long)0)), double>::value), "");
  328. static_assert((std::is_same<decltype(std::sin((double)0)), double>::value), "");
  329. static_assert((std::is_same<decltype(std::sin((long double)0)), long double>::value), "");
  330. static_assert((std::is_same<decltype(std::sinf(0)), float>::value), "");
  331. static_assert((std::is_same<decltype(std::sinl(0)), long double>::value), "");
  332. assert(std::sin(0) == 0);
  333. }
  334. void test_sinh()
  335. {
  336. static_assert((std::is_same<decltype(std::sinh((float)0)), float>::value), "");
  337. static_assert((std::is_same<decltype(std::sinh((bool)0)), double>::value), "");
  338. static_assert((std::is_same<decltype(std::sinh((unsigned short)0)), double>::value), "");
  339. static_assert((std::is_same<decltype(std::sinh((int)0)), double>::value), "");
  340. static_assert((std::is_same<decltype(std::sinh((unsigned int)0)), double>::value), "");
  341. static_assert((std::is_same<decltype(std::sinh((long)0)), double>::value), "");
  342. static_assert((std::is_same<decltype(std::sinh((unsigned long)0)), double>::value), "");
  343. static_assert((std::is_same<decltype(std::sinh((long long)0)), double>::value), "");
  344. static_assert((std::is_same<decltype(std::sinh((unsigned long long)0)), double>::value), "");
  345. static_assert((std::is_same<decltype(std::sinh((double)0)), double>::value), "");
  346. static_assert((std::is_same<decltype(std::sinh((long double)0)), long double>::value), "");
  347. static_assert((std::is_same<decltype(std::sinhf(0)), float>::value), "");
  348. static_assert((std::is_same<decltype(std::sinhl(0)), long double>::value), "");
  349. assert(std::sinh(0) == 0);
  350. }
  351. void test_sqrt()
  352. {
  353. static_assert((std::is_same<decltype(std::sqrt((float)0)), float>::value), "");
  354. static_assert((std::is_same<decltype(std::sqrt((bool)0)), double>::value), "");
  355. static_assert((std::is_same<decltype(std::sqrt((unsigned short)0)), double>::value), "");
  356. static_assert((std::is_same<decltype(std::sqrt((int)0)), double>::value), "");
  357. static_assert((std::is_same<decltype(std::sqrt((unsigned int)0)), double>::value), "");
  358. static_assert((std::is_same<decltype(std::sqrt((long)0)), double>::value), "");
  359. static_assert((std::is_same<decltype(std::sqrt((unsigned long)0)), double>::value), "");
  360. static_assert((std::is_same<decltype(std::sqrt((long long)0)), double>::value), "");
  361. static_assert((std::is_same<decltype(std::sqrt((unsigned long long)0)), double>::value), "");
  362. static_assert((std::is_same<decltype(std::sqrt((double)0)), double>::value), "");
  363. static_assert((std::is_same<decltype(std::sqrt((long double)0)), long double>::value), "");
  364. static_assert((std::is_same<decltype(std::sqrtf(0)), float>::value), "");
  365. static_assert((std::is_same<decltype(std::sqrtl(0)), long double>::value), "");
  366. assert(std::sqrt(4) == 2);
  367. }
  368. void test_tan()
  369. {
  370. static_assert((std::is_same<decltype(std::tan((float)0)), float>::value), "");
  371. static_assert((std::is_same<decltype(std::tan((bool)0)), double>::value), "");
  372. static_assert((std::is_same<decltype(std::tan((unsigned short)0)), double>::value), "");
  373. static_assert((std::is_same<decltype(std::tan((int)0)), double>::value), "");
  374. static_assert((std::is_same<decltype(std::tan((unsigned int)0)), double>::value), "");
  375. static_assert((std::is_same<decltype(std::tan((long)0)), double>::value), "");
  376. static_assert((std::is_same<decltype(std::tan((unsigned long)0)), double>::value), "");
  377. static_assert((std::is_same<decltype(std::tan((long long)0)), double>::value), "");
  378. static_assert((std::is_same<decltype(std::tan((unsigned long long)0)), double>::value), "");
  379. static_assert((std::is_same<decltype(std::tan((double)0)), double>::value), "");
  380. static_assert((std::is_same<decltype(std::tan((long double)0)), long double>::value), "");
  381. static_assert((std::is_same<decltype(std::tanf(0)), float>::value), "");
  382. static_assert((std::is_same<decltype(std::tanl(0)), long double>::value), "");
  383. assert(std::tan(0) == 0);
  384. }
  385. void test_tanh()
  386. {
  387. static_assert((std::is_same<decltype(std::tanh((float)0)), float>::value), "");
  388. static_assert((std::is_same<decltype(std::tanh((bool)0)), double>::value), "");
  389. static_assert((std::is_same<decltype(std::tanh((unsigned short)0)), double>::value), "");
  390. static_assert((std::is_same<decltype(std::tanh((int)0)), double>::value), "");
  391. static_assert((std::is_same<decltype(std::tanh((unsigned int)0)), double>::value), "");
  392. static_assert((std::is_same<decltype(std::tanh((long)0)), double>::value), "");
  393. static_assert((std::is_same<decltype(std::tanh((unsigned long)0)), double>::value), "");
  394. static_assert((std::is_same<decltype(std::tanh((long long)0)), double>::value), "");
  395. static_assert((std::is_same<decltype(std::tanh((unsigned long long)0)), double>::value), "");
  396. static_assert((std::is_same<decltype(std::tanh((double)0)), double>::value), "");
  397. static_assert((std::is_same<decltype(std::tanh((long double)0)), long double>::value), "");
  398. static_assert((std::is_same<decltype(std::tanhf(0)), float>::value), "");
  399. static_assert((std::is_same<decltype(std::tanhl(0)), long double>::value), "");
  400. assert(std::tanh(0) == 0);
  401. }
  402. void test_signbit()
  403. {
  404. #ifdef signbit
  405. #error signbit defined
  406. #endif
  407. static_assert((std::is_same<decltype(std::signbit((float)0)), bool>::value), "");
  408. static_assert((std::is_same<decltype(std::signbit((double)0)), bool>::value), "");
  409. static_assert((std::is_same<decltype(std::signbit((long double)0)), bool>::value), "");
  410. assert(std::signbit(-1.0) == true);
  411. }
  412. void test_fpclassify()
  413. {
  414. #ifdef fpclassify
  415. #error fpclassify defined
  416. #endif
  417. static_assert((std::is_same<decltype(std::fpclassify((float)0)), int>::value), "");
  418. static_assert((std::is_same<decltype(std::fpclassify((double)0)), int>::value), "");
  419. static_assert((std::is_same<decltype(std::fpclassify((long double)0)), int>::value), "");
  420. assert(std::fpclassify(-1.0) == FP_NORMAL);
  421. }
  422. void test_isfinite()
  423. {
  424. #ifdef isfinite
  425. #error isfinite defined
  426. #endif
  427. static_assert((std::is_same<decltype(std::isfinite((float)0)), bool>::value), "");
  428. static_assert((std::is_same<decltype(std::isfinite((double)0)), bool>::value), "");
  429. static_assert((std::is_same<decltype(std::isfinite((long double)0)), bool>::value), "");
  430. assert(std::isfinite(-1.0) == true);
  431. }
  432. void test_isinf()
  433. {
  434. #ifdef isinf
  435. #error isinf defined
  436. #endif
  437. static_assert((std::is_same<decltype(std::isinf((float)0)), bool>::value), "");
  438. static_assert((std::is_same<decltype(std::isinf((double)0)), bool>::value), "");
  439. static_assert((std::is_same<decltype(std::isinf((long double)0)), bool>::value), "");
  440. assert(std::isinf(-1.0) == false);
  441. }
  442. void test_isnan()
  443. {
  444. #ifdef isnan
  445. #error isnan defined
  446. #endif
  447. static_assert((std::is_same<decltype(std::isnan((float)0)), bool>::value), "");
  448. static_assert((std::is_same<decltype(std::isnan((double)0)), bool>::value), "");
  449. static_assert((std::is_same<decltype(std::isnan((long double)0)), bool>::value), "");
  450. assert(std::isnan(-1.0) == false);
  451. }
  452. void test_isnormal()
  453. {
  454. #ifdef isnormal
  455. #error isnormal defined
  456. #endif
  457. static_assert((std::is_same<decltype(std::isnormal((float)0)), bool>::value), "");
  458. static_assert((std::is_same<decltype(std::isnormal((double)0)), bool>::value), "");
  459. static_assert((std::is_same<decltype(std::isnormal((long double)0)), bool>::value), "");
  460. assert(std::isnormal(-1.0) == true);
  461. }
  462. void test_isgreater()
  463. {
  464. #ifdef isgreater
  465. #error isgreater defined
  466. #endif
  467. static_assert((std::is_same<decltype(std::isgreater((float)0, (float)0)), bool>::value), "");
  468. static_assert((std::is_same<decltype(std::isgreater((float)0, (double)0)), bool>::value), "");
  469. static_assert((std::is_same<decltype(std::isgreater((float)0, (long double)0)), bool>::value), "");
  470. static_assert((std::is_same<decltype(std::isgreater((double)0, (float)0)), bool>::value), "");
  471. static_assert((std::is_same<decltype(std::isgreater((double)0, (double)0)), bool>::value), "");
  472. static_assert((std::is_same<decltype(std::isgreater((double)0, (long double)0)), bool>::value), "");
  473. static_assert((std::is_same<decltype(std::isgreater((long double)0, (float)0)), bool>::value), "");
  474. static_assert((std::is_same<decltype(std::isgreater((long double)0, (double)0)), bool>::value), "");
  475. static_assert((std::is_same<decltype(std::isgreater((long double)0, (long double)0)), bool>::value), "");
  476. assert(std::isgreater(-1.0, 0.F) == false);
  477. }
  478. void test_isgreaterequal()
  479. {
  480. #ifdef isgreaterequal
  481. #error isgreaterequal defined
  482. #endif
  483. static_assert((std::is_same<decltype(std::isgreaterequal((float)0, (float)0)), bool>::value), "");
  484. static_assert((std::is_same<decltype(std::isgreaterequal((float)0, (double)0)), bool>::value), "");
  485. static_assert((std::is_same<decltype(std::isgreaterequal((float)0, (long double)0)), bool>::value), "");
  486. static_assert((std::is_same<decltype(std::isgreaterequal((double)0, (float)0)), bool>::value), "");
  487. static_assert((std::is_same<decltype(std::isgreaterequal((double)0, (double)0)), bool>::value), "");
  488. static_assert((std::is_same<decltype(std::isgreaterequal((double)0, (long double)0)), bool>::value), "");
  489. static_assert((std::is_same<decltype(std::isgreaterequal((long double)0, (float)0)), bool>::value), "");
  490. static_assert((std::is_same<decltype(std::isgreaterequal((long double)0, (double)0)), bool>::value), "");
  491. static_assert((std::is_same<decltype(std::isgreaterequal((long double)0, (long double)0)), bool>::value), "");
  492. assert(std::isgreaterequal(-1.0, 0.F) == false);
  493. }
  494. void test_isless()
  495. {
  496. #ifdef isless
  497. #error isless defined
  498. #endif
  499. static_assert((std::is_same<decltype(std::isless((float)0, (float)0)), bool>::value), "");
  500. static_assert((std::is_same<decltype(std::isless((float)0, (double)0)), bool>::value), "");
  501. static_assert((std::is_same<decltype(std::isless((float)0, (long double)0)), bool>::value), "");
  502. static_assert((std::is_same<decltype(std::isless((double)0, (float)0)), bool>::value), "");
  503. static_assert((std::is_same<decltype(std::isless((double)0, (double)0)), bool>::value), "");
  504. static_assert((std::is_same<decltype(std::isless((double)0, (long double)0)), bool>::value), "");
  505. static_assert((std::is_same<decltype(std::isless((long double)0, (float)0)), bool>::value), "");
  506. static_assert((std::is_same<decltype(std::isless((long double)0, (double)0)), bool>::value), "");
  507. static_assert((std::is_same<decltype(std::isless((long double)0, (long double)0)), bool>::value), "");
  508. assert(std::isless(-1.0, 0.F) == true);
  509. }
  510. void test_islessequal()
  511. {
  512. #ifdef islessequal
  513. #error islessequal defined
  514. #endif
  515. static_assert((std::is_same<decltype(std::islessequal((float)0, (float)0)), bool>::value), "");
  516. static_assert((std::is_same<decltype(std::islessequal((float)0, (double)0)), bool>::value), "");
  517. static_assert((std::is_same<decltype(std::islessequal((float)0, (long double)0)), bool>::value), "");
  518. static_assert((std::is_same<decltype(std::islessequal((double)0, (float)0)), bool>::value), "");
  519. static_assert((std::is_same<decltype(std::islessequal((double)0, (double)0)), bool>::value), "");
  520. static_assert((std::is_same<decltype(std::islessequal((double)0, (long double)0)), bool>::value), "");
  521. static_assert((std::is_same<decltype(std::islessequal((long double)0, (float)0)), bool>::value), "");
  522. static_assert((std::is_same<decltype(std::islessequal((long double)0, (double)0)), bool>::value), "");
  523. static_assert((std::is_same<decltype(std::islessequal((long double)0, (long double)0)), bool>::value), "");
  524. assert(std::islessequal(-1.0, 0.F) == true);
  525. }
  526. void test_islessgreater()
  527. {
  528. #ifdef islessgreater
  529. #error islessgreater defined
  530. #endif
  531. static_assert((std::is_same<decltype(std::islessgreater((float)0, (float)0)), bool>::value), "");
  532. static_assert((std::is_same<decltype(std::islessgreater((float)0, (double)0)), bool>::value), "");
  533. static_assert((std::is_same<decltype(std::islessgreater((float)0, (long double)0)), bool>::value), "");
  534. static_assert((std::is_same<decltype(std::islessgreater((double)0, (float)0)), bool>::value), "");
  535. static_assert((std::is_same<decltype(std::islessgreater((double)0, (double)0)), bool>::value), "");
  536. static_assert((std::is_same<decltype(std::islessgreater((double)0, (long double)0)), bool>::value), "");
  537. static_assert((std::is_same<decltype(std::islessgreater((long double)0, (float)0)), bool>::value), "");
  538. static_assert((std::is_same<decltype(std::islessgreater((long double)0, (double)0)), bool>::value), "");
  539. static_assert((std::is_same<decltype(std::islessgreater((long double)0, (long double)0)), bool>::value), "");
  540. assert(std::islessgreater(-1.0, 0.F) == true);
  541. }
  542. void test_isunordered()
  543. {
  544. #ifdef isunordered
  545. #error isunordered defined
  546. #endif
  547. static_assert((std::is_same<decltype(std::isunordered((float)0, (float)0)), bool>::value), "");
  548. static_assert((std::is_same<decltype(std::isunordered((float)0, (double)0)), bool>::value), "");
  549. static_assert((std::is_same<decltype(std::isunordered((float)0, (long double)0)), bool>::value), "");
  550. static_assert((std::is_same<decltype(std::isunordered((double)0, (float)0)), bool>::value), "");
  551. static_assert((std::is_same<decltype(std::isunordered((double)0, (double)0)), bool>::value), "");
  552. static_assert((std::is_same<decltype(std::isunordered((double)0, (long double)0)), bool>::value), "");
  553. static_assert((std::is_same<decltype(std::isunordered((long double)0, (float)0)), bool>::value), "");
  554. static_assert((std::is_same<decltype(std::isunordered((long double)0, (double)0)), bool>::value), "");
  555. static_assert((std::is_same<decltype(std::isunordered((long double)0, (long double)0)), bool>::value), "");
  556. assert(std::isunordered(-1.0, 0.F) == false);
  557. }
  558. void test_acosh()
  559. {
  560. static_assert((std::is_same<decltype(std::acosh((float)0)), float>::value), "");
  561. static_assert((std::is_same<decltype(std::acosh((bool)0)), double>::value), "");
  562. static_assert((std::is_same<decltype(std::acosh((unsigned short)0)), double>::value), "");
  563. static_assert((std::is_same<decltype(std::acosh((int)0)), double>::value), "");
  564. static_assert((std::is_same<decltype(std::acosh((unsigned int)0)), double>::value), "");
  565. static_assert((std::is_same<decltype(std::acosh((long)0)), double>::value), "");
  566. static_assert((std::is_same<decltype(std::acosh((unsigned long)0)), double>::value), "");
  567. static_assert((std::is_same<decltype(std::acosh((long long)0)), double>::value), "");
  568. static_assert((std::is_same<decltype(std::acosh((unsigned long long)0)), double>::value), "");
  569. static_assert((std::is_same<decltype(std::acosh((double)0)), double>::value), "");
  570. static_assert((std::is_same<decltype(std::acosh((long double)0)), long double>::value), "");
  571. static_assert((std::is_same<decltype(std::acoshf(0)), float>::value), "");
  572. static_assert((std::is_same<decltype(std::acoshl(0)), long double>::value), "");
  573. assert(std::acosh(1) == 0);
  574. }
  575. void test_asinh()
  576. {
  577. static_assert((std::is_same<decltype(std::asinh((float)0)), float>::value), "");
  578. static_assert((std::is_same<decltype(std::asinh((bool)0)), double>::value), "");
  579. static_assert((std::is_same<decltype(std::asinh((unsigned short)0)), double>::value), "");
  580. static_assert((std::is_same<decltype(std::asinh((int)0)), double>::value), "");
  581. static_assert((std::is_same<decltype(std::asinh((unsigned int)0)), double>::value), "");
  582. static_assert((std::is_same<decltype(std::asinh((long)0)), double>::value), "");
  583. static_assert((std::is_same<decltype(std::asinh((unsigned long)0)), double>::value), "");
  584. static_assert((std::is_same<decltype(std::asinh((long long)0)), double>::value), "");
  585. static_assert((std::is_same<decltype(std::asinh((unsigned long long)0)), double>::value), "");
  586. static_assert((std::is_same<decltype(std::asinh((double)0)), double>::value), "");
  587. static_assert((std::is_same<decltype(std::asinh((long double)0)), long double>::value), "");
  588. static_assert((std::is_same<decltype(std::asinhf(0)), float>::value), "");
  589. static_assert((std::is_same<decltype(std::asinhl(0)), long double>::value), "");
  590. assert(std::asinh(0) == 0);
  591. }
  592. void test_atanh()
  593. {
  594. static_assert((std::is_same<decltype(std::atanh((float)0)), float>::value), "");
  595. static_assert((std::is_same<decltype(std::atanh((bool)0)), double>::value), "");
  596. static_assert((std::is_same<decltype(std::atanh((unsigned short)0)), double>::value), "");
  597. static_assert((std::is_same<decltype(std::atanh((int)0)), double>::value), "");
  598. static_assert((std::is_same<decltype(std::atanh((unsigned int)0)), double>::value), "");
  599. static_assert((std::is_same<decltype(std::atanh((long)0)), double>::value), "");
  600. static_assert((std::is_same<decltype(std::atanh((unsigned long)0)), double>::value), "");
  601. static_assert((std::is_same<decltype(std::atanh((long long)0)), double>::value), "");
  602. static_assert((std::is_same<decltype(std::atanh((unsigned long long)0)), double>::value), "");
  603. static_assert((std::is_same<decltype(std::atanh((double)0)), double>::value), "");
  604. static_assert((std::is_same<decltype(std::atanh((long double)0)), long double>::value), "");
  605. static_assert((std::is_same<decltype(std::atanhf(0)), float>::value), "");
  606. static_assert((std::is_same<decltype(std::atanhl(0)), long double>::value), "");
  607. assert(std::atanh(0) == 0);
  608. }
  609. void test_cbrt()
  610. {
  611. static_assert((std::is_same<decltype(std::cbrt((float)0)), float>::value), "");
  612. static_assert((std::is_same<decltype(std::cbrt((bool)0)), double>::value), "");
  613. static_assert((std::is_same<decltype(std::cbrt((unsigned short)0)), double>::value), "");
  614. static_assert((std::is_same<decltype(std::cbrt((int)0)), double>::value), "");
  615. static_assert((std::is_same<decltype(std::cbrt((unsigned int)0)), double>::value), "");
  616. static_assert((std::is_same<decltype(std::cbrt((long)0)), double>::value), "");
  617. static_assert((std::is_same<decltype(std::cbrt((unsigned long)0)), double>::value), "");
  618. static_assert((std::is_same<decltype(std::cbrt((long long)0)), double>::value), "");
  619. static_assert((std::is_same<decltype(std::cbrt((unsigned long long)0)), double>::value), "");
  620. static_assert((std::is_same<decltype(std::cbrt((double)0)), double>::value), "");
  621. static_assert((std::is_same<decltype(std::cbrt((long double)0)), long double>::value), "");
  622. static_assert((std::is_same<decltype(std::cbrtf(0)), float>::value), "");
  623. static_assert((std::is_same<decltype(std::cbrtl(0)), long double>::value), "");
  624. assert(std::cbrt(1) == 1);
  625. }
  626. void test_copysign()
  627. {
  628. static_assert((std::is_same<decltype(std::copysign((float)0, (float)0)), float>::value), "");
  629. static_assert((std::is_same<decltype(std::copysign((bool)0, (float)0)), double>::value), "");
  630. static_assert((std::is_same<decltype(std::copysign((unsigned short)0, (double)0)), double>::value), "");
  631. static_assert((std::is_same<decltype(std::copysign((int)0, (long double)0)), long double>::value), "");
  632. static_assert((std::is_same<decltype(std::copysign((float)0, (unsigned int)0)), double>::value), "");
  633. static_assert((std::is_same<decltype(std::copysign((double)0, (long)0)), double>::value), "");
  634. static_assert((std::is_same<decltype(std::copysign((long double)0, (unsigned long)0)), long double>::value), "");
  635. static_assert((std::is_same<decltype(std::copysign((int)0, (long long)0)), double>::value), "");
  636. static_assert((std::is_same<decltype(std::copysign((int)0, (unsigned long long)0)), double>::value), "");
  637. static_assert((std::is_same<decltype(std::copysign((double)0, (double)0)), double>::value), "");
  638. static_assert((std::is_same<decltype(std::copysign((long double)0, (long double)0)), long double>::value), "");
  639. static_assert((std::is_same<decltype(std::copysign((float)0, (double)0)), double>::value), "");
  640. static_assert((std::is_same<decltype(std::copysign((float)0, (long double)0)), long double>::value), "");
  641. static_assert((std::is_same<decltype(std::copysign((double)0, (long double)0)), long double>::value), "");
  642. static_assert((std::is_same<decltype(std::copysignf(0,0)), float>::value), "");
  643. static_assert((std::is_same<decltype(std::copysignl(0,0)), long double>::value), "");
  644. static_assert((std::is_same<decltype(std::copysign((int)0, (int)0)), double>::value), "");
  645. assert(std::copysign(1,1) == 1);
  646. }
  647. void test_erf()
  648. {
  649. static_assert((std::is_same<decltype(std::erf((float)0)), float>::value), "");
  650. static_assert((std::is_same<decltype(std::erf((bool)0)), double>::value), "");
  651. static_assert((std::is_same<decltype(std::erf((unsigned short)0)), double>::value), "");
  652. static_assert((std::is_same<decltype(std::erf((int)0)), double>::value), "");
  653. static_assert((std::is_same<decltype(std::erf((unsigned int)0)), double>::value), "");
  654. static_assert((std::is_same<decltype(std::erf((long)0)), double>::value), "");
  655. static_assert((std::is_same<decltype(std::erf((unsigned long)0)), double>::value), "");
  656. static_assert((std::is_same<decltype(std::erf((long long)0)), double>::value), "");
  657. static_assert((std::is_same<decltype(std::erf((unsigned long long)0)), double>::value), "");
  658. static_assert((std::is_same<decltype(std::erf((double)0)), double>::value), "");
  659. static_assert((std::is_same<decltype(std::erf((long double)0)), long double>::value), "");
  660. static_assert((std::is_same<decltype(std::erff(0)), float>::value), "");
  661. static_assert((std::is_same<decltype(std::erfl(0)), long double>::value), "");
  662. assert(std::erf(0) == 0);
  663. }
  664. void test_erfc()
  665. {
  666. static_assert((std::is_same<decltype(std::erfc((float)0)), float>::value), "");
  667. static_assert((std::is_same<decltype(std::erfc((bool)0)), double>::value), "");
  668. static_assert((std::is_same<decltype(std::erfc((unsigned short)0)), double>::value), "");
  669. static_assert((std::is_same<decltype(std::erfc((int)0)), double>::value), "");
  670. static_assert((std::is_same<decltype(std::erfc((unsigned int)0)), double>::value), "");
  671. static_assert((std::is_same<decltype(std::erfc((long)0)), double>::value), "");
  672. static_assert((std::is_same<decltype(std::erfc((unsigned long)0)), double>::value), "");
  673. static_assert((std::is_same<decltype(std::erfc((long long)0)), double>::value), "");
  674. static_assert((std::is_same<decltype(std::erfc((unsigned long long)0)), double>::value), "");
  675. static_assert((std::is_same<decltype(std::erfc((double)0)), double>::value), "");
  676. static_assert((std::is_same<decltype(std::erfc((long double)0)), long double>::value), "");
  677. static_assert((std::is_same<decltype(std::erfcf(0)), float>::value), "");
  678. static_assert((std::is_same<decltype(std::erfcl(0)), long double>::value), "");
  679. assert(std::erfc(0) == 1);
  680. }
  681. void test_exp2()
  682. {
  683. static_assert((std::is_same<decltype(std::exp2((float)0)), float>::value), "");
  684. static_assert((std::is_same<decltype(std::exp2((bool)0)), double>::value), "");
  685. static_assert((std::is_same<decltype(std::exp2((unsigned short)0)), double>::value), "");
  686. static_assert((std::is_same<decltype(std::exp2((int)0)), double>::value), "");
  687. static_assert((std::is_same<decltype(std::exp2((unsigned int)0)), double>::value), "");
  688. static_assert((std::is_same<decltype(std::exp2((long)0)), double>::value), "");
  689. static_assert((std::is_same<decltype(std::exp2((unsigned long)0)), double>::value), "");
  690. static_assert((std::is_same<decltype(std::exp2((long long)0)), double>::value), "");
  691. static_assert((std::is_same<decltype(std::exp2((unsigned long long)0)), double>::value), "");
  692. static_assert((std::is_same<decltype(std::exp2((double)0)), double>::value), "");
  693. static_assert((std::is_same<decltype(std::exp2((long double)0)), long double>::value), "");
  694. static_assert((std::is_same<decltype(std::exp2f(0)), float>::value), "");
  695. static_assert((std::is_same<decltype(std::exp2l(0)), long double>::value), "");
  696. assert(std::exp2(1) == 2);
  697. }
  698. void test_expm1()
  699. {
  700. static_assert((std::is_same<decltype(std::expm1((float)0)), float>::value), "");
  701. static_assert((std::is_same<decltype(std::expm1((bool)0)), double>::value), "");
  702. static_assert((std::is_same<decltype(std::expm1((unsigned short)0)), double>::value), "");
  703. static_assert((std::is_same<decltype(std::expm1((int)0)), double>::value), "");
  704. static_assert((std::is_same<decltype(std::expm1((unsigned int)0)), double>::value), "");
  705. static_assert((std::is_same<decltype(std::expm1((long)0)), double>::value), "");
  706. static_assert((std::is_same<decltype(std::expm1((unsigned long)0)), double>::value), "");
  707. static_assert((std::is_same<decltype(std::expm1((long long)0)), double>::value), "");
  708. static_assert((std::is_same<decltype(std::expm1((unsigned long long)0)), double>::value), "");
  709. static_assert((std::is_same<decltype(std::expm1((double)0)), double>::value), "");
  710. static_assert((std::is_same<decltype(std::expm1((long double)0)), long double>::value), "");
  711. static_assert((std::is_same<decltype(std::expm1f(0)), float>::value), "");
  712. static_assert((std::is_same<decltype(std::expm1l(0)), long double>::value), "");
  713. assert(std::expm1(0) == 0);
  714. }
  715. void test_fdim()
  716. {
  717. static_assert((std::is_same<decltype(std::fdim((float)0, (float)0)), float>::value), "");
  718. static_assert((std::is_same<decltype(std::fdim((bool)0, (float)0)), double>::value), "");
  719. static_assert((std::is_same<decltype(std::fdim((unsigned short)0, (double)0)), double>::value), "");
  720. static_assert((std::is_same<decltype(std::fdim((int)0, (long double)0)), long double>::value), "");
  721. static_assert((std::is_same<decltype(std::fdim((float)0, (unsigned int)0)), double>::value), "");
  722. static_assert((std::is_same<decltype(std::fdim((double)0, (long)0)), double>::value), "");
  723. static_assert((std::is_same<decltype(std::fdim((long double)0, (unsigned long)0)), long double>::value), "");
  724. static_assert((std::is_same<decltype(std::fdim((int)0, (long long)0)), double>::value), "");
  725. static_assert((std::is_same<decltype(std::fdim((int)0, (unsigned long long)0)), double>::value), "");
  726. static_assert((std::is_same<decltype(std::fdim((double)0, (double)0)), double>::value), "");
  727. static_assert((std::is_same<decltype(std::fdim((long double)0, (long double)0)), long double>::value), "");
  728. static_assert((std::is_same<decltype(std::fdim((float)0, (double)0)), double>::value), "");
  729. static_assert((std::is_same<decltype(std::fdim((float)0, (long double)0)), long double>::value), "");
  730. static_assert((std::is_same<decltype(std::fdim((double)0, (long double)0)), long double>::value), "");
  731. static_assert((std::is_same<decltype(std::fdimf(0,0)), float>::value), "");
  732. static_assert((std::is_same<decltype(std::fdiml(0,0)), long double>::value), "");
  733. static_assert((std::is_same<decltype(std::fdim((int)0, (int)0)), double>::value), "");
  734. assert(std::fdim(1,0) == 1);
  735. }
  736. void test_fma()
  737. {
  738. static_assert((std::is_same<decltype(std::fma((bool)0, (float)0, (float)0)), double>::value), "");
  739. static_assert((std::is_same<decltype(std::fma((char)0, (float)0, (float)0)), double>::value), "");
  740. static_assert((std::is_same<decltype(std::fma((unsigned)0, (float)0, (float)0)), double>::value), "");
  741. static_assert((std::is_same<decltype(std::fma((float)0, (int)0, (float)0)), double>::value), "");
  742. static_assert((std::is_same<decltype(std::fma((float)0, (long)0, (float)0)), double>::value), "");
  743. static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (unsigned long long)0)), double>::value), "");
  744. static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (double)0)), double>::value), "");
  745. static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (long double)0)), long double>::value), "");
  746. static_assert((std::is_same<decltype(std::fma((float)0, (float)0, (float)0)), float>::value), "");
  747. static_assert((std::is_same<decltype(std::fma((bool)0, (double)0, (double)0)), double>::value), "");
  748. static_assert((std::is_same<decltype(std::fma((char)0, (double)0, (double)0)), double>::value), "");
  749. static_assert((std::is_same<decltype(std::fma((unsigned)0, (double)0, (double)0)), double>::value), "");
  750. static_assert((std::is_same<decltype(std::fma((double)0, (int)0, (double)0)), double>::value), "");
  751. static_assert((std::is_same<decltype(std::fma((double)0, (long)0, (double)0)), double>::value), "");
  752. static_assert((std::is_same<decltype(std::fma((double)0, (double)0, (unsigned long long)0)), double>::value), "");
  753. static_assert((std::is_same<decltype(std::fma((double)0, (double)0, (float)0)), double>::value), "");
  754. static_assert((std::is_same<decltype(std::fma((double)0, (double)0, (long double)0)), long double>::value), "");
  755. static_assert((std::is_same<decltype(std::fma((double)0, (double)0, (double)0)), double>::value), "");
  756. static_assert((std::is_same<decltype(std::fma((bool)0, (long double)0, (long double)0)), long double>::value), "");
  757. static_assert((std::is_same<decltype(std::fma((char)0, (long double)0, (long double)0)), long double>::value), "");
  758. static_assert((std::is_same<decltype(std::fma((unsigned)0, (long double)0, (long double)0)), long double>::value), "");
  759. static_assert((std::is_same<decltype(std::fma((long double)0, (int)0, (long double)0)), long double>::value), "");
  760. static_assert((std::is_same<decltype(std::fma((long double)0, (long)0, (long double)0)), long double>::value), "");
  761. static_assert((std::is_same<decltype(std::fma((long double)0, (long double)0, (unsigned long long)0)), long double>::value), "");
  762. static_assert((std::is_same<decltype(std::fma((long double)0, (long double)0, (float)0)), long double>::value), "");
  763. static_assert((std::is_same<decltype(std::fma((double)0, (long double)0, (long double)0)), long double>::value), "");
  764. static_assert((std::is_same<decltype(std::fma((long double)0, (long double)0, (long double)0)), long double>::value), "");
  765. static_assert((std::is_same<decltype(std::fmaf(0,0,0)), float>::value), "");
  766. static_assert((std::is_same<decltype(std::fmal(0,0,0)), long double>::value), "");
  767. assert(std::fma(1,1,1) == 2);
  768. }
  769. void test_fmax()
  770. {
  771. static_assert((std::is_same<decltype(std::fmax((float)0, (float)0)), float>::value), "");
  772. static_assert((std::is_same<decltype(std::fmax((bool)0, (float)0)), double>::value), "");
  773. static_assert((std::is_same<decltype(std::fmax((unsigned short)0, (double)0)), double>::value), "");
  774. static_assert((std::is_same<decltype(std::fmax((int)0, (long double)0)), long double>::value), "");
  775. static_assert((std::is_same<decltype(std::fmax((float)0, (unsigned int)0)), double>::value), "");
  776. static_assert((std::is_same<decltype(std::fmax((double)0, (long)0)), double>::value), "");
  777. static_assert((std::is_same<decltype(std::fmax((long double)0, (unsigned long)0)), long double>::value), "");
  778. static_assert((std::is_same<decltype(std::fmax((int)0, (long long)0)), double>::value), "");
  779. static_assert((std::is_same<decltype(std::fmax((int)0, (unsigned long long)0)), double>::value), "");
  780. static_assert((std::is_same<decltype(std::fmax((double)0, (double)0)), double>::value), "");
  781. static_assert((std::is_same<decltype(std::fmax((long double)0, (long double)0)), long double>::value), "");
  782. static_assert((std::is_same<decltype(std::fmax((float)0, (double)0)), double>::value), "");
  783. static_assert((std::is_same<decltype(std::fmax((float)0, (long double)0)), long double>::value), "");
  784. static_assert((std::is_same<decltype(std::fmax((double)0, (long double)0)), long double>::value), "");
  785. static_assert((std::is_same<decltype(std::fmaxf(0,0)), float>::value), "");
  786. static_assert((std::is_same<decltype(std::fmaxl(0,0)), long double>::value), "");
  787. static_assert((std::is_same<decltype(std::fmax((int)0, (int)0)), double>::value), "");
  788. assert(std::fmax(1,0) == 1);
  789. }
  790. void test_fmin()
  791. {
  792. static_assert((std::is_same<decltype(std::fmin((float)0, (float)0)), float>::value), "");
  793. static_assert((std::is_same<decltype(std::fmin((bool)0, (float)0)), double>::value), "");
  794. static_assert((std::is_same<decltype(std::fmin((unsigned short)0, (double)0)), double>::value), "");
  795. static_assert((std::is_same<decltype(std::fmin((int)0, (long double)0)), long double>::value), "");
  796. static_assert((std::is_same<decltype(std::fmin((float)0, (unsigned int)0)), double>::value), "");
  797. static_assert((std::is_same<decltype(std::fmin((double)0, (long)0)), double>::value), "");
  798. static_assert((std::is_same<decltype(std::fmin((long double)0, (unsigned long)0)), long double>::value), "");
  799. static_assert((std::is_same<decltype(std::fmin((int)0, (long long)0)), double>::value), "");
  800. static_assert((std::is_same<decltype(std::fmin((int)0, (unsigned long long)0)), double>::value), "");
  801. static_assert((std::is_same<decltype(std::fmin((double)0, (double)0)), double>::value), "");
  802. static_assert((std::is_same<decltype(std::fmin((long double)0, (long double)0)), long double>::value), "");
  803. static_assert((std::is_same<decltype(std::fmin((float)0, (double)0)), double>::value), "");
  804. static_assert((std::is_same<decltype(std::fmin((float)0, (long double)0)), long double>::value), "");
  805. static_assert((std::is_same<decltype(std::fmin((double)0, (long double)0)), long double>::value), "");
  806. static_assert((std::is_same<decltype(std::fminf(0,0)), float>::value), "");
  807. static_assert((std::is_same<decltype(std::fminl(0,0)), long double>::value), "");
  808. static_assert((std::is_same<decltype(std::fmin((int)0, (int)0)), double>::value), "");
  809. assert(std::fmin(1,0) == 0);
  810. }
  811. void test_hypot()
  812. {
  813. static_assert((std::is_same<decltype(std::hypot((float)0, (float)0)), float>::value), "");
  814. static_assert((std::is_same<decltype(std::hypot((bool)0, (float)0)), double>::value), "");
  815. static_assert((std::is_same<decltype(std::hypot((unsigned short)0, (double)0)), double>::value), "");
  816. static_assert((std::is_same<decltype(std::hypot((int)0, (long double)0)), long double>::value), "");
  817. static_assert((std::is_same<decltype(std::hypot((float)0, (unsigned int)0)), double>::value), "");
  818. static_assert((std::is_same<decltype(std::hypot((double)0, (long)0)), double>::value), "");
  819. static_assert((std::is_same<decltype(std::hypot((long double)0, (unsigned long)0)), long double>::value), "");
  820. static_assert((std::is_same<decltype(std::hypot((int)0, (long long)0)), double>::value), "");
  821. static_assert((std::is_same<decltype(std::hypot((int)0, (unsigned long long)0)), double>::value), "");
  822. static_assert((std::is_same<decltype(std::hypot((double)0, (double)0)), double>::value), "");
  823. static_assert((std::is_same<decltype(std::hypot((long double)0, (long double)0)), long double>::value), "");
  824. static_assert((std::is_same<decltype(std::hypot((float)0, (double)0)), double>::value), "");
  825. static_assert((std::is_same<decltype(std::hypot((float)0, (long double)0)), long double>::value), "");
  826. static_assert((std::is_same<decltype(std::hypot((double)0, (long double)0)), long double>::value), "");
  827. static_assert((std::is_same<decltype(std::hypotf(0,0)), float>::value), "");
  828. static_assert((std::is_same<decltype(std::hypotl(0,0)), long double>::value), "");
  829. static_assert((std::is_same<decltype(std::hypot((int)0, (int)0)), double>::value), "");
  830. assert(std::hypot(3,4) == 5);
  831. }
  832. void test_ilogb()
  833. {
  834. static_assert((std::is_same<decltype(std::ilogb((float)0)), int>::value), "");
  835. static_assert((std::is_same<decltype(std::ilogb((bool)0)), int>::value), "");
  836. static_assert((std::is_same<decltype(std::ilogb((unsigned short)0)), int>::value), "");
  837. static_assert((std::is_same<decltype(std::ilogb((int)0)), int>::value), "");
  838. static_assert((std::is_same<decltype(std::ilogb((unsigned int)0)), int>::value), "");
  839. static_assert((std::is_same<decltype(std::ilogb((long)0)), int>::value), "");
  840. static_assert((std::is_same<decltype(std::ilogb((unsigned long)0)), int>::value), "");
  841. static_assert((std::is_same<decltype(std::ilogb((long long)0)), int>::value), "");
  842. static_assert((std::is_same<decltype(std::ilogb((unsigned long long)0)), int>::value), "");
  843. static_assert((std::is_same<decltype(std::ilogb((double)0)), int>::value), "");
  844. static_assert((std::is_same<decltype(std::ilogb((long double)0)), int>::value), "");
  845. static_assert((std::is_same<decltype(std::ilogbf(0)), int>::value), "");
  846. static_assert((std::is_same<decltype(std::ilogbl(0)), int>::value), "");
  847. assert(std::ilogb(1) == 0);
  848. }
  849. void test_lgamma()
  850. {
  851. static_assert((std::is_same<decltype(std::lgamma((float)0)), float>::value), "");
  852. static_assert((std::is_same<decltype(std::lgamma((bool)0)), double>::value), "");
  853. static_assert((std::is_same<decltype(std::lgamma((unsigned short)0)), double>::value), "");
  854. static_assert((std::is_same<decltype(std::lgamma((int)0)), double>::value), "");
  855. static_assert((std::is_same<decltype(std::lgamma((unsigned int)0)), double>::value), "");
  856. static_assert((std::is_same<decltype(std::lgamma((long)0)), double>::value), "");
  857. static_assert((std::is_same<decltype(std::lgamma((unsigned long)0)), double>::value), "");
  858. static_assert((std::is_same<decltype(std::lgamma((long long)0)), double>::value), "");
  859. static_assert((std::is_same<decltype(std::lgamma((unsigned long long)0)), double>::value), "");
  860. static_assert((std::is_same<decltype(std::lgamma((double)0)), double>::value), "");
  861. static_assert((std::is_same<decltype(std::lgamma((long double)0)), long double>::value), "");
  862. static_assert((std::is_same<decltype(std::lgammaf(0)), float>::value), "");
  863. static_assert((std::is_same<decltype(std::lgammal(0)), long double>::value), "");
  864. assert(std::lgamma(1) == 0);
  865. }
  866. void test_llrint()
  867. {
  868. static_assert((std::is_same<decltype(std::llrint((float)0)), long long>::value), "");
  869. static_assert((std::is_same<decltype(std::llrint((bool)0)), long long>::value), "");
  870. static_assert((std::is_same<decltype(std::llrint((unsigned short)0)), long long>::value), "");
  871. static_assert((std::is_same<decltype(std::llrint((int)0)), long long>::value), "");
  872. static_assert((std::is_same<decltype(std::llrint((unsigned int)0)), long long>::value), "");
  873. static_assert((std::is_same<decltype(std::llrint((long)0)), long long>::value), "");
  874. static_assert((std::is_same<decltype(std::llrint((unsigned long)0)), long long>::value), "");
  875. static_assert((std::is_same<decltype(std::llrint((long long)0)), long long>::value), "");
  876. static_assert((std::is_same<decltype(std::llrint((unsigned long long)0)), long long>::value), "");
  877. static_assert((std::is_same<decltype(std::llrint((double)0)), long long>::value), "");
  878. static_assert((std::is_same<decltype(std::llrint((long double)0)), long long>::value), "");
  879. static_assert((std::is_same<decltype(std::llrintf(0)), long long>::value), "");
  880. static_assert((std::is_same<decltype(std::llrintl(0)), long long>::value), "");
  881. assert(std::llrint(1) == 1LL);
  882. }
  883. void test_llround()
  884. {
  885. static_assert((std::is_same<decltype(std::llround((float)0)), long long>::value), "");
  886. static_assert((std::is_same<decltype(std::llround((bool)0)), long long>::value), "");
  887. static_assert((std::is_same<decltype(std::llround((unsigned short)0)), long long>::value), "");
  888. static_assert((std::is_same<decltype(std::llround((int)0)), long long>::value), "");
  889. static_assert((std::is_same<decltype(std::llround((unsigned int)0)), long long>::value), "");
  890. static_assert((std::is_same<decltype(std::llround((long)0)), long long>::value), "");
  891. static_assert((std::is_same<decltype(std::llround((unsigned long)0)), long long>::value), "");
  892. static_assert((std::is_same<decltype(std::llround((long long)0)), long long>::value), "");
  893. static_assert((std::is_same<decltype(std::llround((unsigned long long)0)), long long>::value), "");
  894. static_assert((std::is_same<decltype(std::llround((double)0)), long long>::value), "");
  895. static_assert((std::is_same<decltype(std::llround((long double)0)), long long>::value), "");
  896. static_assert((std::is_same<decltype(std::llroundf(0)), long long>::value), "");
  897. static_assert((std::is_same<decltype(std::llroundl(0)), long long>::value), "");
  898. assert(std::llround(1) == 1LL);
  899. }
  900. void test_log1p()
  901. {
  902. static_assert((std::is_same<decltype(std::log1p((float)0)), float>::value), "");
  903. static_assert((std::is_same<decltype(std::log1p((bool)0)), double>::value), "");
  904. static_assert((std::is_same<decltype(std::log1p((unsigned short)0)), double>::value), "");
  905. static_assert((std::is_same<decltype(std::log1p((int)0)), double>::value), "");
  906. static_assert((std::is_same<decltype(std::log1p((unsigned int)0)), double>::value), "");
  907. static_assert((std::is_same<decltype(std::log1p((long)0)), double>::value), "");
  908. static_assert((std::is_same<decltype(std::log1p((unsigned long)0)), double>::value), "");
  909. static_assert((std::is_same<decltype(std::log1p((long long)0)), double>::value), "");
  910. static_assert((std::is_same<decltype(std::log1p((unsigned long long)0)), double>::value), "");
  911. static_assert((std::is_same<decltype(std::log1p((double)0)), double>::value), "");
  912. static_assert((std::is_same<decltype(std::log1p((long double)0)), long double>::value), "");
  913. static_assert((std::is_same<decltype(std::log1pf(0)), float>::value), "");
  914. static_assert((std::is_same<decltype(std::log1pl(0)), long double>::value), "");
  915. assert(std::log1p(0) == 0);
  916. }
  917. void test_log2()
  918. {
  919. static_assert((std::is_same<decltype(std::log2((float)0)), float>::value), "");
  920. static_assert((std::is_same<decltype(std::log2((bool)0)), double>::value), "");
  921. static_assert((std::is_same<decltype(std::log2((unsigned short)0)), double>::value), "");
  922. static_assert((std::is_same<decltype(std::log2((int)0)), double>::value), "");
  923. static_assert((std::is_same<decltype(std::log2((unsigned int)0)), double>::value), "");
  924. static_assert((std::is_same<decltype(std::log2((long)0)), double>::value), "");
  925. static_assert((std::is_same<decltype(std::log2((unsigned long)0)), double>::value), "");
  926. static_assert((std::is_same<decltype(std::log2((long long)0)), double>::value), "");
  927. static_assert((std::is_same<decltype(std::log2((unsigned long long)0)), double>::value), "");
  928. static_assert((std::is_same<decltype(std::log2((double)0)), double>::value), "");
  929. static_assert((std::is_same<decltype(std::log2((long double)0)), long double>::value), "");
  930. static_assert((std::is_same<decltype(std::log2f(0)), float>::value), "");
  931. static_assert((std::is_same<decltype(std::log2l(0)), long double>::value), "");
  932. assert(std::log2(1) == 0);
  933. }
  934. void test_logb()
  935. {
  936. static_assert((std::is_same<decltype(std::logb((float)0)), float>::value), "");
  937. static_assert((std::is_same<decltype(std::logb((bool)0)), double>::value), "");
  938. static_assert((std::is_same<decltype(std::logb((unsigned short)0)), double>::value), "");
  939. static_assert((std::is_same<decltype(std::logb((int)0)), double>::value), "");
  940. static_assert((std::is_same<decltype(std::logb((unsigned int)0)), double>::value), "");
  941. static_assert((std::is_same<decltype(std::logb((long)0)), double>::value), "");
  942. static_assert((std::is_same<decltype(std::logb((unsigned long)0)), double>::value), "");
  943. static_assert((std::is_same<decltype(std::logb((long long)0)), double>::value), "");
  944. static_assert((std::is_same<decltype(std::logb((unsigned long long)0)), double>::value), "");
  945. static_assert((std::is_same<decltype(std::logb((double)0)), double>::value), "");
  946. static_assert((std::is_same<decltype(std::logb((long double)0)), long double>::value), "");
  947. static_assert((std::is_same<decltype(std::logbf(0)), float>::value), "");
  948. static_assert((std::is_same<decltype(std::logbl(0)), long double>::value), "");
  949. assert(std::logb(1) == 0);
  950. }
  951. void test_lrint()
  952. {
  953. static_assert((std::is_same<decltype(std::lrint((float)0)), long>::value), "");
  954. static_assert((std::is_same<decltype(std::lrint((bool)0)), long>::value), "");
  955. static_assert((std::is_same<decltype(std::lrint((unsigned short)0)), long>::value), "");
  956. static_assert((std::is_same<decltype(std::lrint((int)0)), long>::value), "");
  957. static_assert((std::is_same<decltype(std::lrint((unsigned int)0)), long>::value), "");
  958. static_assert((std::is_same<decltype(std::lrint((long)0)), long>::value), "");
  959. static_assert((std::is_same<decltype(std::lrint((unsigned long)0)), long>::value), "");
  960. static_assert((std::is_same<decltype(std::lrint((long long)0)), long>::value), "");
  961. static_assert((std::is_same<decltype(std::lrint((unsigned long long)0)), long>::value), "");
  962. static_assert((std::is_same<decltype(std::lrint((double)0)), long>::value), "");
  963. static_assert((std::is_same<decltype(std::lrint((long double)0)), long>::value), "");
  964. static_assert((std::is_same<decltype(std::lrintf(0)), long>::value), "");
  965. static_assert((std::is_same<decltype(std::lrintl(0)), long>::value), "");
  966. assert(std::lrint(1) == 1L);
  967. }
  968. void test_lround()
  969. {
  970. static_assert((std::is_same<decltype(std::lround((float)0)), long>::value), "");
  971. static_assert((std::is_same<decltype(std::lround((bool)0)), long>::value), "");
  972. static_assert((std::is_same<decltype(std::lround((unsigned short)0)), long>::value), "");
  973. static_assert((std::is_same<decltype(std::lround((int)0)), long>::value), "");
  974. static_assert((std::is_same<decltype(std::lround((unsigned int)0)), long>::value), "");
  975. static_assert((std::is_same<decltype(std::lround((long)0)), long>::value), "");
  976. static_assert((std::is_same<decltype(std::lround((unsigned long)0)), long>::value), "");
  977. static_assert((std::is_same<decltype(std::lround((long long)0)), long>::value), "");
  978. static_assert((std::is_same<decltype(std::lround((unsigned long long)0)), long>::value), "");
  979. static_assert((std::is_same<decltype(std::lround((double)0)), long>::value), "");
  980. static_assert((std::is_same<decltype(std::lround((long double)0)), long>::value), "");
  981. static_assert((std::is_same<decltype(std::lroundf(0)), long>::value), "");
  982. static_assert((std::is_same<decltype(std::lroundl(0)), long>::value), "");
  983. assert(std::lround(1) == 1L);
  984. }
  985. void test_nan()
  986. {
  987. static_assert((std::is_same<decltype(std::nan("")), double>::value), "");
  988. static_assert((std::is_same<decltype(std::nanf("")), float>::value), "");
  989. static_assert((std::is_same<decltype(std::nanl("")), long double>::value), "");
  990. }
  991. void test_nearbyint()
  992. {
  993. static_assert((std::is_same<decltype(std::nearbyint((float)0)), float>::value), "");
  994. static_assert((std::is_same<decltype(std::nearbyint((bool)0)), double>::value), "");
  995. static_assert((std::is_same<decltype(std::nearbyint((unsigned short)0)), double>::value), "");
  996. static_assert((std::is_same<decltype(std::nearbyint((int)0)), double>::value), "");
  997. static_assert((std::is_same<decltype(std::nearbyint((unsigned int)0)), double>::value), "");
  998. static_assert((std::is_same<decltype(std::nearbyint((long)0)), double>::value), "");
  999. static_assert((std::is_same<decltype(std::nearbyint((unsigned long)0)), double>::value), "");
  1000. static_assert((std::is_same<decltype(std::nearbyint((long long)0)), double>::value), "");
  1001. static_assert((std::is_same<decltype(std::nearbyint((unsigned long long)0)), double>::value), "");
  1002. static_assert((std::is_same<decltype(std::nearbyint((double)0)), double>::value), "");
  1003. static_assert((std::is_same<decltype(std::nearbyint((long double)0)), long double>::value), "");
  1004. static_assert((std::is_same<decltype(std::nearbyintf(0)), float>::value), "");
  1005. static_assert((std::is_same<decltype(std::nearbyintl(0)), long double>::value), "");
  1006. assert(std::nearbyint(1) == 1);
  1007. }
  1008. void test_nextafter()
  1009. {
  1010. static_assert((std::is_same<decltype(std::nextafter((float)0, (float)0)), float>::value), "");
  1011. static_assert((std::is_same<decltype(std::nextafter((bool)0, (float)0)), double>::value), "");
  1012. static_assert((std::is_same<decltype(std::nextafter((unsigned short)0, (double)0)), double>::value), "");
  1013. static_assert((std::is_same<decltype(std::nextafter((int)0, (long double)0)), long double>::value), "");
  1014. static_assert((std::is_same<decltype(std::nextafter((float)0, (unsigned int)0)), double>::value), "");
  1015. static_assert((std::is_same<decltype(std::nextafter((double)0, (long)0)), double>::value), "");
  1016. static_assert((std::is_same<decltype(std::nextafter((long double)0, (unsigned long)0)), long double>::value), "");
  1017. static_assert((std::is_same<decltype(std::nextafter((int)0, (long long)0)), double>::value), "");
  1018. static_assert((std::is_same<decltype(std::nextafter((int)0, (unsigned long long)0)), double>::value), "");
  1019. static_assert((std::is_same<decltype(std::nextafter((double)0, (double)0)), double>::value), "");
  1020. static_assert((std::is_same<decltype(std::nextafter((long double)0, (long double)0)), long double>::value), "");
  1021. static_assert((std::is_same<decltype(std::nextafter((float)0, (double)0)), double>::value), "");
  1022. static_assert((std::is_same<decltype(std::nextafter((float)0, (long double)0)), long double>::value), "");
  1023. static_assert((std::is_same<decltype(std::nextafter((double)0, (long double)0)), long double>::value), "");
  1024. static_assert((std::is_same<decltype(std::nextafterf(0,0)), float>::value), "");
  1025. static_assert((std::is_same<decltype(std::nextafterl(0,0)), long double>::value), "");
  1026. static_assert((std::is_same<decltype(std::nextafter((int)0, (int)0)), double>::value), "");
  1027. assert(std::nextafter(0,1) == hexfloat<double>(0x1, 0, -1074));
  1028. }
  1029. void test_nexttoward()
  1030. {
  1031. static_assert((std::is_same<decltype(std::nexttoward((float)0, (long double)0)), float>::value), "");
  1032. static_assert((std::is_same<decltype(std::nexttoward((bool)0, (long double)0)), double>::value), "");
  1033. static_assert((std::is_same<decltype(std::nexttoward((unsigned short)0, (long double)0)), double>::value), "");
  1034. static_assert((std::is_same<decltype(std::nexttoward((int)0, (long double)0)), double>::value), "");
  1035. static_assert((std::is_same<decltype(std::nexttoward((unsigned int)0, (long double)0)), double>::value), "");
  1036. static_assert((std::is_same<decltype(std::nexttoward((long)0, (long double)0)), double>::value), "");
  1037. static_assert((std::is_same<decltype(std::nexttoward((unsigned long)0, (long double)0)), double>::value), "");
  1038. static_assert((std::is_same<decltype(std::nexttoward((long long)0, (long double)0)), double>::value), "");
  1039. static_assert((std::is_same<decltype(std::nexttoward((unsigned long long)0, (long double)0)), double>::value), "");
  1040. static_assert((std::is_same<decltype(std::nexttoward((double)0, (long double)0)), double>::value), "");
  1041. static_assert((std::is_same<decltype(std::nexttoward((long double)0, (long double)0)), long double>::value), "");
  1042. static_assert((std::is_same<decltype(std::nexttowardf(0, (long double)0)), float>::value), "");
  1043. static_assert((std::is_same<decltype(std::nexttowardl(0, (long double)0)), long double>::value), "");
  1044. assert(std::nexttoward(0, 1) == hexfloat<double>(0x1, 0, -1074));
  1045. }
  1046. void test_remainder()
  1047. {
  1048. static_assert((std::is_same<decltype(std::remainder((float)0, (float)0)), float>::value), "");
  1049. static_assert((std::is_same<decltype(std::remainder((bool)0, (float)0)), double>::value), "");
  1050. static_assert((std::is_same<decltype(std::remainder((unsigned short)0, (double)0)), double>::value), "");
  1051. static_assert((std::is_same<decltype(std::remainder((int)0, (long double)0)), long double>::value), "");
  1052. static_assert((std::is_same<decltype(std::remainder((float)0, (unsigned int)0)), double>::value), "");
  1053. static_assert((std::is_same<decltype(std::remainder((double)0, (long)0)), double>::value), "");
  1054. static_assert((std::is_same<decltype(std::remainder((long double)0, (unsigned long)0)), long double>::value), "");
  1055. static_assert((std::is_same<decltype(std::remainder((int)0, (long long)0)), double>::value), "");
  1056. static_assert((std::is_same<decltype(std::remainder((int)0, (unsigned long long)0)), double>::value), "");
  1057. static_assert((std::is_same<decltype(std::remainder((double)0, (double)0)), double>::value), "");
  1058. static_assert((std::is_same<decltype(std::remainder((long double)0, (long double)0)), long double>::value), "");
  1059. static_assert((std::is_same<decltype(std::remainder((float)0, (double)0)), double>::value), "");
  1060. static_assert((std::is_same<decltype(std::remainder((float)0, (long double)0)), long double>::value), "");
  1061. static_assert((std::is_same<decltype(std::remainder((double)0, (long double)0)), long double>::value), "");
  1062. static_assert((std::is_same<decltype(std::remainderf(0,0)), float>::value), "");
  1063. static_assert((std::is_same<decltype(std::remainderl(0,0)), long double>::value), "");
  1064. static_assert((std::is_same<decltype(std::remainder((int)0, (int)0)), double>::value), "");
  1065. assert(std::remainder(0.5,1) == 0.5);
  1066. }
  1067. void test_remquo()
  1068. {
  1069. int ip;
  1070. static_assert((std::is_same<decltype(std::remquo((float)0, (float)0, &ip)), float>::value), "");
  1071. static_assert((std::is_same<decltype(std::remquo((bool)0, (float)0, &ip)), double>::value), "");
  1072. static_assert((std::is_same<decltype(std::remquo((unsigned short)0, (double)0, &ip)), double>::value), "");
  1073. static_assert((std::is_same<decltype(std::remquo((int)0, (long double)0, &ip)), long double>::value), "");
  1074. static_assert((std::is_same<decltype(std::remquo((float)0, (unsigned int)0, &ip)), double>::value), "");
  1075. static_assert((std::is_same<decltype(std::remquo((double)0, (long)0, &ip)), double>::value), "");
  1076. static_assert((std::is_same<decltype(std::remquo((long double)0, (unsigned long)0, &ip)), long double>::value), "");
  1077. static_assert((std::is_same<decltype(std::remquo((int)0, (long long)0, &ip)), double>::value), "");
  1078. static_assert((std::is_same<decltype(std::remquo((int)0, (unsigned long long)0, &ip)), double>::value), "");
  1079. static_assert((std::is_same<decltype(std::remquo((double)0, (double)0, &ip)), double>::value), "");
  1080. static_assert((std::is_same<decltype(std::remquo((long double)0, (long double)0, &ip)), long double>::value), "");
  1081. static_assert((std::is_same<decltype(std::remquo((float)0, (double)0, &ip)), double>::value), "");
  1082. static_assert((std::is_same<decltype(std::remquo((float)0, (long double)0, &ip)), long double>::value), "");
  1083. static_assert((std::is_same<decltype(std::remquo((double)0, (long double)0, &ip)), long double>::value), "");
  1084. static_assert((std::is_same<decltype(std::remquof(0,0, &ip)), float>::value), "");
  1085. static_assert((std::is_same<decltype(std::remquol(0,0, &ip)), long double>::value), "");
  1086. static_assert((std::is_same<decltype(std::remquo((int)0, (int)0, &ip)), double>::value), "");
  1087. assert(std::remquo(0.5,1, &ip) == 0.5);
  1088. }
  1089. void test_rint()
  1090. {
  1091. static_assert((std::is_same<decltype(std::rint((float)0)), float>::value), "");
  1092. static_assert((std::is_same<decltype(std::rint((bool)0)), double>::value), "");
  1093. static_assert((std::is_same<decltype(std::rint((unsigned short)0)), double>::value), "");
  1094. static_assert((std::is_same<decltype(std::rint((int)0)), double>::value), "");
  1095. static_assert((std::is_same<decltype(std::rint((unsigned int)0)), double>::value), "");
  1096. static_assert((std::is_same<decltype(std::rint((long)0)), double>::value), "");
  1097. static_assert((std::is_same<decltype(std::rint((unsigned long)0)), double>::value), "");
  1098. static_assert((std::is_same<decltype(std::rint((long long)0)), double>::value), "");
  1099. static_assert((std::is_same<decltype(std::rint((unsigned long long)0)), double>::value), "");
  1100. static_assert((std::is_same<decltype(std::rint((double)0)), double>::value), "");
  1101. static_assert((std::is_same<decltype(std::rint((long double)0)), long double>::value), "");
  1102. static_assert((std::is_same<decltype(std::rintf(0)), float>::value), "");
  1103. static_assert((std::is_same<decltype(std::rintl(0)), long double>::value), "");
  1104. assert(std::rint(1) == 1);
  1105. }
  1106. void test_round()
  1107. {
  1108. static_assert((std::is_same<decltype(std::round((float)0)), float>::value), "");
  1109. static_assert((std::is_same<decltype(std::round((bool)0)), double>::value), "");
  1110. static_assert((std::is_same<decltype(std::round((unsigned short)0)), double>::value), "");
  1111. static_assert((std::is_same<decltype(std::round((int)0)), double>::value), "");
  1112. static_assert((std::is_same<decltype(std::round((unsigned int)0)), double>::value), "");
  1113. static_assert((std::is_same<decltype(std::round((long)0)), double>::value), "");
  1114. static_assert((std::is_same<decltype(std::round((unsigned long)0)), double>::value), "");
  1115. static_assert((std::is_same<decltype(std::round((long long)0)), double>::value), "");
  1116. static_assert((std::is_same<decltype(std::round((unsigned long long)0)), double>::value), "");
  1117. static_assert((std::is_same<decltype(std::round((double)0)), double>::value), "");
  1118. static_assert((std::is_same<decltype(std::round((long double)0)), long double>::value), "");
  1119. static_assert((std::is_same<decltype(std::roundf(0)), float>::value), "");
  1120. static_assert((std::is_same<decltype(std::roundl(0)), long double>::value), "");
  1121. assert(std::round(1) == 1);
  1122. }
  1123. void test_scalbln()
  1124. {
  1125. static_assert((std::is_same<decltype(std::scalbln((float)0, (long)0)), float>::value), "");
  1126. static_assert((std::is_same<decltype(std::scalbln((bool)0, (long)0)), double>::value), "");
  1127. static_assert((std::is_same<decltype(std::scalbln((unsigned short)0, (long)0)), double>::value), "");
  1128. static_assert((std::is_same<decltype(std::scalbln((int)0, (long)0)), double>::value), "");
  1129. static_assert((std::is_same<decltype(std::scalbln((unsigned int)0, (long)0)), double>::value), "");
  1130. static_assert((std::is_same<decltype(std::scalbln((long)0, (long)0)), double>::value), "");
  1131. static_assert((std::is_same<decltype(std::scalbln((unsigned long)0, (long)0)), double>::value), "");
  1132. static_assert((std::is_same<decltype(std::scalbln((long long)0, (long)0)), double>::value), "");
  1133. static_assert((std::is_same<decltype(std::scalbln((unsigned long long)0, (long)0)), double>::value), "");
  1134. static_assert((std::is_same<decltype(std::scalbln((double)0, (long)0)), double>::value), "");
  1135. static_assert((std::is_same<decltype(std::scalbln((long double)0, (long)0)), long double>::value), "");
  1136. static_assert((std::is_same<decltype(std::scalblnf(0, (long)0)), float>::value), "");
  1137. static_assert((std::is_same<decltype(std::scalblnl(0, (long)0)), long double>::value), "");
  1138. assert(std::scalbln(1, 1) == 2);
  1139. }
  1140. void test_scalbn()
  1141. {
  1142. static_assert((std::is_same<decltype(std::scalbn((float)0, (int)0)), float>::value), "");
  1143. static_assert((std::is_same<decltype(std::scalbn((bool)0, (int)0)), double>::value), "");
  1144. static_assert((std::is_same<decltype(std::scalbn((unsigned short)0, (int)0)), double>::value), "");
  1145. static_assert((std::is_same<decltype(std::scalbn((int)0, (int)0)), double>::value), "");
  1146. static_assert((std::is_same<decltype(std::scalbn((unsigned int)0, (int)0)), double>::value), "");
  1147. static_assert((std::is_same<decltype(std::scalbn((long)0, (int)0)), double>::value), "");
  1148. static_assert((std::is_same<decltype(std::scalbn((unsigned long)0, (int)0)), double>::value), "");
  1149. static_assert((std::is_same<decltype(std::scalbn((long long)0, (int)0)), double>::value), "");
  1150. static_assert((std::is_same<decltype(std::scalbn((unsigned long long)0, (int)0)), double>::value), "");
  1151. static_assert((std::is_same<decltype(std::scalbn((double)0, (int)0)), double>::value), "");
  1152. static_assert((std::is_same<decltype(std::scalbn((long double)0, (int)0)), long double>::value), "");
  1153. static_assert((std::is_same<decltype(std::scalbnf(0, (int)0)), float>::value), "");
  1154. static_assert((std::is_same<decltype(std::scalbnl(0, (int)0)), long double>::value), "");
  1155. assert(std::scalbn(1, 1) == 2);
  1156. }
  1157. void test_tgamma()
  1158. {
  1159. static_assert((std::is_same<decltype(std::tgamma((float)0)), float>::value), "");
  1160. static_assert((std::is_same<decltype(std::tgamma((bool)0)), double>::value), "");
  1161. static_assert((std::is_same<decltype(std::tgamma((unsigned short)0)), double>::value), "");
  1162. static_assert((std::is_same<decltype(std::tgamma((int)0)), double>::value), "");
  1163. static_assert((std::is_same<decltype(std::tgamma((unsigned int)0)), double>::value), "");
  1164. static_assert((std::is_same<decltype(std::tgamma((long)0)), double>::value), "");
  1165. static_assert((std::is_same<decltype(std::tgamma((unsigned long)0)), double>::value), "");
  1166. static_assert((std::is_same<decltype(std::tgamma((long long)0)), double>::value), "");
  1167. static_assert((std::is_same<decltype(std::tgamma((unsigned long long)0)), double>::value), "");
  1168. static_assert((std::is_same<decltype(std::tgamma((double)0)), double>::value), "");
  1169. static_assert((std::is_same<decltype(std::tgamma((long double)0)), long double>::value), "");
  1170. static_assert((std::is_same<decltype(std::tgammaf(0)), float>::value), "");
  1171. static_assert((std::is_same<decltype(std::tgammal(0)), long double>::value), "");
  1172. assert(std::tgamma(1) == 1);
  1173. }
  1174. void test_trunc()
  1175. {
  1176. static_assert((std::is_same<decltype(std::trunc((float)0)), float>::value), "");
  1177. static_assert((std::is_same<decltype(std::trunc((bool)0)), double>::value), "");
  1178. static_assert((std::is_same<decltype(std::trunc((unsigned short)0)), double>::value), "");
  1179. static_assert((std::is_same<decltype(std::trunc((int)0)), double>::value), "");
  1180. static_assert((std::is_same<decltype(std::trunc((unsigned int)0)), double>::value), "");
  1181. static_assert((std::is_same<decltype(std::trunc((long)0)), double>::value), "");
  1182. static_assert((std::is_same<decltype(std::trunc((unsigned long)0)), double>::value), "");
  1183. static_assert((std::is_same<decltype(std::trunc((long long)0)), double>::value), "");
  1184. static_assert((std::is_same<decltype(std::trunc((unsigned long long)0)), double>::value), "");
  1185. static_assert((std::is_same<decltype(std::trunc((double)0)), double>::value), "");
  1186. static_assert((std::is_same<decltype(std::trunc((long double)0)), long double>::value), "");
  1187. static_assert((std::is_same<decltype(std::truncf(0)), float>::value), "");
  1188. static_assert((std::is_same<decltype(std::truncl(0)), long double>::value), "");
  1189. assert(std::trunc(1) == 1);
  1190. }
  1191. int main()
  1192. {
  1193. test_acos();
  1194. test_asin();
  1195. test_atan();
  1196. test_atan2();
  1197. test_ceil();
  1198. test_cos();
  1199. test_cosh();
  1200. test_exp();
  1201. test_fabs();
  1202. test_floor();
  1203. test_fmod();
  1204. test_frexp();
  1205. test_ldexp();
  1206. test_log();
  1207. test_log10();
  1208. test_modf();
  1209. test_pow();
  1210. test_sin();
  1211. test_sinh();
  1212. test_sqrt();
  1213. test_tan();
  1214. test_tanh();
  1215. test_signbit();
  1216. test_fpclassify();
  1217. test_isfinite();
  1218. test_isinf();
  1219. test_isnan();
  1220. test_isnormal();
  1221. test_isgreater();
  1222. test_isgreaterequal();
  1223. test_isless();
  1224. test_islessequal();
  1225. test_islessgreater();
  1226. test_isunordered();
  1227. test_acosh();
  1228. test_asinh();
  1229. test_atanh();
  1230. test_cbrt();
  1231. test_copysign();
  1232. test_erf();
  1233. test_erfc();
  1234. test_exp2();
  1235. test_expm1();
  1236. test_fdim();
  1237. test_fma();
  1238. test_fmax();
  1239. test_fmin();
  1240. test_hypot();
  1241. test_ilogb();
  1242. test_lgamma();
  1243. test_llrint();
  1244. test_llround();
  1245. test_log1p();
  1246. test_log2();
  1247. test_logb();
  1248. test_lrint();
  1249. test_lround();
  1250. test_nan();
  1251. test_nearbyint();
  1252. test_nextafter();
  1253. test_nexttoward();
  1254. test_remainder();
  1255. test_remquo();
  1256. test_rint();
  1257. test_round();
  1258. test_scalbln();
  1259. test_scalbn();
  1260. test_tgamma();
  1261. test_trunc();
  1262. }