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