xref: /dflybsd-src/tools/regression/lib/libm/test-trig.c (revision 7f8c68295613ce24cc71827cf210cb3d1e3bc69b)
1*7f8c6829SSascha Wildner /*-
2*7f8c6829SSascha Wildner  * Copyright (c) 2008 David Schultz <das@FreeBSD.org>
3*7f8c6829SSascha Wildner  * All rights reserved.
4*7f8c6829SSascha Wildner  *
5*7f8c6829SSascha Wildner  * Redistribution and use in source and binary forms, with or without
6*7f8c6829SSascha Wildner  * modification, are permitted provided that the following conditions
7*7f8c6829SSascha Wildner  * are met:
8*7f8c6829SSascha Wildner  * 1. Redistributions of source code must retain the above copyright
9*7f8c6829SSascha Wildner  *    notice, this list of conditions and the following disclaimer.
10*7f8c6829SSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
11*7f8c6829SSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
12*7f8c6829SSascha Wildner  *    documentation and/or other materials provided with the distribution.
13*7f8c6829SSascha Wildner  *
14*7f8c6829SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*7f8c6829SSascha Wildner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*7f8c6829SSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*7f8c6829SSascha Wildner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*7f8c6829SSascha Wildner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*7f8c6829SSascha Wildner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*7f8c6829SSascha Wildner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*7f8c6829SSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*7f8c6829SSascha Wildner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*7f8c6829SSascha Wildner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*7f8c6829SSascha Wildner  * SUCH DAMAGE.
25*7f8c6829SSascha Wildner  *
26*7f8c6829SSascha Wildner  * $FreeBSD: src/tools/regression/lib/msun/test-trig.c,v 1.3 2010/12/06 00:02:49 das Exp $
27*7f8c6829SSascha Wildner  */
28*7f8c6829SSascha Wildner 
29*7f8c6829SSascha Wildner /*
30*7f8c6829SSascha Wildner  * Tests for corner cases in trigonometric functions. Some accuracy tests
31*7f8c6829SSascha Wildner  * are included as well, but these are very basic sanity checks, not
32*7f8c6829SSascha Wildner  * intended to be comprehensive.
33*7f8c6829SSascha Wildner  *
34*7f8c6829SSascha Wildner  * The program for generating representable numbers near multiples of pi is
35*7f8c6829SSascha Wildner  * available at http://www.cs.berkeley.edu/~wkahan/testpi/ .
36*7f8c6829SSascha Wildner  */
37*7f8c6829SSascha Wildner 
38*7f8c6829SSascha Wildner #include <assert.h>
39*7f8c6829SSascha Wildner #include <fenv.h>
40*7f8c6829SSascha Wildner #include <float.h>
41*7f8c6829SSascha Wildner #include <math.h>
42*7f8c6829SSascha Wildner #include <stdio.h>
43*7f8c6829SSascha Wildner 
44*7f8c6829SSascha Wildner #define	ALL_STD_EXCEPT	(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \
45*7f8c6829SSascha Wildner 			 FE_OVERFLOW | FE_UNDERFLOW)
46*7f8c6829SSascha Wildner 
47*7f8c6829SSascha Wildner #define	LEN(a)		(sizeof(a) / sizeof((a)[0]))
48*7f8c6829SSascha Wildner 
49*7f8c6829SSascha Wildner #pragma STDC FENV_ACCESS ON
50*7f8c6829SSascha Wildner 
51*7f8c6829SSascha Wildner /*
52*7f8c6829SSascha Wildner  * Test that a function returns the correct value and sets the
53*7f8c6829SSascha Wildner  * exception flags correctly. The exceptmask specifies which
54*7f8c6829SSascha Wildner  * exceptions we should check. We need to be lenient for several
55*7f8c6829SSascha Wildner  * reasons, but mainly because on some architectures it's impossible
56*7f8c6829SSascha Wildner  * to raise FE_OVERFLOW without raising FE_INEXACT.
57*7f8c6829SSascha Wildner  *
58*7f8c6829SSascha Wildner  * These are macros instead of functions so that assert provides more
59*7f8c6829SSascha Wildner  * meaningful error messages.
60*7f8c6829SSascha Wildner  *
61*7f8c6829SSascha Wildner  * XXX The volatile here is to avoid gcc's bogus constant folding and work
62*7f8c6829SSascha Wildner  *     around the lack of support for the FENV_ACCESS pragma.
63*7f8c6829SSascha Wildner  */
64*7f8c6829SSascha Wildner #define	test(func, x, result, exceptmask, excepts)	do {		\
65*7f8c6829SSascha Wildner 	volatile long double _d = x;					\
66*7f8c6829SSascha Wildner 	assert(feclearexcept(FE_ALL_EXCEPT) == 0);			\
67*7f8c6829SSascha Wildner 	assert(fpequal((func)(_d), (result)));				\
68*7f8c6829SSascha Wildner 	assert(((func), fetestexcept(exceptmask) == (excepts)));	\
69*7f8c6829SSascha Wildner } while (0)
70*7f8c6829SSascha Wildner 
71*7f8c6829SSascha Wildner #define	testall(prefix, x, result, exceptmask, excepts)	do {		\
72*7f8c6829SSascha Wildner 	test(prefix, x, (double)result, exceptmask, excepts);		\
73*7f8c6829SSascha Wildner 	test(prefix##f, x, (float)result, exceptmask, excepts);		\
74*7f8c6829SSascha Wildner 	test(prefix##l, x, result, exceptmask, excepts);		\
75*7f8c6829SSascha Wildner } while (0)
76*7f8c6829SSascha Wildner 
77*7f8c6829SSascha Wildner #define	testdf(prefix, x, result, exceptmask, excepts)	do {		\
78*7f8c6829SSascha Wildner 	test(prefix, x, (double)result, exceptmask, excepts);		\
79*7f8c6829SSascha Wildner 	test(prefix##f, x, (float)result, exceptmask, excepts);		\
80*7f8c6829SSascha Wildner } while (0)
81*7f8c6829SSascha Wildner 
82*7f8c6829SSascha Wildner 
83*7f8c6829SSascha Wildner 
84*7f8c6829SSascha Wildner /*
85*7f8c6829SSascha Wildner  * Determine whether x and y are equal, with two special rules:
86*7f8c6829SSascha Wildner  *	+0.0 != -0.0
87*7f8c6829SSascha Wildner  *	 NaN == NaN
88*7f8c6829SSascha Wildner  */
89*7f8c6829SSascha Wildner int
fpequal(long double x,long double y)90*7f8c6829SSascha Wildner fpequal(long double x, long double y)
91*7f8c6829SSascha Wildner {
92*7f8c6829SSascha Wildner 	return ((x == y && !signbit(x) == !signbit(y)) || isnan(x) && isnan(y));
93*7f8c6829SSascha Wildner }
94*7f8c6829SSascha Wildner 
95*7f8c6829SSascha Wildner /*
96*7f8c6829SSascha Wildner  * Test special cases in sin(), cos(), and tan().
97*7f8c6829SSascha Wildner  */
98*7f8c6829SSascha Wildner static void
run_special_tests(void)99*7f8c6829SSascha Wildner run_special_tests(void)
100*7f8c6829SSascha Wildner {
101*7f8c6829SSascha Wildner 
102*7f8c6829SSascha Wildner 	/* Values at 0 should be exact. */
103*7f8c6829SSascha Wildner 	testall(tan, 0.0, 0.0, ALL_STD_EXCEPT, 0);
104*7f8c6829SSascha Wildner 	testall(tan, -0.0, -0.0, ALL_STD_EXCEPT, 0);
105*7f8c6829SSascha Wildner 	testall(cos, 0.0, 1.0, ALL_STD_EXCEPT, 0);
106*7f8c6829SSascha Wildner 	testall(cos, -0.0, 1.0, ALL_STD_EXCEPT, 0);
107*7f8c6829SSascha Wildner 	testall(sin, 0.0, 0.0, ALL_STD_EXCEPT, 0);
108*7f8c6829SSascha Wildner 	testall(sin, -0.0, -0.0, ALL_STD_EXCEPT, 0);
109*7f8c6829SSascha Wildner 
110*7f8c6829SSascha Wildner 	/* func(+-Inf) == NaN */
111*7f8c6829SSascha Wildner 	testall(tan, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
112*7f8c6829SSascha Wildner 	testall(sin, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
113*7f8c6829SSascha Wildner 	testall(cos, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
114*7f8c6829SSascha Wildner 	testall(tan, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
115*7f8c6829SSascha Wildner 	testall(sin, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
116*7f8c6829SSascha Wildner 	testall(cos, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
117*7f8c6829SSascha Wildner 
118*7f8c6829SSascha Wildner 	/* func(NaN) == NaN */
119*7f8c6829SSascha Wildner 	testall(tan, NAN, NAN, ALL_STD_EXCEPT, 0);
120*7f8c6829SSascha Wildner 	testall(sin, NAN, NAN, ALL_STD_EXCEPT, 0);
121*7f8c6829SSascha Wildner 	testall(cos, NAN, NAN, ALL_STD_EXCEPT, 0);
122*7f8c6829SSascha Wildner }
123*7f8c6829SSascha Wildner 
124*7f8c6829SSascha Wildner /*
125*7f8c6829SSascha Wildner  * Tests to ensure argument reduction for large arguments is accurate.
126*7f8c6829SSascha Wildner  */
127*7f8c6829SSascha Wildner static void
run_reduction_tests(void)128*7f8c6829SSascha Wildner run_reduction_tests(void)
129*7f8c6829SSascha Wildner {
130*7f8c6829SSascha Wildner 	/* floats very close to odd multiples of pi */
131*7f8c6829SSascha Wildner 	static const float f_pi_odd[] = {
132*7f8c6829SSascha Wildner 		85563208.0f,
133*7f8c6829SSascha Wildner 		43998769152.0f,
134*7f8c6829SSascha Wildner 		9.2763667655669323e+25f,
135*7f8c6829SSascha Wildner 		1.5458357838905804e+29f,
136*7f8c6829SSascha Wildner 	};
137*7f8c6829SSascha Wildner 	/* doubles very close to odd multiples of pi */
138*7f8c6829SSascha Wildner 	static const double d_pi_odd[] = {
139*7f8c6829SSascha Wildner 		3.1415926535897931,
140*7f8c6829SSascha Wildner 		91.106186954104004,
141*7f8c6829SSascha Wildner 		642615.9188844458,
142*7f8c6829SSascha Wildner 		3397346.5699258847,
143*7f8c6829SSascha Wildner 		6134899525417045.0,
144*7f8c6829SSascha Wildner 		3.0213551960457761e+43,
145*7f8c6829SSascha Wildner 		1.2646209897993783e+295,
146*7f8c6829SSascha Wildner 		6.2083625380677099e+307,
147*7f8c6829SSascha Wildner 	};
148*7f8c6829SSascha Wildner 	/* long doubles very close to odd multiples of pi */
149*7f8c6829SSascha Wildner #if LDBL_MANT_DIG == 64
150*7f8c6829SSascha Wildner 	static const long double ld_pi_odd[] = {
151*7f8c6829SSascha Wildner 		1.1891886960373841596e+101L,
152*7f8c6829SSascha Wildner 		1.07999475322710967206e+2087L,
153*7f8c6829SSascha Wildner 		6.522151627890431836e+2147L,
154*7f8c6829SSascha Wildner 		8.9368974898260328229e+2484L,
155*7f8c6829SSascha Wildner 		9.2961044110572205863e+2555L,
156*7f8c6829SSascha Wildner 		4.90208421886578286e+3189L,
157*7f8c6829SSascha Wildner 		1.5275546401232615884e+3317L,
158*7f8c6829SSascha Wildner 		1.7227465626338900093e+3565L,
159*7f8c6829SSascha Wildner 		2.4160090594000745334e+3808L,
160*7f8c6829SSascha Wildner 		9.8477555741888350649e+4314L,
161*7f8c6829SSascha Wildner 		1.6061597222105160737e+4326L,
162*7f8c6829SSascha Wildner 	};
163*7f8c6829SSascha Wildner #elif LDBL_MANT_DIG == 113
164*7f8c6829SSascha Wildner 	static const long double ld_pi_odd[] = {
165*7f8c6829SSascha Wildner 		/* XXX */
166*7f8c6829SSascha Wildner 	};
167*7f8c6829SSascha Wildner #endif
168*7f8c6829SSascha Wildner 
169*7f8c6829SSascha Wildner 	int i;
170*7f8c6829SSascha Wildner 
171*7f8c6829SSascha Wildner 	for (i = 0; i < LEN(f_pi_odd); i++) {
172*7f8c6829SSascha Wildner 		assert(fabs(sinf(f_pi_odd[i])) < FLT_EPSILON);
173*7f8c6829SSascha Wildner 		assert(cosf(f_pi_odd[i]) == -1.0);
174*7f8c6829SSascha Wildner 		assert(fabs(tan(f_pi_odd[i])) < FLT_EPSILON);
175*7f8c6829SSascha Wildner 
176*7f8c6829SSascha Wildner 		assert(fabs(sinf(-f_pi_odd[i])) < FLT_EPSILON);
177*7f8c6829SSascha Wildner 		assert(cosf(-f_pi_odd[i]) == -1.0);
178*7f8c6829SSascha Wildner 		assert(fabs(tanf(-f_pi_odd[i])) < FLT_EPSILON);
179*7f8c6829SSascha Wildner 
180*7f8c6829SSascha Wildner 		assert(fabs(sinf(f_pi_odd[i] * 2)) < FLT_EPSILON);
181*7f8c6829SSascha Wildner 		assert(cosf(f_pi_odd[i] * 2) == 1.0);
182*7f8c6829SSascha Wildner 		assert(fabs(tanf(f_pi_odd[i] * 2)) < FLT_EPSILON);
183*7f8c6829SSascha Wildner 
184*7f8c6829SSascha Wildner 		assert(fabs(sinf(-f_pi_odd[i] * 2)) < FLT_EPSILON);
185*7f8c6829SSascha Wildner 		assert(cosf(-f_pi_odd[i] * 2) == 1.0);
186*7f8c6829SSascha Wildner 		assert(fabs(tanf(-f_pi_odd[i] * 2)) < FLT_EPSILON);
187*7f8c6829SSascha Wildner 	}
188*7f8c6829SSascha Wildner 
189*7f8c6829SSascha Wildner 	for (i = 0; i < LEN(d_pi_odd); i++) {
190*7f8c6829SSascha Wildner 		assert(fabs(sin(d_pi_odd[i])) < 2 * DBL_EPSILON);
191*7f8c6829SSascha Wildner 		assert(cos(d_pi_odd[i]) == -1.0);
192*7f8c6829SSascha Wildner 		assert(fabs(tan(d_pi_odd[i])) < 2 * DBL_EPSILON);
193*7f8c6829SSascha Wildner 
194*7f8c6829SSascha Wildner 		assert(fabs(sin(-d_pi_odd[i])) < 2 * DBL_EPSILON);
195*7f8c6829SSascha Wildner 		assert(cos(-d_pi_odd[i]) == -1.0);
196*7f8c6829SSascha Wildner 		assert(fabs(tan(-d_pi_odd[i])) < 2 * DBL_EPSILON);
197*7f8c6829SSascha Wildner 
198*7f8c6829SSascha Wildner 		assert(fabs(sin(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
199*7f8c6829SSascha Wildner 		assert(cos(d_pi_odd[i] * 2) == 1.0);
200*7f8c6829SSascha Wildner 		assert(fabs(tan(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
201*7f8c6829SSascha Wildner 
202*7f8c6829SSascha Wildner 		assert(fabs(sin(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
203*7f8c6829SSascha Wildner 		assert(cos(-d_pi_odd[i] * 2) == 1.0);
204*7f8c6829SSascha Wildner 		assert(fabs(tan(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
205*7f8c6829SSascha Wildner 	}
206*7f8c6829SSascha Wildner 
207*7f8c6829SSascha Wildner #if LDBL_MANT_DIG > 53
208*7f8c6829SSascha Wildner 	for (i = 0; i < LEN(ld_pi_odd); i++) {
209*7f8c6829SSascha Wildner 		assert(fabsl(sinl(ld_pi_odd[i])) < LDBL_EPSILON);
210*7f8c6829SSascha Wildner 		assert(cosl(ld_pi_odd[i]) == -1.0);
211*7f8c6829SSascha Wildner 		assert(fabsl(tanl(ld_pi_odd[i])) < LDBL_EPSILON);
212*7f8c6829SSascha Wildner 
213*7f8c6829SSascha Wildner 		assert(fabsl(sinl(-ld_pi_odd[i])) < LDBL_EPSILON);
214*7f8c6829SSascha Wildner 		assert(cosl(-ld_pi_odd[i]) == -1.0);
215*7f8c6829SSascha Wildner 		assert(fabsl(tanl(-ld_pi_odd[i])) < LDBL_EPSILON);
216*7f8c6829SSascha Wildner 
217*7f8c6829SSascha Wildner 		assert(fabsl(sinl(ld_pi_odd[i] * 2)) < LDBL_EPSILON);
218*7f8c6829SSascha Wildner 		assert(cosl(ld_pi_odd[i] * 2) == 1.0);
219*7f8c6829SSascha Wildner 		assert(fabsl(tanl(ld_pi_odd[i] * 2)) < LDBL_EPSILON);
220*7f8c6829SSascha Wildner 
221*7f8c6829SSascha Wildner 		assert(fabsl(sinl(-ld_pi_odd[i] * 2)) < LDBL_EPSILON);
222*7f8c6829SSascha Wildner 		assert(cosl(-ld_pi_odd[i] * 2) == 1.0);
223*7f8c6829SSascha Wildner 		assert(fabsl(tanl(-ld_pi_odd[i] * 2)) < LDBL_EPSILON);
224*7f8c6829SSascha Wildner 	}
225*7f8c6829SSascha Wildner #endif
226*7f8c6829SSascha Wildner }
227*7f8c6829SSascha Wildner 
228*7f8c6829SSascha Wildner /*
229*7f8c6829SSascha Wildner  * Tests the accuracy of these functions over the primary range.
230*7f8c6829SSascha Wildner  */
231*7f8c6829SSascha Wildner static void
run_accuracy_tests(void)232*7f8c6829SSascha Wildner run_accuracy_tests(void)
233*7f8c6829SSascha Wildner {
234*7f8c6829SSascha Wildner 
235*7f8c6829SSascha Wildner 	/* For small args, sin(x) = tan(x) = x, and cos(x) = 1. */
236*7f8c6829SSascha Wildner 	testall(sin, 0xd.50ee515fe4aea16p-114L, 0xd.50ee515fe4aea16p-114L,
237*7f8c6829SSascha Wildner 	     ALL_STD_EXCEPT, FE_INEXACT);
238*7f8c6829SSascha Wildner 	testall(tan, 0xd.50ee515fe4aea16p-114L, 0xd.50ee515fe4aea16p-114L,
239*7f8c6829SSascha Wildner 	     ALL_STD_EXCEPT, FE_INEXACT);
240*7f8c6829SSascha Wildner 	testall(cos, 0xd.50ee515fe4aea16p-114L, 1.0,
241*7f8c6829SSascha Wildner 		ALL_STD_EXCEPT, FE_INEXACT);
242*7f8c6829SSascha Wildner 
243*7f8c6829SSascha Wildner 	/*
244*7f8c6829SSascha Wildner 	 * These tests should pass for f32, d64, and ld80 as long as
245*7f8c6829SSascha Wildner 	 * the error is <= 0.75 ulp (round to nearest)
246*7f8c6829SSascha Wildner 	 */
247*7f8c6829SSascha Wildner #if LDBL_MANT_DIG <= 64
248*7f8c6829SSascha Wildner #define	testacc	testall
249*7f8c6829SSascha Wildner #else
250*7f8c6829SSascha Wildner #define	testacc	testdf
251*7f8c6829SSascha Wildner #endif
252*7f8c6829SSascha Wildner 	testacc(sin, 0.17255452780841205174L, 0.17169949801444412683L,
253*7f8c6829SSascha Wildner 		ALL_STD_EXCEPT, FE_INEXACT);
254*7f8c6829SSascha Wildner 	testacc(sin, -0.75431944555904520893L, -0.68479288156557286353L,
255*7f8c6829SSascha Wildner 		ALL_STD_EXCEPT, FE_INEXACT);
256*7f8c6829SSascha Wildner 	testacc(cos, 0.70556358769838947292L, 0.76124620693117771850L,
257*7f8c6829SSascha Wildner 		ALL_STD_EXCEPT, FE_INEXACT);
258*7f8c6829SSascha Wildner 	testacc(cos, -0.34061437849088045332L, 0.94254960031831729956L,
259*7f8c6829SSascha Wildner 		ALL_STD_EXCEPT, FE_INEXACT);
260*7f8c6829SSascha Wildner 	testacc(tan, -0.15862817413325692897L, -0.15997221861309522115L,
261*7f8c6829SSascha Wildner 		ALL_STD_EXCEPT, FE_INEXACT);
262*7f8c6829SSascha Wildner 	testacc(tan, 0.38374784931303813530L, 0.40376500259976759951L,
263*7f8c6829SSascha Wildner 		ALL_STD_EXCEPT, FE_INEXACT);
264*7f8c6829SSascha Wildner 
265*7f8c6829SSascha Wildner 	/*
266*7f8c6829SSascha Wildner 	 * XXX missing:
267*7f8c6829SSascha Wildner 	 * - tests for ld128
268*7f8c6829SSascha Wildner 	 * - tests for other rounding modes (probably won't pass for now)
269*7f8c6829SSascha Wildner 	 * - tests for large numbers that get reduced to hi+lo with lo!=0
270*7f8c6829SSascha Wildner 	 */
271*7f8c6829SSascha Wildner }
272*7f8c6829SSascha Wildner 
273*7f8c6829SSascha Wildner int
main(int argc,char * argv[])274*7f8c6829SSascha Wildner main(int argc, char *argv[])
275*7f8c6829SSascha Wildner {
276*7f8c6829SSascha Wildner 
277*7f8c6829SSascha Wildner 	printf("1..3\n");
278*7f8c6829SSascha Wildner 
279*7f8c6829SSascha Wildner 	run_special_tests();
280*7f8c6829SSascha Wildner 	printf("ok 1 - trig\n");
281*7f8c6829SSascha Wildner 
282*7f8c6829SSascha Wildner #ifndef __i386__
283*7f8c6829SSascha Wildner 	run_reduction_tests();
284*7f8c6829SSascha Wildner #endif
285*7f8c6829SSascha Wildner 	printf("ok 2 - trig\n");
286*7f8c6829SSascha Wildner 
287*7f8c6829SSascha Wildner #ifndef __i386__
288*7f8c6829SSascha Wildner 	run_accuracy_tests();
289*7f8c6829SSascha Wildner #endif
290*7f8c6829SSascha Wildner 	printf("ok 3 - trig\n");
291*7f8c6829SSascha Wildner 
292*7f8c6829SSascha Wildner 	return (0);
293*7f8c6829SSascha Wildner }
294