xref: /freebsd/tools/regression/include/tgmath/tgmath.c (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
127fdb57eSStefan Farfeleder /*-
227fdb57eSStefan Farfeleder  * Copyright (c) 2004 Stefan Farfeleder <stefanf@FreeBSD.org>
327fdb57eSStefan Farfeleder  * All rights reserved.
427fdb57eSStefan Farfeleder  *
527fdb57eSStefan Farfeleder  * Redistribution and use in source and binary forms, with or without
627fdb57eSStefan Farfeleder  * modification, are permitted provided that the following conditions
727fdb57eSStefan Farfeleder  * are met:
827fdb57eSStefan Farfeleder  * 1. Redistributions of source code must retain the above copyright
927fdb57eSStefan Farfeleder  *    notice, this list of conditions and the following disclaimer.
1027fdb57eSStefan Farfeleder  * 2. Redistributions in binary form must reproduce the above copyright
1127fdb57eSStefan Farfeleder  *    notice, this list of conditions and the following disclaimer in the
1227fdb57eSStefan Farfeleder  *    documentation and/or other materials provided with the distribution.
1327fdb57eSStefan Farfeleder  *
1427fdb57eSStefan Farfeleder  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1527fdb57eSStefan Farfeleder  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1627fdb57eSStefan Farfeleder  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1727fdb57eSStefan Farfeleder  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1827fdb57eSStefan Farfeleder  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1927fdb57eSStefan Farfeleder  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2027fdb57eSStefan Farfeleder  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2127fdb57eSStefan Farfeleder  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2227fdb57eSStefan Farfeleder  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2327fdb57eSStefan Farfeleder  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2427fdb57eSStefan Farfeleder  * SUCH DAMAGE.
2527fdb57eSStefan Farfeleder  */
2627fdb57eSStefan Farfeleder 
2727fdb57eSStefan Farfeleder #include <sys/cdefs.h>
2827fdb57eSStefan Farfeleder /* All of our functions have side effects, __pure2 causes functions calls to
2927fdb57eSStefan Farfeleder  * be optimised away.  Stop that. */
3027fdb57eSStefan Farfeleder #undef __pure2
3127fdb57eSStefan Farfeleder #define	__pure2
3227fdb57eSStefan Farfeleder 
3327fdb57eSStefan Farfeleder #include <assert.h>
3427fdb57eSStefan Farfeleder #include <stdio.h>
3527fdb57eSStefan Farfeleder #include <tgmath.h>
3627fdb57eSStefan Farfeleder 
3727fdb57eSStefan Farfeleder int n_float, n_double, n_long_double;
3827fdb57eSStefan Farfeleder int n_float_complex, n_double_complex, n_long_double_complex;
3927fdb57eSStefan Farfeleder 
4000e13b1dSNik Clayton int currtest = 0;
4100e13b1dSNik Clayton 
4227fdb57eSStefan Farfeleder #define	TGMACRO(FNC)							\
4327fdb57eSStefan Farfeleder 	TGMACRO_REAL(FNC)						\
4427fdb57eSStefan Farfeleder 	TGMACRO_COMPLEX(c ## FNC)
4527fdb57eSStefan Farfeleder 
4627fdb57eSStefan Farfeleder #define	TGMACRO_REAL(FNC)						\
4727fdb57eSStefan Farfeleder 	float (FNC ## f)(float x) { n_float++; }			\
4827fdb57eSStefan Farfeleder 	double (FNC)(double x) { n_double++; }				\
4927fdb57eSStefan Farfeleder 	long double (FNC ## l)(long double x) { n_long_double++; }
5027fdb57eSStefan Farfeleder 
5127fdb57eSStefan Farfeleder #define	TGMACRO_REAL_REAL(FNC)						\
5227fdb57eSStefan Farfeleder 	float (FNC ## f)(float x, float y) { n_float++; }		\
5327fdb57eSStefan Farfeleder 	double (FNC)(double x, double y) { n_double++; }		\
5427fdb57eSStefan Farfeleder 	long double							\
5527fdb57eSStefan Farfeleder 	(FNC ## l)(long double x, long double y) { n_long_double++; }
5627fdb57eSStefan Farfeleder 
5727fdb57eSStefan Farfeleder #define	TGMACRO_REAL_FIXED_RET(FNC, TYPE)				\
5827fdb57eSStefan Farfeleder 	TYPE (FNC ## f)(float x) { n_float++; }				\
5927fdb57eSStefan Farfeleder 	TYPE (FNC)(double x) { n_double++; }				\
6027fdb57eSStefan Farfeleder 	TYPE (FNC ## l)(long double x) { n_long_double++; }
6127fdb57eSStefan Farfeleder 
6227fdb57eSStefan Farfeleder #define	TGMACRO_COMPLEX(FNC)						\
6327fdb57eSStefan Farfeleder 	float complex (FNC ## f)(float complex x) { n_float_complex++; }\
6427fdb57eSStefan Farfeleder 	double complex (FNC)(double complex x) { n_double_complex++; }	\
6527fdb57eSStefan Farfeleder 	long double complex						\
6627fdb57eSStefan Farfeleder 	(FNC ## l)(long double complex x) { n_long_double_complex++; }
6727fdb57eSStefan Farfeleder 
6827fdb57eSStefan Farfeleder #define	TGMACRO_COMPLEX_REAL_RET(FNC)					\
6927fdb57eSStefan Farfeleder 	float (FNC ## f)(float complex x) { n_float_complex++; }	\
7027fdb57eSStefan Farfeleder 	double (FNC)(double complex x) { n_double_complex++; }		\
7127fdb57eSStefan Farfeleder 	long double							\
7227fdb57eSStefan Farfeleder 	(FNC ## l)(long double complex x) { n_long_double_complex++; }
7327fdb57eSStefan Farfeleder 
7427fdb57eSStefan Farfeleder 
7527fdb57eSStefan Farfeleder /* 7.22#4 */
7627fdb57eSStefan Farfeleder TGMACRO(acos)
TGMACRO(asin)7727fdb57eSStefan Farfeleder TGMACRO(asin)
7827fdb57eSStefan Farfeleder TGMACRO(atan)
7927fdb57eSStefan Farfeleder TGMACRO(acosh)
8027fdb57eSStefan Farfeleder TGMACRO(asinh)
8127fdb57eSStefan Farfeleder TGMACRO(atanh)
8227fdb57eSStefan Farfeleder TGMACRO(cos)
8327fdb57eSStefan Farfeleder TGMACRO(sin)
8427fdb57eSStefan Farfeleder TGMACRO(tan)
8527fdb57eSStefan Farfeleder TGMACRO(cosh)
8627fdb57eSStefan Farfeleder TGMACRO(sinh)
8727fdb57eSStefan Farfeleder TGMACRO(tanh)
8827fdb57eSStefan Farfeleder TGMACRO(exp)
8927fdb57eSStefan Farfeleder TGMACRO(log)
9027fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(pow)
9127fdb57eSStefan Farfeleder float complex (cpowf)(float complex x, float complex y) { n_float_complex++; }
complex(cpow)9227fdb57eSStefan Farfeleder double complex
9327fdb57eSStefan Farfeleder (cpow)(double complex x, double complex y) { n_double_complex++; }
complex(cpowl)9427fdb57eSStefan Farfeleder long double complex
9527fdb57eSStefan Farfeleder (cpowl)(long double complex x, long double complex y)
9627fdb57eSStefan Farfeleder { n_long_double_complex++; }
9727fdb57eSStefan Farfeleder TGMACRO(sqrt)
TGMACRO_REAL(fabs)9827fdb57eSStefan Farfeleder TGMACRO_REAL(fabs)
9927fdb57eSStefan Farfeleder TGMACRO_COMPLEX_REAL_RET(cabs)
10027fdb57eSStefan Farfeleder 
10127fdb57eSStefan Farfeleder /* 7.22#5 */
10227fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(atan2)
10327fdb57eSStefan Farfeleder TGMACRO_REAL(cbrt)
10427fdb57eSStefan Farfeleder TGMACRO_REAL(ceil)
10527fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(copysign)
10627fdb57eSStefan Farfeleder TGMACRO_REAL(erf)
10727fdb57eSStefan Farfeleder TGMACRO_REAL(erfc)
10827fdb57eSStefan Farfeleder TGMACRO_REAL(exp2)
10927fdb57eSStefan Farfeleder TGMACRO_REAL(expm1)
11027fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(fdim)
11127fdb57eSStefan Farfeleder TGMACRO_REAL(floor)
11227fdb57eSStefan Farfeleder float (fmaf)(float x, float y, float z) { n_float++; }
11327fdb57eSStefan Farfeleder double (fma)(double x, double y, double z) { n_double++; }
11427fdb57eSStefan Farfeleder long double
11527fdb57eSStefan Farfeleder (fmal)(long double x, long double y, long double z) { n_long_double++; }
11627fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(fmax)
TGMACRO_REAL_REAL(fmin)11727fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(fmin)
11827fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(fmod)
11927fdb57eSStefan Farfeleder float (frexpf)(float x, int *e) { n_float++; }
12027fdb57eSStefan Farfeleder double (frexp)(double x, int *e) { n_double++; }
12127fdb57eSStefan Farfeleder long double (frexpl)(long double x, int *e) { n_long_double++; }
12227fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(hypot)
TGMACRO_REAL_FIXED_RET(ilogb,int)12327fdb57eSStefan Farfeleder TGMACRO_REAL_FIXED_RET(ilogb, int)
12427fdb57eSStefan Farfeleder float (ldexpf)(float x, int e) { n_float++; }
12527fdb57eSStefan Farfeleder double (ldexp)(double x, int e) { n_double++; }
12627fdb57eSStefan Farfeleder long double (ldexpl)(long double x, int e) { n_long_double++; }
12727fdb57eSStefan Farfeleder TGMACRO_REAL(lgamma)
TGMACRO_REAL_FIXED_RET(llrint,long long)12827fdb57eSStefan Farfeleder TGMACRO_REAL_FIXED_RET(llrint, long long)
12927fdb57eSStefan Farfeleder TGMACRO_REAL_FIXED_RET(llround, long long)
13027fdb57eSStefan Farfeleder TGMACRO_REAL(log10)
13127fdb57eSStefan Farfeleder TGMACRO_REAL(log1p)
13227fdb57eSStefan Farfeleder TGMACRO_REAL(log2)
13327fdb57eSStefan Farfeleder TGMACRO_REAL(logb)
13427fdb57eSStefan Farfeleder TGMACRO_REAL_FIXED_RET(lrint, long)
13527fdb57eSStefan Farfeleder TGMACRO_REAL_FIXED_RET(lround, long)
13627fdb57eSStefan Farfeleder TGMACRO_REAL(nearbyint)
13727fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(nextafter)
13827fdb57eSStefan Farfeleder float (nexttowardf)(float x, long double y) { n_float++; }
13927fdb57eSStefan Farfeleder double (nexttoward)(double x, long double y) { n_double++; }
14027fdb57eSStefan Farfeleder long double (nexttowardl)(long double x, long double y) { n_long_double++; }
TGMACRO_REAL_REAL(remainder)14127fdb57eSStefan Farfeleder TGMACRO_REAL_REAL(remainder)
14227fdb57eSStefan Farfeleder float (remquof)(float x, float y, int *q) { n_float++; }
14327fdb57eSStefan Farfeleder double (remquo)(double x, double y, int *q) { n_double++; }
14427fdb57eSStefan Farfeleder long double (remquol)(long double x, long double y, int *q) { n_long_double++; }
14527fdb57eSStefan Farfeleder TGMACRO_REAL(rint)
TGMACRO_REAL(round)14627fdb57eSStefan Farfeleder TGMACRO_REAL(round)
14727fdb57eSStefan Farfeleder float (scalbnf)(float x, int n) { n_float++; }
14827fdb57eSStefan Farfeleder double (scalbn)(double x, int n) { n_double++; }
14927fdb57eSStefan Farfeleder long double (scalbnl)(long double x, int n) { n_long_double++; }
15027fdb57eSStefan Farfeleder float (scalblnf)(float x, long n) { n_float++; }
15127fdb57eSStefan Farfeleder double (scalbln)(double x, long n) { n_double++; }
15227fdb57eSStefan Farfeleder long double (scalblnl)(long double x, long n) { n_long_double++; }
15327fdb57eSStefan Farfeleder TGMACRO_REAL(tgamma)
15427fdb57eSStefan Farfeleder TGMACRO_REAL(trunc)
15527fdb57eSStefan Farfeleder 
15627fdb57eSStefan Farfeleder /* 7.22#6 */
15727fdb57eSStefan Farfeleder TGMACRO_COMPLEX_REAL_RET(carg)
15827fdb57eSStefan Farfeleder TGMACRO_COMPLEX_REAL_RET(cimag)
15927fdb57eSStefan Farfeleder TGMACRO_COMPLEX(conj)
16027fdb57eSStefan Farfeleder TGMACRO_COMPLEX(cproj)
16127fdb57eSStefan Farfeleder TGMACRO_COMPLEX_REAL_RET(creal)
16227fdb57eSStefan Farfeleder 
16327fdb57eSStefan Farfeleder 
16427fdb57eSStefan Farfeleder long double ld;
16527fdb57eSStefan Farfeleder double d;
16627fdb57eSStefan Farfeleder float f;
16727fdb57eSStefan Farfeleder long double complex ldc;
16827fdb57eSStefan Farfeleder double complex dc;
16927fdb57eSStefan Farfeleder float complex fc;
17027fdb57eSStefan Farfeleder unsigned long long ull;
17127fdb57eSStefan Farfeleder int i;
17227fdb57eSStefan Farfeleder _Bool b;
17327fdb57eSStefan Farfeleder 
17427fdb57eSStefan Farfeleder #define	SAMETYPE(EXP, TYPE)						\
17527fdb57eSStefan Farfeleder 	__builtin_types_compatible_p(__typeof__(EXP), TYPE)
17627fdb57eSStefan Farfeleder 
17727fdb57eSStefan Farfeleder #define	CLEAR_COUNTERS							\
17827fdb57eSStefan Farfeleder 	(n_float = n_double = n_long_double = 0,			\
17927fdb57eSStefan Farfeleder 	    n_float_complex = n_double_complex = n_long_double_complex = 0, 1)
18027fdb57eSStefan Farfeleder 
18127fdb57eSStefan Farfeleder #define	RUN_TEST(EXP, TYPE)	(EXP, SAMETYPE(EXP, TYPE))
18227fdb57eSStefan Farfeleder 
18327fdb57eSStefan Farfeleder #define	PASS_REAL_ARG_REAL_RET(FNC) PASS_REAL_ARG_REAL_RET_(FNC,)
18427fdb57eSStefan Farfeleder 
18527fdb57eSStefan Farfeleder #define	PASS_REAL_ARG_REAL_RET_(FNC, SUFFIX)				\
18627fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
18727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l), long double) &&				\
18827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ld), long double) &&				\
18927fdb57eSStefan Farfeleder 	n_long_double ## SUFFIX == 2 &&					\
19027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.), double) &&					\
19127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d), double) &&					\
19227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1ull), double) &&					\
19327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ull), double) &&					\
19427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1), double) &&					\
19527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(i), double) &&					\
19627fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0), double) &&				\
19727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(b), double) &&					\
19827fdb57eSStefan Farfeleder 	n_double ## SUFFIX == 8 &&					\
19927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f), float) &&					\
20027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f), float) &&					\
20127fdb57eSStefan Farfeleder 	n_float ## SUFFIX == 2
20227fdb57eSStefan Farfeleder 
20327fdb57eSStefan Farfeleder #define	PASS_REAL_ARG_FIXED_RET(FNC, RET)				\
20427fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
20527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l), RET) &&					\
20627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ld), RET) &&					\
20727fdb57eSStefan Farfeleder 	n_long_double == 2 &&						\
20827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.), RET) &&					\
20927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d), RET) &&					\
21027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1ull), RET) &&					\
21127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ull), RET) &&					\
21227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1), RET) &&					\
21327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(i), RET) &&					\
21427fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0), RET) &&					\
21527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(b), RET) &&					\
21627fdb57eSStefan Farfeleder 	n_double == 8 &&						\
21727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f), RET) &&					\
21827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f), RET) &&					\
21927fdb57eSStefan Farfeleder 	n_float == 2
22027fdb57eSStefan Farfeleder 
22127fdb57eSStefan Farfeleder #define	PASS_REAL_FIXED_ARG_REAL_RET(FNC, ARG2)				\
22227fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
22327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, ARG2), long double) &&			\
22427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ld, ARG2), long double) &&				\
22527fdb57eSStefan Farfeleder 	n_long_double == 2 &&						\
22627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1., ARG2), double) &&				\
22727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, ARG2), double) &&				\
22827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1ull, ARG2), double) &&				\
22927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ull, ARG2), double) &&				\
23027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, ARG2), double) &&				\
23127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(i, ARG2), double) &&				\
23227fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0, ARG2), double) &&			\
23327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(b, ARG2), double) &&				\
23427fdb57eSStefan Farfeleder 	n_double == 8 &&						\
23527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, ARG2), float) &&				\
23627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, ARG2), float) &&				\
23727fdb57eSStefan Farfeleder 	n_float == 2
23827fdb57eSStefan Farfeleder 
23927fdb57eSStefan Farfeleder #define	PASS_REAL_REAL_ARG_REAL_RET(FNC)				\
24027fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
24127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1.l), long double) &&				\
24227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1.), long double) &&				\
24327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1.f), long double) &&				\
24427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1), long double) &&				\
24527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, (_Bool)0), long double) &&			\
24627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, ld), long double) &&				\
24727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1., ld), long double) &&				\
24827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, ld), long double) &&				\
24927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, ld), long double) &&				\
25027fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0, ld), long double) &&			\
25127fdb57eSStefan Farfeleder 	n_long_double == 10 &&						\
25227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, 1.), double) &&					\
25327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, 1.f), double) &&				\
25427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, 1l), double) &&					\
25527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, (_Bool)0), double) &&				\
25627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1., 1.), double) &&				\
25727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, 1.), double) &&				\
25827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1l, 1.), double) &&				\
25927fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0, 1.), double) &&				\
26027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1ull, f), double) &&				\
26127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, ull), double) &&				\
26227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, 1l), double) &&					\
26327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1u, i), double) &&					\
26427fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0, 1.f), double) &&				\
26527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, b), double) &&				\
26627fdb57eSStefan Farfeleder 	n_double == 14 &&						\
26727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, 1.f), float) &&				\
26827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, 1.f), float) &&				\
26927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, 1.f), float) &&					\
27027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, f), float) &&					\
27127fdb57eSStefan Farfeleder 	n_float == 4
27227fdb57eSStefan Farfeleder 
27327fdb57eSStefan Farfeleder #define	PASS_REAL_REAL_FIXED_ARG_REAL_RET(FNC, ARG3)			\
27427fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
27527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1.l, ARG3), long double) &&			\
27627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1., ARG3), long double) &&			\
27727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1.f, ARG3), long double) &&			\
27827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, 1, ARG3), long double) &&			\
27927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, (_Bool)0, ARG3), long double) &&		\
28027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, ld, ARG3), long double) &&			\
28127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1., ld, ARG3), long double) &&			\
28227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, ld, ARG3), long double) &&			\
28327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, ld, ARG3), long double) &&			\
28427fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0, ld, ARG3), long double) &&		\
28527fdb57eSStefan Farfeleder 	n_long_double == 10 &&						\
28627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, 1., ARG3), double) &&				\
28727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, 1.f, ARG3), double) &&				\
28827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, 1l, ARG3), double) &&				\
28927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d, (_Bool)0, ARG3), double) &&			\
29027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1., 1., ARG3), double) &&				\
29127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, 1., ARG3), double) &&				\
29227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1l, 1., ARG3), double) &&				\
29327fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0, 1., ARG3), double) &&			\
29427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1ull, f, ARG3), double) &&				\
29527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, ull, ARG3), double) &&			\
29627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, 1l, ARG3), double) &&				\
29727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1u, i, ARG3), double) &&				\
29827fdb57eSStefan Farfeleder 	RUN_TEST(FNC((_Bool)0, 1.f, ARG3), double) &&			\
29927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, b, ARG3), double) &&				\
30027fdb57eSStefan Farfeleder 	n_double == 14 &&						\
30127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, 1.f, ARG3), float) &&				\
30227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, 1.f, ARG3), float) &&				\
30327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, 1.f, ARG3), float) &&				\
30427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, f, ARG3), float) &&				\
30527fdb57eSStefan Farfeleder 	n_float == 4
30627fdb57eSStefan Farfeleder 
30727fdb57eSStefan Farfeleder #define	PASS_REAL_REAL_REAL_ARG_REAL_RET(FNC)				\
30827fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
30927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ld, d, f), long double) &&				\
31027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, ld, ld), long double) &&			\
31127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, d, ld), long double) &&				\
31227fdb57eSStefan Farfeleder 	n_long_double == 3 &&						\
31327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, f, 1.f), double) &&				\
31427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, d, 1.f), double) &&				\
31527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, 1.f, 1.), double) &&				\
31627fdb57eSStefan Farfeleder 	n_double == 3 &&						\
31727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f, 1.f, f), float) &&				\
31827fdb57eSStefan Farfeleder 	n_float == 1
31927fdb57eSStefan Farfeleder 
32027fdb57eSStefan Farfeleder #define	PASS_REAL_ARG_COMPLEX_RET(FNC)					\
32127fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
32227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l), long double complex) &&			\
32327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ld), long double complex) &&			\
32427fdb57eSStefan Farfeleder 	n_long_double_complex == 2 &&					\
32527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.), double complex) &&				\
32627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(d), double complex) &&				\
32727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1l), double complex) &&				\
32827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(i), double complex) &&				\
32927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(b), double complex) &&				\
33027fdb57eSStefan Farfeleder 	n_double_complex == 5 &&					\
33127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f), float complex) &&				\
33227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(f), float complex) &&				\
33327fdb57eSStefan Farfeleder 	n_float_complex == 2
33427fdb57eSStefan Farfeleder 
33527fdb57eSStefan Farfeleder #define	PASS_COMPLEX_ARG_COMPLEX_RET(FNC)				\
33627fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
33727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc), long double complex) &&			\
33827fdb57eSStefan Farfeleder 	n_long_double_complex == 1 &&					\
33927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc), double complex) &&				\
34027fdb57eSStefan Farfeleder 	n_double_complex == 1 &&					\
34127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(fc), float complex) &&				\
34227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(I), float complex) &&				\
34327fdb57eSStefan Farfeleder 	n_float_complex == 2
34427fdb57eSStefan Farfeleder 
34527fdb57eSStefan Farfeleder #define	PASS_COMPLEX_ARG_REAL_RET(FNC)					\
34627fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
34727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc), long double) &&				\
34827fdb57eSStefan Farfeleder 	n_long_double_complex == 1 &&					\
34927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc), double) &&					\
35027fdb57eSStefan Farfeleder 	n_double_complex == 1 &&					\
35127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(fc), float) &&					\
35227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(I), float) &&					\
35327fdb57eSStefan Farfeleder 	n_float_complex == 2
35427fdb57eSStefan Farfeleder 
35527fdb57eSStefan Farfeleder #define	PASS_COMPLEX_COMPLEX_ARG_COMPLEX_RET(FNC)			\
35627fdb57eSStefan Farfeleder 	CLEAR_COUNTERS &&						\
35727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc, ldc), long double complex) &&			\
35827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc, dc), long double complex) &&			\
35927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc, fc), long double complex) &&			\
36027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc, ld), long double complex) &&			\
36127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc, d), long double complex) &&			\
36227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc, f), long double complex) &&			\
36327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ldc, i), long double complex) &&			\
36427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc, ldc), long double complex) &&			\
36527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(I, ldc), long double complex) &&			\
36627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.l, ldc), long double complex) &&			\
36727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1., ldc), long double complex) &&			\
36827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, ldc), long double complex) &&			\
36927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, ldc), long double complex) &&			\
37027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ld, dc), long double complex) &&			\
37127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(ld, fc), long double complex) &&			\
37227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(I, 1.l), long double complex) &&			\
37327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc, 1.l), long double complex) &&			\
37427fdb57eSStefan Farfeleder 	n_long_double_complex == 17 &&					\
37527fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc, dc), double complex) &&			\
37627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc, fc), double complex) &&			\
37727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc, d), double complex) &&				\
37827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc, f), double complex) &&				\
37927fdb57eSStefan Farfeleder 	RUN_TEST(FNC(dc, ull), double complex) &&			\
38027fdb57eSStefan Farfeleder 	RUN_TEST(FNC(I, dc), double complex) &&				\
38127fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1., dc), double complex) &&			\
38227fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, dc), double complex) &&				\
38327fdb57eSStefan Farfeleder 	RUN_TEST(FNC(fc, d), double complex) &&				\
38427fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1, I), double complex) &&				\
38527fdb57eSStefan Farfeleder 	n_double_complex == 10 &&					\
38627fdb57eSStefan Farfeleder 	RUN_TEST(FNC(fc, fc), float complex) &&				\
38727fdb57eSStefan Farfeleder 	RUN_TEST(FNC(fc, I), float complex) &&				\
38827fdb57eSStefan Farfeleder 	RUN_TEST(FNC(1.f, fc), float complex) &&			\
38927fdb57eSStefan Farfeleder 	n_float_complex == 3
39027fdb57eSStefan Farfeleder 
39127fdb57eSStefan Farfeleder int failed = 0;
39227fdb57eSStefan Farfeleder #define	PRINT(STR, X) do {						\
39300e13b1dSNik Clayton 	currtest++;							\
39427fdb57eSStefan Farfeleder 	int result = (X);						\
39527fdb57eSStefan Farfeleder 	if (!result)							\
39627fdb57eSStefan Farfeleder 		failed = 1;						\
39700e13b1dSNik Clayton 	printf("%s %d - %s\n", result ? "ok" : "not ok", currtest, (STR));		\
39800e13b1dSNik Clayton 	fflush(stdout);							\
39927fdb57eSStefan Farfeleder } while (0)
40027fdb57eSStefan Farfeleder 
40127fdb57eSStefan Farfeleder int
main(void)40227fdb57eSStefan Farfeleder main(void)
40327fdb57eSStefan Farfeleder {
40400e13b1dSNik Clayton 	printf("1..60\n");
40500e13b1dSNik Clayton 
40627fdb57eSStefan Farfeleder 	/* 7.22#4 */
40727fdb57eSStefan Farfeleder 	PRINT("acos",
40827fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(acos) &&
40927fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(acos));
41027fdb57eSStefan Farfeleder 
41127fdb57eSStefan Farfeleder 	PRINT("asin",
41227fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(asin) &&
41327fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(asin));
41427fdb57eSStefan Farfeleder 
41527fdb57eSStefan Farfeleder 	PRINT("atan",
41627fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(atan) &&
41727fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(atan));
41827fdb57eSStefan Farfeleder 
41927fdb57eSStefan Farfeleder 	PRINT("acosh",
42027fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(acosh) &&
42127fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(acosh));
42227fdb57eSStefan Farfeleder 
42327fdb57eSStefan Farfeleder 	PRINT("asinh",
42427fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(asinh) &&
42527fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(asinh));
42627fdb57eSStefan Farfeleder 
42727fdb57eSStefan Farfeleder 	PRINT("atanh",
42827fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(atanh) &&
42927fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(atanh));
43027fdb57eSStefan Farfeleder 
43127fdb57eSStefan Farfeleder 	PRINT("cos",
43227fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(cos) &&
43327fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(cos));
43427fdb57eSStefan Farfeleder 
43527fdb57eSStefan Farfeleder 	PRINT("sin",
43627fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(sin) &&
43727fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(sin));
43827fdb57eSStefan Farfeleder 
43927fdb57eSStefan Farfeleder 	PRINT("tan",
44027fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(tan) &&
44127fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(tan));
44227fdb57eSStefan Farfeleder 
44327fdb57eSStefan Farfeleder 	PRINT("cosh",
44427fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(cosh) &&
44527fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(cosh));
44627fdb57eSStefan Farfeleder 
44727fdb57eSStefan Farfeleder 	PRINT("sinh",
44827fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(sinh) &&
44927fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(sinh));
45027fdb57eSStefan Farfeleder 
45127fdb57eSStefan Farfeleder 	PRINT("tanh",
45227fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(tanh) &&
45327fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(tanh));
45427fdb57eSStefan Farfeleder 
45527fdb57eSStefan Farfeleder 	PRINT("exp",
45627fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(exp) &&
45727fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(exp));
45827fdb57eSStefan Farfeleder 
45927fdb57eSStefan Farfeleder 	PRINT("log",
46027fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(log) &&
46127fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(log));
46227fdb57eSStefan Farfeleder 
46327fdb57eSStefan Farfeleder 	PRINT("pow",
46427fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(pow) &&
46527fdb57eSStefan Farfeleder 	    PASS_COMPLEX_COMPLEX_ARG_COMPLEX_RET(pow));
46627fdb57eSStefan Farfeleder 
46727fdb57eSStefan Farfeleder 	PRINT("sqrt",
46827fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(sqrt) &&
46927fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(sqrt));
47027fdb57eSStefan Farfeleder 
47127fdb57eSStefan Farfeleder 	PRINT("fabs",
47227fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(fabs) &&
47327fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_REAL_RET(fabs));
47427fdb57eSStefan Farfeleder 
47527fdb57eSStefan Farfeleder 	/* 7.22#5 */
47627fdb57eSStefan Farfeleder 	PRINT("atan2",
47727fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(atan2));
47827fdb57eSStefan Farfeleder 
47927fdb57eSStefan Farfeleder 	PRINT("cbrt",
48027fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(cbrt));
48127fdb57eSStefan Farfeleder 
48227fdb57eSStefan Farfeleder 	PRINT("ceil",
48327fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(ceil));
48427fdb57eSStefan Farfeleder 
48527fdb57eSStefan Farfeleder 	PRINT("copysign",
48627fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(copysign));
48727fdb57eSStefan Farfeleder 
48827fdb57eSStefan Farfeleder 	PRINT("erf",
48927fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(erf));
49027fdb57eSStefan Farfeleder 
49127fdb57eSStefan Farfeleder 	PRINT("erfc",
49227fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(erfc));
49327fdb57eSStefan Farfeleder 
49427fdb57eSStefan Farfeleder 	PRINT("exp2",
49527fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(exp2));
49627fdb57eSStefan Farfeleder 
49727fdb57eSStefan Farfeleder 	PRINT("expm1",
49827fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(expm1));
49927fdb57eSStefan Farfeleder 
50027fdb57eSStefan Farfeleder 	PRINT("fdim",
50127fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(fdim));
50227fdb57eSStefan Farfeleder 
50327fdb57eSStefan Farfeleder 	PRINT("floor",
50427fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(floor));
50527fdb57eSStefan Farfeleder 
50627fdb57eSStefan Farfeleder 	PRINT("fma",
50727fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_REAL_ARG_REAL_RET(fma));
50827fdb57eSStefan Farfeleder 
50927fdb57eSStefan Farfeleder 	PRINT("fmax",
51027fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(fmax));
51127fdb57eSStefan Farfeleder 
51227fdb57eSStefan Farfeleder 	PRINT("fmin",
51327fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(fmin));
51427fdb57eSStefan Farfeleder 
51527fdb57eSStefan Farfeleder 	PRINT("fmod",
51627fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(fmod));
51727fdb57eSStefan Farfeleder 
51827fdb57eSStefan Farfeleder 	PRINT("frexp",
51927fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(frexp, &i));
52027fdb57eSStefan Farfeleder 
52127fdb57eSStefan Farfeleder 	PRINT("hypot",
52227fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(hypot));
52327fdb57eSStefan Farfeleder 
52427fdb57eSStefan Farfeleder 	PRINT("ilogb",
52527fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_FIXED_RET(ilogb, int));
52627fdb57eSStefan Farfeleder 
52727fdb57eSStefan Farfeleder 	PRINT("ldexp",
52827fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(ldexp, 1) &&
52927fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(ldexp, ld) &&
53027fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(ldexp, ldc));
53127fdb57eSStefan Farfeleder 
53227fdb57eSStefan Farfeleder 	PRINT("lgamma",
53327fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(lgamma));
53427fdb57eSStefan Farfeleder 
53527fdb57eSStefan Farfeleder 	PRINT("llrint",
53627fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_FIXED_RET(llrint, long long));
53727fdb57eSStefan Farfeleder 
53827fdb57eSStefan Farfeleder 	PRINT("llround",
53927fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_FIXED_RET(llround, long long));
54027fdb57eSStefan Farfeleder 
54127fdb57eSStefan Farfeleder 	PRINT("log10",
54227fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(log10));
54327fdb57eSStefan Farfeleder 
54427fdb57eSStefan Farfeleder 	PRINT("log1p",
54527fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(log1p));
54627fdb57eSStefan Farfeleder 
54727fdb57eSStefan Farfeleder 	PRINT("log2",
54827fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(log2));
54927fdb57eSStefan Farfeleder 
55027fdb57eSStefan Farfeleder 	PRINT("logb",
55127fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(logb));
55227fdb57eSStefan Farfeleder 
55327fdb57eSStefan Farfeleder 	PRINT("lrint",
55427fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_FIXED_RET(lrint, long));
55527fdb57eSStefan Farfeleder 
55627fdb57eSStefan Farfeleder 	PRINT("lround",
55727fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_FIXED_RET(lround, long));
55827fdb57eSStefan Farfeleder 
55927fdb57eSStefan Farfeleder 	PRINT("nearbyint",
56027fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(nearbyint));
56127fdb57eSStefan Farfeleder 
56227fdb57eSStefan Farfeleder 	PRINT("nextafter",
56327fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(nextafter));
56427fdb57eSStefan Farfeleder 
56527fdb57eSStefan Farfeleder 	PRINT("nexttoward",
56627fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, 1) &&
56727fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, ull) &&
56827fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, d) &&
56927fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(nexttoward, fc));
57027fdb57eSStefan Farfeleder 
57127fdb57eSStefan Farfeleder 	PRINT("remainder",
57227fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_ARG_REAL_RET(remainder));
57327fdb57eSStefan Farfeleder 
57427fdb57eSStefan Farfeleder 	PRINT("remquo",
57527fdb57eSStefan Farfeleder 	    PASS_REAL_REAL_FIXED_ARG_REAL_RET(remquo, &i));
57627fdb57eSStefan Farfeleder 
57727fdb57eSStefan Farfeleder 	PRINT("rint",
57827fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(rint));
57927fdb57eSStefan Farfeleder 
58027fdb57eSStefan Farfeleder 	PRINT("round",
58127fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(round));
58227fdb57eSStefan Farfeleder 
58327fdb57eSStefan Farfeleder 	PRINT("scalbn",
58427fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(scalbn, 1) &&
58527fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(scalbn, b) &&
58627fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(scalbn, I));
58727fdb57eSStefan Farfeleder 
58827fdb57eSStefan Farfeleder 	PRINT("scalbln",
58927fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(scalbln, i) &&
59027fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(scalbln, 1.l) &&
59127fdb57eSStefan Farfeleder 	    PASS_REAL_FIXED_ARG_REAL_RET(scalbln, dc));
59227fdb57eSStefan Farfeleder 
59327fdb57eSStefan Farfeleder 	PRINT("tgamma",
59427fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(tgamma));
59527fdb57eSStefan Farfeleder 
59627fdb57eSStefan Farfeleder 	PRINT("trunc",
59727fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET(trunc));
59827fdb57eSStefan Farfeleder 
59927fdb57eSStefan Farfeleder 	/* 7.22#6 */
60027fdb57eSStefan Farfeleder 	PRINT("carg",
60127fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET_(carg, _complex) &&
60227fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_REAL_RET(carg));
60327fdb57eSStefan Farfeleder 
60427fdb57eSStefan Farfeleder 	PRINT("cimag",
60527fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET_(cimag, _complex) &&
60627fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_REAL_RET(cimag));
60727fdb57eSStefan Farfeleder 
60827fdb57eSStefan Farfeleder 	PRINT("conj",
60927fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_COMPLEX_RET(conj) &&
61027fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(conj));
61127fdb57eSStefan Farfeleder 
61227fdb57eSStefan Farfeleder 	PRINT("cproj",
61327fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_COMPLEX_RET(cproj) &&
61427fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_COMPLEX_RET(cproj));
61527fdb57eSStefan Farfeleder 
61627fdb57eSStefan Farfeleder 	PRINT("creal",
61727fdb57eSStefan Farfeleder 	    PASS_REAL_ARG_REAL_RET_(creal, _complex) &&
61827fdb57eSStefan Farfeleder 	    PASS_COMPLEX_ARG_REAL_RET(creal));
61927fdb57eSStefan Farfeleder }
620