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