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