blob: b03a61b15e11fd8fadcd128d83c5ea7b7e8793ac [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
Dan Albert1d4a1ed2016-05-25 22:36:09 -070012// XFAIL: linux
Eric Fiselier2af66e92014-08-09 02:39:03 +000013
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000014#include <math.h>
15#include <type_traits>
16#include <cassert>
17
Marshall Clow83e2c4d2013-01-05 03:21:01 +000018#include "hexfloat.h"
Howard Hinnant0a111112011-05-13 21:52:40 +000019
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000020void 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
28void 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
36void 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
44void 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
52void 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
60void 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
68void 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
76void 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
84void test_fabs()
85{
86 static_assert((std::is_same<decltype(fabs((double)0)), double>::value), "");
Dan Albert1d4a1ed2016-05-25 22:36:09 -070087 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);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000090}
91
92void 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
100void 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
108void 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
117void 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
126void 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
134void 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
142void 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
151void 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
159void 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
167void 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
175void 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
183void 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
191void 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
199void test_signbit()
200{
Howard Hinnant0a111112011-05-13 21:52:40 +0000201 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000204 assert(signbit(-1.0) == true);
205}
206
207void 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
215void test_isfinite()
216{
Howard Hinnant0a111112011-05-13 21:52:40 +0000217 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000220 assert(isfinite(-1.0) == true);
221}
222
Dan Albert1d4a1ed2016-05-25 22:36:09 -0700223void 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
231void 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
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000239void test_isnormal()
240{
Howard Hinnant0a111112011-05-13 21:52:40 +0000241 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000244 assert(isnormal(-1.0) == true);
245}
246
247void test_isgreater()
248{
Howard Hinnant0a111112011-05-13 21:52:40 +0000249 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000258 assert(isgreater(-1.0, 0.F) == false);
259}
260
261void test_isgreaterequal()
262{
Howard Hinnant0a111112011-05-13 21:52:40 +0000263 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000272 assert(isgreaterequal(-1.0, 0.F) == false);
273}
274
275void test_isless()
276{
Howard Hinnant0a111112011-05-13 21:52:40 +0000277 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000286 assert(isless(-1.0, 0.F) == true);
287}
288
289void test_islessequal()
290{
Howard Hinnant0a111112011-05-13 21:52:40 +0000291 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000300 assert(islessequal(-1.0, 0.F) == true);
301}
302
303void test_islessgreater()
304{
Howard Hinnant0a111112011-05-13 21:52:40 +0000305 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000314 assert(islessgreater(-1.0, 0.F) == true);
315}
316
317void test_isunordered()
318{
Howard Hinnant0a111112011-05-13 21:52:40 +0000319 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), "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000328 assert(isunordered(-1.0, 0.F) == false);
329}
330
331void 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
339void 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
347void 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
355void 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
363void 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
371void 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
379void 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
387void 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
395void 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
403void 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
411void 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
419void 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
427void 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
435void 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
443void 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
451void 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
459void 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
467void 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
475void 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
483void 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
491void 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
499void 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
507void 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
515void 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
522void 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
530void 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), "");
Howard Hinnant0a111112011-05-13 21:52:40 +0000535 assert(nextafter(0,1) == hexfloat<double>(0x1, 0, -1074));
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000536}
537
538void 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), "");
Howard Hinnant0a111112011-05-13 21:52:40 +0000543 assert(nexttoward(0, 1) == hexfloat<double>(0x1, 0, -1074));
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000544}
545
546void 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
555void 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
564void 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
572void 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
580void 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
588void 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
596void 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
604void 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
612int 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();
Dan Albert1d4a1ed2016-05-25 22:36:09 -0700639 test_isinf();
640 test_isnan();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000641 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}