Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/tools/regression/include/tgmath/tgmath.c
48249 views
1
/*-
2
* Copyright (c) 2004 Stefan Farfeleder <[email protected]>
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
*
14
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
* SUCH DAMAGE.
25
*/
26
27
#include <sys/cdefs.h>
28
/* All of our functions have side effects, __pure2 causes functions calls to
29
* be optimised away. Stop that. */
30
#undef __pure2
31
#define __pure2
32
33
#include <assert.h>
34
#include <stdio.h>
35
#include <tgmath.h>
36
37
int n_float, n_double, n_long_double;
38
int n_float_complex, n_double_complex, n_long_double_complex;
39
40
int currtest = 0;
41
42
#define TGMACRO(FNC) \
43
TGMACRO_REAL(FNC) \
44
TGMACRO_COMPLEX(c ## FNC)
45
46
#define TGMACRO_REAL(FNC) \
47
float (FNC ## f)(float x) { n_float++; } \
48
double (FNC)(double x) { n_double++; } \
49
long double (FNC ## l)(long double x) { n_long_double++; }
50
51
#define TGMACRO_REAL_REAL(FNC) \
52
float (FNC ## f)(float x, float y) { n_float++; } \
53
double (FNC)(double x, double y) { n_double++; } \
54
long double \
55
(FNC ## l)(long double x, long double y) { n_long_double++; }
56
57
#define TGMACRO_REAL_FIXED_RET(FNC, TYPE) \
58
TYPE (FNC ## f)(float x) { n_float++; } \
59
TYPE (FNC)(double x) { n_double++; } \
60
TYPE (FNC ## l)(long double x) { n_long_double++; }
61
62
#define TGMACRO_COMPLEX(FNC) \
63
float complex (FNC ## f)(float complex x) { n_float_complex++; }\
64
double complex (FNC)(double complex x) { n_double_complex++; } \
65
long double complex \
66
(FNC ## l)(long double complex x) { n_long_double_complex++; }
67
68
#define TGMACRO_COMPLEX_REAL_RET(FNC) \
69
float (FNC ## f)(float complex x) { n_float_complex++; } \
70
double (FNC)(double complex x) { n_double_complex++; } \
71
long double \
72
(FNC ## l)(long double complex x) { n_long_double_complex++; }
73
74
75
/* 7.22#4 */
76
TGMACRO(acos)
77
TGMACRO(asin)
78
TGMACRO(atan)
79
TGMACRO(acosh)
80
TGMACRO(asinh)
81
TGMACRO(atanh)
82
TGMACRO(cos)
83
TGMACRO(sin)
84
TGMACRO(tan)
85
TGMACRO(cosh)
86
TGMACRO(sinh)
87
TGMACRO(tanh)
88
TGMACRO(exp)
89
TGMACRO(log)
90
TGMACRO_REAL_REAL(pow)
91
float complex (cpowf)(float complex x, float complex y) { n_float_complex++; }
92
double complex
93
(cpow)(double complex x, double complex y) { n_double_complex++; }
94
long double complex
95
(cpowl)(long double complex x, long double complex y)
96
{ n_long_double_complex++; }
97
TGMACRO(sqrt)
98
TGMACRO_REAL(fabs)
99
TGMACRO_COMPLEX_REAL_RET(cabs)
100
101
/* 7.22#5 */
102
TGMACRO_REAL_REAL(atan2)
103
TGMACRO_REAL(cbrt)
104
TGMACRO_REAL(ceil)
105
TGMACRO_REAL_REAL(copysign)
106
TGMACRO_REAL(erf)
107
TGMACRO_REAL(erfc)
108
TGMACRO_REAL(exp2)
109
TGMACRO_REAL(expm1)
110
TGMACRO_REAL_REAL(fdim)
111
TGMACRO_REAL(floor)
112
float (fmaf)(float x, float y, float z) { n_float++; }
113
double (fma)(double x, double y, double z) { n_double++; }
114
long double
115
(fmal)(long double x, long double y, long double z) { n_long_double++; }
116
TGMACRO_REAL_REAL(fmax)
117
TGMACRO_REAL_REAL(fmin)
118
TGMACRO_REAL_REAL(fmod)
119
float (frexpf)(float x, int *e) { n_float++; }
120
double (frexp)(double x, int *e) { n_double++; }
121
long double (frexpl)(long double x, int *e) { n_long_double++; }
122
TGMACRO_REAL_REAL(hypot)
123
TGMACRO_REAL_FIXED_RET(ilogb, int)
124
float (ldexpf)(float x, int e) { n_float++; }
125
double (ldexp)(double x, int e) { n_double++; }
126
long double (ldexpl)(long double x, int e) { n_long_double++; }
127
TGMACRO_REAL(lgamma)
128
TGMACRO_REAL_FIXED_RET(llrint, long long)
129
TGMACRO_REAL_FIXED_RET(llround, long long)
130
TGMACRO_REAL(log10)
131
TGMACRO_REAL(log1p)
132
TGMACRO_REAL(log2)
133
TGMACRO_REAL(logb)
134
TGMACRO_REAL_FIXED_RET(lrint, long)
135
TGMACRO_REAL_FIXED_RET(lround, long)
136
TGMACRO_REAL(nearbyint)
137
TGMACRO_REAL_REAL(nextafter)
138
float (nexttowardf)(float x, long double y) { n_float++; }
139
double (nexttoward)(double x, long double y) { n_double++; }
140
long double (nexttowardl)(long double x, long double y) { n_long_double++; }
141
TGMACRO_REAL_REAL(remainder)
142
float (remquof)(float x, float y, int *q) { n_float++; }
143
double (remquo)(double x, double y, int *q) { n_double++; }
144
long double (remquol)(long double x, long double y, int *q) { n_long_double++; }
145
TGMACRO_REAL(rint)
146
TGMACRO_REAL(round)
147
float (scalbnf)(float x, int n) { n_float++; }
148
double (scalbn)(double x, int n) { n_double++; }
149
long double (scalbnl)(long double x, int n) { n_long_double++; }
150
float (scalblnf)(float x, long n) { n_float++; }
151
double (scalbln)(double x, long n) { n_double++; }
152
long double (scalblnl)(long double x, long n) { n_long_double++; }
153
TGMACRO_REAL(tgamma)
154
TGMACRO_REAL(trunc)
155
156
/* 7.22#6 */
157
TGMACRO_COMPLEX_REAL_RET(carg)
158
TGMACRO_COMPLEX_REAL_RET(cimag)
159
TGMACRO_COMPLEX(conj)
160
TGMACRO_COMPLEX(cproj)
161
TGMACRO_COMPLEX_REAL_RET(creal)
162
163
164
long double ld;
165
double d;
166
float f;
167
long double complex ldc;
168
double complex dc;
169
float complex fc;
170
unsigned long long ull;
171
int i;
172
_Bool b;
173
174
#define SAMETYPE(EXP, TYPE) \
175
__builtin_types_compatible_p(__typeof__(EXP), TYPE)
176
177
#define CLEAR_COUNTERS \
178
(n_float = n_double = n_long_double = 0, \
179
n_float_complex = n_double_complex = n_long_double_complex = 0, 1)
180
181
#define RUN_TEST(EXP, TYPE) (EXP, SAMETYPE(EXP, TYPE))
182
183
#define PASS_REAL_ARG_REAL_RET(FNC) PASS_REAL_ARG_REAL_RET_(FNC,)
184
185
#define PASS_REAL_ARG_REAL_RET_(FNC, SUFFIX) \
186
CLEAR_COUNTERS && \
187
RUN_TEST(FNC(1.l), long double) && \
188
RUN_TEST(FNC(ld), long double) && \
189
n_long_double ## SUFFIX == 2 && \
190
RUN_TEST(FNC(1.), double) && \
191
RUN_TEST(FNC(d), double) && \
192
RUN_TEST(FNC(1ull), double) && \
193
RUN_TEST(FNC(ull), double) && \
194
RUN_TEST(FNC(1), double) && \
195
RUN_TEST(FNC(i), double) && \
196
RUN_TEST(FNC((_Bool)0), double) && \
197
RUN_TEST(FNC(b), double) && \
198
n_double ## SUFFIX == 8 && \
199
RUN_TEST(FNC(1.f), float) && \
200
RUN_TEST(FNC(f), float) && \
201
n_float ## SUFFIX == 2
202
203
#define PASS_REAL_ARG_FIXED_RET(FNC, RET) \
204
CLEAR_COUNTERS && \
205
RUN_TEST(FNC(1.l), RET) && \
206
RUN_TEST(FNC(ld), RET) && \
207
n_long_double == 2 && \
208
RUN_TEST(FNC(1.), RET) && \
209
RUN_TEST(FNC(d), RET) && \
210
RUN_TEST(FNC(1ull), RET) && \
211
RUN_TEST(FNC(ull), RET) && \
212
RUN_TEST(FNC(1), RET) && \
213
RUN_TEST(FNC(i), RET) && \
214
RUN_TEST(FNC((_Bool)0), RET) && \
215
RUN_TEST(FNC(b), RET) && \
216
n_double == 8 && \
217
RUN_TEST(FNC(1.f), RET) && \
218
RUN_TEST(FNC(f), RET) && \
219
n_float == 2
220
221
#define PASS_REAL_FIXED_ARG_REAL_RET(FNC, ARG2) \
222
CLEAR_COUNTERS && \
223
RUN_TEST(FNC(1.l, ARG2), long double) && \
224
RUN_TEST(FNC(ld, ARG2), long double) && \
225
n_long_double == 2 && \
226
RUN_TEST(FNC(1., ARG2), double) && \
227
RUN_TEST(FNC(d, ARG2), double) && \
228
RUN_TEST(FNC(1ull, ARG2), double) && \
229
RUN_TEST(FNC(ull, ARG2), double) && \
230
RUN_TEST(FNC(1, ARG2), double) && \
231
RUN_TEST(FNC(i, ARG2), double) && \
232
RUN_TEST(FNC((_Bool)0, ARG2), double) && \
233
RUN_TEST(FNC(b, ARG2), double) && \
234
n_double == 8 && \
235
RUN_TEST(FNC(1.f, ARG2), float) && \
236
RUN_TEST(FNC(f, ARG2), float) && \
237
n_float == 2
238
239
#define PASS_REAL_REAL_ARG_REAL_RET(FNC) \
240
CLEAR_COUNTERS && \
241
RUN_TEST(FNC(1.l, 1.l), long double) && \
242
RUN_TEST(FNC(1.l, 1.), long double) && \
243
RUN_TEST(FNC(1.l, 1.f), long double) && \
244
RUN_TEST(FNC(1.l, 1), long double) && \
245
RUN_TEST(FNC(1.l, (_Bool)0), long double) && \
246
RUN_TEST(FNC(1.l, ld), long double) && \
247
RUN_TEST(FNC(1., ld), long double) && \
248
RUN_TEST(FNC(1.f, ld), long double) && \
249
RUN_TEST(FNC(1, ld), long double) && \
250
RUN_TEST(FNC((_Bool)0, ld), long double) && \
251
n_long_double == 10 && \
252
RUN_TEST(FNC(d, 1.), double) && \
253
RUN_TEST(FNC(d, 1.f), double) && \
254
RUN_TEST(FNC(d, 1l), double) && \
255
RUN_TEST(FNC(d, (_Bool)0), double) && \
256
RUN_TEST(FNC(1., 1.), double) && \
257
RUN_TEST(FNC(1.f, 1.), double) && \
258
RUN_TEST(FNC(1l, 1.), double) && \
259
RUN_TEST(FNC((_Bool)0, 1.), double) && \
260
RUN_TEST(FNC(1ull, f), double) && \
261
RUN_TEST(FNC(1.f, ull), double) && \
262
RUN_TEST(FNC(1, 1l), double) && \
263
RUN_TEST(FNC(1u, i), double) && \
264
RUN_TEST(FNC((_Bool)0, 1.f), double) && \
265
RUN_TEST(FNC(1.f, b), double) && \
266
n_double == 14 && \
267
RUN_TEST(FNC(1.f, 1.f), float) && \
268
RUN_TEST(FNC(1.f, 1.f), float) && \
269
RUN_TEST(FNC(f, 1.f), float) && \
270
RUN_TEST(FNC(f, f), float) && \
271
n_float == 4
272
273
#define PASS_REAL_REAL_FIXED_ARG_REAL_RET(FNC, ARG3) \
274
CLEAR_COUNTERS && \
275
RUN_TEST(FNC(1.l, 1.l, ARG3), long double) && \
276
RUN_TEST(FNC(1.l, 1., ARG3), long double) && \
277
RUN_TEST(FNC(1.l, 1.f, ARG3), long double) && \
278
RUN_TEST(FNC(1.l, 1, ARG3), long double) && \
279
RUN_TEST(FNC(1.l, (_Bool)0, ARG3), long double) && \
280
RUN_TEST(FNC(1.l, ld, ARG3), long double) && \
281
RUN_TEST(FNC(1., ld, ARG3), long double) && \
282
RUN_TEST(FNC(1.f, ld, ARG3), long double) && \
283
RUN_TEST(FNC(1, ld, ARG3), long double) && \
284
RUN_TEST(FNC((_Bool)0, ld, ARG3), long double) && \
285
n_long_double == 10 && \
286
RUN_TEST(FNC(d, 1., ARG3), double) && \
287
RUN_TEST(FNC(d, 1.f, ARG3), double) && \
288
RUN_TEST(FNC(d, 1l, ARG3), double) && \
289
RUN_TEST(FNC(d, (_Bool)0, ARG3), double) && \
290
RUN_TEST(FNC(1., 1., ARG3), double) && \
291
RUN_TEST(FNC(1.f, 1., ARG3), double) && \
292
RUN_TEST(FNC(1l, 1., ARG3), double) && \
293
RUN_TEST(FNC((_Bool)0, 1., ARG3), double) && \
294
RUN_TEST(FNC(1ull, f, ARG3), double) && \
295
RUN_TEST(FNC(1.f, ull, ARG3), double) && \
296
RUN_TEST(FNC(1, 1l, ARG3), double) && \
297
RUN_TEST(FNC(1u, i, ARG3), double) && \
298
RUN_TEST(FNC((_Bool)0, 1.f, ARG3), double) && \
299
RUN_TEST(FNC(1.f, b, ARG3), double) && \
300
n_double == 14 && \
301
RUN_TEST(FNC(1.f, 1.f, ARG3), float) && \
302
RUN_TEST(FNC(1.f, 1.f, ARG3), float) && \
303
RUN_TEST(FNC(f, 1.f, ARG3), float) && \
304
RUN_TEST(FNC(f, f, ARG3), float) && \
305
n_float == 4
306
307
#define PASS_REAL_REAL_REAL_ARG_REAL_RET(FNC) \
308
CLEAR_COUNTERS && \
309
RUN_TEST(FNC(ld, d, f), long double) && \
310
RUN_TEST(FNC(1, ld, ld), long double) && \
311
RUN_TEST(FNC(1, d, ld), long double) && \
312
n_long_double == 3 && \
313
RUN_TEST(FNC(1, f, 1.f), double) && \
314
RUN_TEST(FNC(f, d, 1.f), double) && \
315
RUN_TEST(FNC(f, 1.f, 1.), double) && \
316
n_double == 3 && \
317
RUN_TEST(FNC(f, 1.f, f), float) && \
318
n_float == 1
319
320
#define PASS_REAL_ARG_COMPLEX_RET(FNC) \
321
CLEAR_COUNTERS && \
322
RUN_TEST(FNC(1.l), long double complex) && \
323
RUN_TEST(FNC(ld), long double complex) && \
324
n_long_double_complex == 2 && \
325
RUN_TEST(FNC(1.), double complex) && \
326
RUN_TEST(FNC(d), double complex) && \
327
RUN_TEST(FNC(1l), double complex) && \
328
RUN_TEST(FNC(i), double complex) && \
329
RUN_TEST(FNC(b), double complex) && \
330
n_double_complex == 5 && \
331
RUN_TEST(FNC(1.f), float complex) && \
332
RUN_TEST(FNC(f), float complex) && \
333
n_float_complex == 2
334
335
#define PASS_COMPLEX_ARG_COMPLEX_RET(FNC) \
336
CLEAR_COUNTERS && \
337
RUN_TEST(FNC(ldc), long double complex) && \
338
n_long_double_complex == 1 && \
339
RUN_TEST(FNC(dc), double complex) && \
340
n_double_complex == 1 && \
341
RUN_TEST(FNC(fc), float complex) && \
342
RUN_TEST(FNC(I), float complex) && \
343
n_float_complex == 2
344
345
#define PASS_COMPLEX_ARG_REAL_RET(FNC) \
346
CLEAR_COUNTERS && \
347
RUN_TEST(FNC(ldc), long double) && \
348
n_long_double_complex == 1 && \
349
RUN_TEST(FNC(dc), double) && \
350
n_double_complex == 1 && \
351
RUN_TEST(FNC(fc), float) && \
352
RUN_TEST(FNC(I), float) && \
353
n_float_complex == 2
354
355
#define PASS_COMPLEX_COMPLEX_ARG_COMPLEX_RET(FNC) \
356
CLEAR_COUNTERS && \
357
RUN_TEST(FNC(ldc, ldc), long double complex) && \
358
RUN_TEST(FNC(ldc, dc), long double complex) && \
359
RUN_TEST(FNC(ldc, fc), long double complex) && \
360
RUN_TEST(FNC(ldc, ld), long double complex) && \
361
RUN_TEST(FNC(ldc, d), long double complex) && \
362
RUN_TEST(FNC(ldc, f), long double complex) && \
363
RUN_TEST(FNC(ldc, i), long double complex) && \
364
RUN_TEST(FNC(dc, ldc), long double complex) && \
365
RUN_TEST(FNC(I, ldc), long double complex) && \
366
RUN_TEST(FNC(1.l, ldc), long double complex) && \
367
RUN_TEST(FNC(1., ldc), long double complex) && \
368
RUN_TEST(FNC(1.f, ldc), long double complex) && \
369
RUN_TEST(FNC(1, ldc), long double complex) && \
370
RUN_TEST(FNC(ld, dc), long double complex) && \
371
RUN_TEST(FNC(ld, fc), long double complex) && \
372
RUN_TEST(FNC(I, 1.l), long double complex) && \
373
RUN_TEST(FNC(dc, 1.l), long double complex) && \
374
n_long_double_complex == 17 && \
375
RUN_TEST(FNC(dc, dc), double complex) && \
376
RUN_TEST(FNC(dc, fc), double complex) && \
377
RUN_TEST(FNC(dc, d), double complex) && \
378
RUN_TEST(FNC(dc, f), double complex) && \
379
RUN_TEST(FNC(dc, ull), double complex) && \
380
RUN_TEST(FNC(I, dc), double complex) && \
381
RUN_TEST(FNC(1., dc), double complex) && \
382
RUN_TEST(FNC(1, dc), double complex) && \
383
RUN_TEST(FNC(fc, d), double complex) && \
384
RUN_TEST(FNC(1, I), double complex) && \
385
n_double_complex == 10 && \
386
RUN_TEST(FNC(fc, fc), float complex) && \
387
RUN_TEST(FNC(fc, I), float complex) && \
388
RUN_TEST(FNC(1.f, fc), float complex) && \
389
n_float_complex == 3
390
391
int failed = 0;
392
#define PRINT(STR, X) do { \
393
currtest++; \
394
int result = (X); \
395
if (!result) \
396
failed = 1; \
397
printf("%s %d - %s\n", result ? "ok" : "not ok", currtest, (STR)); \
398
fflush(stdout); \
399
} while (0)
400
401
int
402
main(void)
403
{
404
printf("1..60\n");
405
406
/* 7.22#4 */
407
PRINT("acos",
408
PASS_REAL_ARG_REAL_RET(acos) &&
409
PASS_COMPLEX_ARG_COMPLEX_RET(acos));
410
411
PRINT("asin",
412
PASS_REAL_ARG_REAL_RET(asin) &&
413
PASS_COMPLEX_ARG_COMPLEX_RET(asin));
414
415
PRINT("atan",
416
PASS_REAL_ARG_REAL_RET(atan) &&
417
PASS_COMPLEX_ARG_COMPLEX_RET(atan));
418
419
PRINT("acosh",
420
PASS_REAL_ARG_REAL_RET(acosh) &&
421
PASS_COMPLEX_ARG_COMPLEX_RET(acosh));
422
423
PRINT("asinh",
424
PASS_REAL_ARG_REAL_RET(asinh) &&
425
PASS_COMPLEX_ARG_COMPLEX_RET(asinh));
426
427
PRINT("atanh",
428
PASS_REAL_ARG_REAL_RET(atanh) &&
429
PASS_COMPLEX_ARG_COMPLEX_RET(atanh));
430
431
PRINT("cos",
432
PASS_REAL_ARG_REAL_RET(cos) &&
433
PASS_COMPLEX_ARG_COMPLEX_RET(cos));
434
435
PRINT("sin",
436
PASS_REAL_ARG_REAL_RET(sin) &&
437
PASS_COMPLEX_ARG_COMPLEX_RET(sin));
438
439
PRINT("tan",
440
PASS_REAL_ARG_REAL_RET(tan) &&
441
PASS_COMPLEX_ARG_COMPLEX_RET(tan));
442
443
PRINT("cosh",
444
PASS_REAL_ARG_REAL_RET(cosh) &&
445
PASS_COMPLEX_ARG_COMPLEX_RET(cosh));
446
447
PRINT("sinh",
448
PASS_REAL_ARG_REAL_RET(sinh) &&
449
PASS_COMPLEX_ARG_COMPLEX_RET(sinh));
450
451
PRINT("tanh",
452
PASS_REAL_ARG_REAL_RET(tanh) &&
453
PASS_COMPLEX_ARG_COMPLEX_RET(tanh));
454
455
PRINT("exp",
456
PASS_REAL_ARG_REAL_RET(exp) &&
457
PASS_COMPLEX_ARG_COMPLEX_RET(exp));
458
459
PRINT("log",
460
PASS_REAL_ARG_REAL_RET(log) &&
461
PASS_COMPLEX_ARG_COMPLEX_RET(log));
462
463
PRINT("pow",
464
PASS_REAL_REAL_ARG_REAL_RET(pow) &&
465
PASS_COMPLEX_COMPLEX_ARG_COMPLEX_RET(pow));
466
467
PRINT("sqrt",
468
PASS_REAL_ARG_REAL_RET(sqrt) &&
469
PASS_COMPLEX_ARG_COMPLEX_RET(sqrt));
470
471
PRINT("fabs",
472
PASS_REAL_ARG_REAL_RET(fabs) &&
473
PASS_COMPLEX_ARG_REAL_RET(fabs));
474
475
/* 7.22#5 */
476
PRINT("atan2",
477
PASS_REAL_REAL_ARG_REAL_RET(atan2));
478
479
PRINT("cbrt",
480
PASS_REAL_ARG_REAL_RET(cbrt));
481
482
PRINT("ceil",
483
PASS_REAL_ARG_REAL_RET(ceil));
484
485
PRINT("copysign",
486
PASS_REAL_REAL_ARG_REAL_RET(copysign));
487
488
PRINT("erf",
489
PASS_REAL_ARG_REAL_RET(erf));
490
491
PRINT("erfc",
492
PASS_REAL_ARG_REAL_RET(erfc));
493
494
PRINT("exp2",
495
PASS_REAL_ARG_REAL_RET(exp2));
496
497
PRINT("expm1",
498
PASS_REAL_ARG_REAL_RET(expm1));
499
500
PRINT("fdim",
501
PASS_REAL_REAL_ARG_REAL_RET(fdim));
502
503
PRINT("floor",
504
PASS_REAL_ARG_REAL_RET(floor));
505
506
PRINT("fma",
507
PASS_REAL_REAL_REAL_ARG_REAL_RET(fma));
508
509
PRINT("fmax",
510
PASS_REAL_REAL_ARG_REAL_RET(fmax));
511
512
PRINT("fmin",
513
PASS_REAL_REAL_ARG_REAL_RET(fmin));
514
515
PRINT("fmod",
516
PASS_REAL_REAL_ARG_REAL_RET(fmod));
517
518
PRINT("frexp",
519
PASS_REAL_FIXED_ARG_REAL_RET(frexp, &i));
520
521
PRINT("hypot",
522
PASS_REAL_REAL_ARG_REAL_RET(hypot));
523
524
PRINT("ilogb",
525
PASS_REAL_ARG_FIXED_RET(ilogb, int));
526
527
PRINT("ldexp",
528
PASS_REAL_FIXED_ARG_REAL_RET(ldexp, 1) &&
529
PASS_REAL_FIXED_ARG_REAL_RET(ldexp, ld) &&
530
PASS_REAL_FIXED_ARG_REAL_RET(ldexp, ldc));
531
532
PRINT("lgamma",
533
PASS_REAL_ARG_REAL_RET(lgamma));
534
535
PRINT("llrint",
536
PASS_REAL_ARG_FIXED_RET(llrint, long long));
537
538
PRINT("llround",
539
PASS_REAL_ARG_FIXED_RET(llround, long long));
540
541
PRINT("log10",
542
PASS_REAL_ARG_REAL_RET(log10));
543
544
PRINT("log1p",
545
PASS_REAL_ARG_REAL_RET(log1p));
546
547
PRINT("log2",
548
PASS_REAL_ARG_REAL_RET(log2));
549
550
PRINT("logb",
551
PASS_REAL_ARG_REAL_RET(logb));
552
553
PRINT("lrint",
554
PASS_REAL_ARG_FIXED_RET(lrint, long));
555
556
PRINT("lround",
557
PASS_REAL_ARG_FIXED_RET(lround, long));
558
559
PRINT("nearbyint",
560
PASS_REAL_ARG_REAL_RET(nearbyint));
561
562
PRINT("nextafter",
563
PASS_REAL_REAL_ARG_REAL_RET(nextafter));
564
565
PRINT("nexttoward",
566
PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, 1) &&
567
PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, ull) &&
568
PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, d) &&
569
PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, fc));
570
571
PRINT("remainder",
572
PASS_REAL_REAL_ARG_REAL_RET(remainder));
573
574
PRINT("remquo",
575
PASS_REAL_REAL_FIXED_ARG_REAL_RET(remquo, &i));
576
577
PRINT("rint",
578
PASS_REAL_ARG_REAL_RET(rint));
579
580
PRINT("round",
581
PASS_REAL_ARG_REAL_RET(round));
582
583
PRINT("scalbn",
584
PASS_REAL_FIXED_ARG_REAL_RET(scalbn, 1) &&
585
PASS_REAL_FIXED_ARG_REAL_RET(scalbn, b) &&
586
PASS_REAL_FIXED_ARG_REAL_RET(scalbn, I));
587
588
PRINT("scalbln",
589
PASS_REAL_FIXED_ARG_REAL_RET(scalbln, i) &&
590
PASS_REAL_FIXED_ARG_REAL_RET(scalbln, 1.l) &&
591
PASS_REAL_FIXED_ARG_REAL_RET(scalbln, dc));
592
593
PRINT("tgamma",
594
PASS_REAL_ARG_REAL_RET(tgamma));
595
596
PRINT("trunc",
597
PASS_REAL_ARG_REAL_RET(trunc));
598
599
/* 7.22#6 */
600
PRINT("carg",
601
PASS_REAL_ARG_REAL_RET_(carg, _complex) &&
602
PASS_COMPLEX_ARG_REAL_RET(carg));
603
604
PRINT("cimag",
605
PASS_REAL_ARG_REAL_RET_(cimag, _complex) &&
606
PASS_COMPLEX_ARG_REAL_RET(cimag));
607
608
PRINT("conj",
609
PASS_REAL_ARG_COMPLEX_RET(conj) &&
610
PASS_COMPLEX_ARG_COMPLEX_RET(conj));
611
612
PRINT("cproj",
613
PASS_REAL_ARG_COMPLEX_RET(cproj) &&
614
PASS_COMPLEX_ARG_COMPLEX_RET(cproj));
615
616
PRINT("creal",
617
PASS_REAL_ARG_REAL_RET_(creal, _complex) &&
618
PASS_COMPLEX_ARG_REAL_RET(creal));
619
}
620
621