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