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