t_sincos.c revision 1.1 1 1.1 christos /* $NetBSD: t_sincos.c,v 1.1 2022/08/27 08:31:58 christos Exp $ */
2 1.1 christos
3 1.1 christos /*-
4 1.1 christos * Copyright (c) 2011, 2022 The NetBSD Foundation, Inc.
5 1.1 christos * All rights reserved.
6 1.1 christos *
7 1.1 christos * This code is derived from software contributed to The NetBSD Foundation
8 1.1 christos * by Jukka Ruohonen and Christos Zoulas
9 1.1 christos *
10 1.1 christos * Redistribution and use in source and binary forms, with or without
11 1.1 christos * modification, are permitted provided that the following conditions
12 1.1 christos * are met:
13 1.1 christos * 1. Redistributions of source code must retain the above copyright
14 1.1 christos * notice, this list of conditions and the following disclaimer.
15 1.1 christos * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 christos * notice, this list of conditions and the following disclaimer in the
17 1.1 christos * documentation and/or other materials provided with the distribution.
18 1.1 christos *
19 1.1 christos * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.1 christos * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.1 christos * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.1 christos * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.1 christos * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.1 christos * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 christos * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 christos * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.1 christos * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 christos * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.1 christos * POSSIBILITY OF SUCH DAMAGE.
30 1.1 christos */
31 1.1 christos
32 1.1 christos #include <assert.h>
33 1.1 christos #include <atf-c.h>
34 1.1 christos #include <float.h>
35 1.1 christos #include <math.h>
36 1.1 christos #include <stdio.h>
37 1.1 christos
38 1.1 christos static const struct {
39 1.1 christos int angle;
40 1.1 christos double x;
41 1.1 christos double y;
42 1.1 christos float fy;
43 1.1 christos } sin_angles[] = {
44 1.1 christos // { -360, -6.283185307179586, 2.4492935982947064e-16, -1.7484555e-07 },
45 1.1 christos { -180, -3.141592653589793, -1.2246467991473532e-16, 8.7422777e-08 },
46 1.1 christos { -135, -2.356194490192345, -0.7071067811865476, 999 },
47 1.1 christos // { -90, -1.570796326794897, -1.0000000000000000, 999 },
48 1.1 christos { -45, -0.785398163397448, -0.7071067811865472, 999 },
49 1.1 christos { 0, 0.000000000000000, 0.0000000000000000, 999 },
50 1.1 christos { 30, 0.5235987755982989, 0.5000000000000000, 999 },
51 1.1 christos { 45, 0.785398163397448, 0.7071067811865472, 999 },
52 1.1 christos // { 60, 1.047197551196598, 0.8660254037844388, 999 },
53 1.1 christos { 90, 1.570796326794897, 1.0000000000000000, 999 },
54 1.1 christos // { 120, 2.094395102393195, 0.8660254037844389, 999 },
55 1.1 christos { 135, 2.356194490192345, 0.7071067811865476, 999 },
56 1.1 christos { 150, 2.617993877991494, 0.5000000000000003, 999 },
57 1.1 christos { 180, 3.141592653589793, 1.2246467991473532e-16, -8.7422777e-08 },
58 1.1 christos { 270, 4.712388980384690, -1.0000000000000000, 999 },
59 1.1 christos { 360, 6.283185307179586, -2.4492935982947064e-16, 1.7484555e-07 },
60 1.1 christos };
61 1.1 christos
62 1.1 christos static const struct {
63 1.1 christos int angle;
64 1.1 christos double x;
65 1.1 christos double y;
66 1.1 christos float fy;
67 1.1 christos } cos_angles[] = {
68 1.1 christos { -180, -3.141592653589793, -1.0000000000000000, 999 },
69 1.1 christos { -135, -2.356194490192345, -0.7071067811865476, 999 },
70 1.1 christos // { -90, -1.5707963267948966, 6.123233995736766e-17, -4.3711388e-08 },
71 1.1 christos // { -90, -1.5707963267948968, -1.6081226496766366e-16, -4.3711388e-08 },
72 1.1 christos { -45, -0.785398163397448, 0.7071067811865478, 999 },
73 1.1 christos { 0, 0.000000000000000, 1.0000000000000000, 999 },
74 1.1 christos { 30, 0.5235987755982989, 0.8660254037844386, 999 },
75 1.1 christos { 45, 0.785398163397448, 0.7071067811865478, 999 },
76 1.1 christos // { 60, 1.0471975511965976, 0.5000000000000001, 999 },
77 1.1 christos // { 60, 1.0471975511965979, 0.4999999999999999, 999 },
78 1.1 christos { 90, 1.570796326794897, -3.8285686989269494e-16, -4.3711388e-08 },
79 1.1 christos // { 120, 2.0943951023931953, -0.4999999999999998, 999 },
80 1.1 christos // { 120, 2.0943951023931957, -0.5000000000000002, 999 },
81 1.1 christos { 135, 2.356194490192345, -0.7071067811865476, 999 },
82 1.1 christos { 150, 2.617993877991494, -0.8660254037844386, 999 },
83 1.1 christos { 180, 3.141592653589793, -1.0000000000000000, 999 },
84 1.1 christos { 270, 4.712388980384690, -1.8369701987210297e-16, 1.1924881e-08 },
85 1.1 christos { 360, 6.283185307179586, 1.0000000000000000, 999 },
86 1.1 christos };
87 1.1 christos
88 1.1 christos #ifdef __HAVE_LONG_DOUBLE
89 1.1 christos /*
90 1.1 christos * sincosl(3)
91 1.1 christos */
92 1.1 christos ATF_TC(sincosl_angles);
93 1.1 christos ATF_TC_HEAD(sincosl_angles, tc)
94 1.1 christos {
95 1.1 christos atf_tc_set_md_var(tc, "descr", "Test some selected angles");
96 1.1 christos }
97 1.1 christos
98 1.1 christos ATF_TC_BODY(sincosl_angles, tc)
99 1.1 christos {
100 1.1 christos /*
101 1.1 christos * XXX The given data is for double, so take that
102 1.1 christos * into account and expect less precise results..
103 1.1 christos */
104 1.1 christos const long double eps = DBL_EPSILON;
105 1.1 christos size_t i;
106 1.1 christos
107 1.1 christos ATF_CHECK(__arraycount(sin_angles) == __arraycount(cos_angles));
108 1.1 christos
109 1.1 christos for (i = 0; i < __arraycount(sin_angles); i++) {
110 1.1 christos ATF_CHECK_MSG(sin_angles[i].angle == cos_angles[i].angle,
111 1.1 christos "%zu %d %d", i, sin_angles[i].angle, cos_angles[i].angle);
112 1.1 christos int deg = sin_angles[i].angle;
113 1.1 christos ATF_CHECK_MSG(sin_angles[i].x == cos_angles[i].x,
114 1.1 christos "%zu %g %g", i, sin_angles[i].x, cos_angles[i].x);
115 1.1 christos long double theta = sin_angles[i].x;
116 1.1 christos long double sin_theta = sin_angles[i].y;
117 1.1 christos long double cos_theta = cos_angles[i].y;
118 1.1 christos long double s, c;
119 1.1 christos
120 1.1 christos sincosl(theta, &s, &c);
121 1.1 christos
122 1.1 christos if (fabsl((s - sin_theta)/sin_theta) > eps) {
123 1.1 christos atf_tc_fail_nonfatal("sin(%d deg = %.17Lg) = %.17Lg"
124 1.1 christos " != %.17Lg",
125 1.1 christos deg, theta, s, sin_theta);
126 1.1 christos }
127 1.1 christos if (fabsl((c - cos_theta)/cos_theta) > eps) {
128 1.1 christos atf_tc_fail_nonfatal("cos(%d deg = %.17Lg) = %.17Lg"
129 1.1 christos " != %.17Lg",
130 1.1 christos deg, theta, c, cos_theta);
131 1.1 christos }
132 1.1 christos }
133 1.1 christos }
134 1.1 christos
135 1.1 christos ATF_TC(sincosl_nan);
136 1.1 christos ATF_TC_HEAD(sincosl_nan, tc)
137 1.1 christos {
138 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(NaN) == (NaN, NaN)");
139 1.1 christos }
140 1.1 christos
141 1.1 christos ATF_TC_BODY(sincosl_nan, tc)
142 1.1 christos {
143 1.1 christos const long double x = 0.0L / 0.0L;
144 1.1 christos long double s, c;
145 1.1 christos
146 1.1 christos sincosl(x, &s, &c);
147 1.1 christos ATF_CHECK(isnan(x) && isnan(s) && isnan(c));
148 1.1 christos }
149 1.1 christos
150 1.1 christos ATF_TC(sincosl_inf_neg);
151 1.1 christos ATF_TC_HEAD(sincosl_inf_neg, tc)
152 1.1 christos {
153 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(-Inf) == (NaN, NaN)");
154 1.1 christos }
155 1.1 christos
156 1.1 christos ATF_TC_BODY(sincosl_inf_neg, tc)
157 1.1 christos {
158 1.1 christos const long double x = -1.0L / 0.0L;
159 1.1 christos long double s, c;
160 1.1 christos
161 1.1 christos sincosl(x, &s, &c);
162 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
163 1.1 christos }
164 1.1 christos
165 1.1 christos ATF_TC(sincosl_inf_pos);
166 1.1 christos ATF_TC_HEAD(sincosl_inf_pos, tc)
167 1.1 christos {
168 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(+Inf) == (NaN, NaN)");
169 1.1 christos }
170 1.1 christos
171 1.1 christos ATF_TC_BODY(sincosl_inf_pos, tc)
172 1.1 christos {
173 1.1 christos const long double x = 1.0L / 0.0L;
174 1.1 christos long double s, c;
175 1.1 christos
176 1.1 christos sincosl(x, &s, &c);
177 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
178 1.1 christos }
179 1.1 christos
180 1.1 christos
181 1.1 christos ATF_TC(sincosl_zero_neg);
182 1.1 christos ATF_TC_HEAD(sincosl_zero_neg, tc)
183 1.1 christos {
184 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(-0.0) == (0.0, 1.0)");
185 1.1 christos }
186 1.1 christos
187 1.1 christos ATF_TC_BODY(sincosl_zero_neg, tc)
188 1.1 christos {
189 1.1 christos const long double x = -0.0L;
190 1.1 christos long double s, c;
191 1.1 christos
192 1.1 christos sincosl(x, &s, &c);
193 1.1 christos ATF_CHECK(s == 0.0 && c == 1.0);
194 1.1 christos }
195 1.1 christos
196 1.1 christos ATF_TC(sincosl_zero_pos);
197 1.1 christos ATF_TC_HEAD(sincosl_zero_pos, tc)
198 1.1 christos {
199 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(+0.0) == (0.0, 1.0)");
200 1.1 christos }
201 1.1 christos
202 1.1 christos ATF_TC_BODY(sincosl_zero_pos, tc)
203 1.1 christos {
204 1.1 christos const long double x = 0.0L;
205 1.1 christos long double s, c;
206 1.1 christos
207 1.1 christos sincosl(x, &s, &c);
208 1.1 christos ATF_CHECK(s == 0.0 && c == 1.0);
209 1.1 christos }
210 1.1 christos #endif
211 1.1 christos
212 1.1 christos /*
213 1.1 christos * sincos(3)
214 1.1 christos */
215 1.1 christos ATF_TC(sincos_angles);
216 1.1 christos ATF_TC_HEAD(sincos_angles, tc)
217 1.1 christos {
218 1.1 christos atf_tc_set_md_var(tc, "descr", "Test some selected angles");
219 1.1 christos }
220 1.1 christos
221 1.1 christos ATF_TC_BODY(sincos_angles, tc)
222 1.1 christos {
223 1.1 christos const double eps = DBL_EPSILON;
224 1.1 christos size_t i;
225 1.1 christos
226 1.1 christos for (i = 0; i < __arraycount(sin_angles); i++) {
227 1.1 christos ATF_CHECK_MSG(sin_angles[i].angle == cos_angles[i].angle,
228 1.1 christos "%zu %d %d", i, sin_angles[i].angle, cos_angles[i].angle);
229 1.1 christos int deg = sin_angles[i].angle;
230 1.1 christos ATF_CHECK_MSG(sin_angles[i].x == cos_angles[i].x,
231 1.1 christos "%zu %g %g", i, sin_angles[i].x, cos_angles[i].x);
232 1.1 christos double theta = sin_angles[i].x;
233 1.1 christos double sin_theta = sin_angles[i].y;
234 1.1 christos double cos_theta = cos_angles[i].y;
235 1.1 christos double s, c;
236 1.1 christos
237 1.1 christos sincos(theta, &s, &c);
238 1.1 christos
239 1.1 christos if (fabs((s - sin_theta)/sin_theta) > eps) {
240 1.1 christos atf_tc_fail_nonfatal("sin(%d deg = %.17g) = %.17g"
241 1.1 christos " != %.17g",
242 1.1 christos deg, theta, s, sin_theta);
243 1.1 christos }
244 1.1 christos if (fabs((c - cos_theta)/cos_theta) > eps) {
245 1.1 christos atf_tc_fail_nonfatal("cos(%d deg = %.17g) = %.17g"
246 1.1 christos " != %.17g",
247 1.1 christos deg, theta, c, cos_theta);
248 1.1 christos }
249 1.1 christos }
250 1.1 christos }
251 1.1 christos
252 1.1 christos ATF_TC(sincos_nan);
253 1.1 christos ATF_TC_HEAD(sincos_nan, tc)
254 1.1 christos {
255 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(NaN) == (NaN, NaN)");
256 1.1 christos }
257 1.1 christos
258 1.1 christos ATF_TC_BODY(sincos_nan, tc)
259 1.1 christos {
260 1.1 christos const double x = 0.0L / 0.0L;
261 1.1 christos double s, c;
262 1.1 christos
263 1.1 christos sincos(x, &s, &c);
264 1.1 christos ATF_CHECK(isnan(x) && isnan(s) && isnan(c));
265 1.1 christos }
266 1.1 christos
267 1.1 christos ATF_TC(sincos_inf_neg);
268 1.1 christos ATF_TC_HEAD(sincos_inf_neg, tc)
269 1.1 christos {
270 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(-Inf) == (NaN, NaN)");
271 1.1 christos }
272 1.1 christos
273 1.1 christos ATF_TC_BODY(sincos_inf_neg, tc)
274 1.1 christos {
275 1.1 christos const double x = -1.0L / 0.0L;
276 1.1 christos double s, c;
277 1.1 christos
278 1.1 christos sincos(x, &s, &c);
279 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
280 1.1 christos }
281 1.1 christos
282 1.1 christos ATF_TC(sincos_inf_pos);
283 1.1 christos ATF_TC_HEAD(sincos_inf_pos, tc)
284 1.1 christos {
285 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(+Inf) == (NaN, NaN)");
286 1.1 christos }
287 1.1 christos
288 1.1 christos ATF_TC_BODY(sincos_inf_pos, tc)
289 1.1 christos {
290 1.1 christos const double x = 1.0L / 0.0L;
291 1.1 christos double s, c;
292 1.1 christos
293 1.1 christos sincos(x, &s, &c);
294 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
295 1.1 christos }
296 1.1 christos
297 1.1 christos
298 1.1 christos ATF_TC(sincos_zero_neg);
299 1.1 christos ATF_TC_HEAD(sincos_zero_neg, tc)
300 1.1 christos {
301 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(-0.0) == (0.0, 1.0)");
302 1.1 christos }
303 1.1 christos
304 1.1 christos ATF_TC_BODY(sincos_zero_neg, tc)
305 1.1 christos {
306 1.1 christos const double x = -0.0L;
307 1.1 christos double s, c;
308 1.1 christos
309 1.1 christos sincos(x, &s, &c);
310 1.1 christos ATF_CHECK(s == 0 && c == 1.0);
311 1.1 christos }
312 1.1 christos
313 1.1 christos ATF_TC(sincos_zero_pos);
314 1.1 christos ATF_TC_HEAD(sincos_zero_pos, tc)
315 1.1 christos {
316 1.1 christos atf_tc_set_md_var(tc, "descr", "Test cos(+0.0) == (0.0, 1.0)");
317 1.1 christos }
318 1.1 christos
319 1.1 christos ATF_TC_BODY(sincos_zero_pos, tc)
320 1.1 christos {
321 1.1 christos const double x = 0.0L;
322 1.1 christos double s, c;
323 1.1 christos
324 1.1 christos sincos(x, &s, &c);
325 1.1 christos ATF_CHECK(s == 0 && c == 1.0);
326 1.1 christos }
327 1.1 christos
328 1.1 christos /*
329 1.1 christos * sincosf(3)
330 1.1 christos */
331 1.1 christos ATF_TC(sincosf_angles);
332 1.1 christos ATF_TC_HEAD(sincosf_angles, tc)
333 1.1 christos {
334 1.1 christos atf_tc_set_md_var(tc, "descr", "Test some selected angles");
335 1.1 christos }
336 1.1 christos
337 1.1 christos ATF_TC_BODY(sincosf_angles, tc)
338 1.1 christos {
339 1.1 christos const float eps = FLT_EPSILON;
340 1.1 christos size_t i;
341 1.1 christos
342 1.1 christos for (i = 0; i < __arraycount(sin_angles); i++) {
343 1.1 christos ATF_CHECK_MSG(sin_angles[i].angle == cos_angles[i].angle,
344 1.1 christos "%zu %d %d", i, sin_angles[i].angle, cos_angles[i].angle);
345 1.1 christos int deg = sin_angles[i].angle;
346 1.1 christos ATF_CHECK_MSG(sin_angles[i].x == cos_angles[i].x,
347 1.1 christos "%zu %g %g", i, sin_angles[i].x, cos_angles[i].x);
348 1.1 christos float theta = sin_angles[i].x;
349 1.1 christos float sin_theta = sin_angles[i].fy;
350 1.1 christos float cos_theta = cos_angles[i].fy;
351 1.1 christos float s, c;
352 1.1 christos
353 1.1 christos sincosf(theta, &s, &c);
354 1.1 christos if (cos_theta == 999)
355 1.1 christos cos_theta = cos_angles[i].y;
356 1.1 christos if (sin_theta == 999)
357 1.1 christos sin_theta = sin_angles[i].y;
358 1.1 christos
359 1.1 christos if (fabs((s - sin_theta)/sin_theta) > eps) {
360 1.1 christos atf_tc_fail_nonfatal("sin(%d deg = %.8g) = %.8g"
361 1.1 christos " != %.8g",
362 1.1 christos deg, theta, s, sin_theta);
363 1.1 christos }
364 1.1 christos if (fabs((c - cos_theta)/cos_theta) > eps) {
365 1.1 christos atf_tc_fail_nonfatal("cos(%d deg = %.8g) = %.8g"
366 1.1 christos " != %.8g",
367 1.1 christos deg, theta, c, cos_theta);
368 1.1 christos }
369 1.1 christos }
370 1.1 christos }
371 1.1 christos
372 1.1 christos ATF_TC(sincosf_nan);
373 1.1 christos ATF_TC_HEAD(sincosf_nan, tc)
374 1.1 christos {
375 1.1 christos atf_tc_set_md_var(tc, "descr", "Test cosf(NaN) == (NaN, NaN)");
376 1.1 christos }
377 1.1 christos
378 1.1 christos ATF_TC_BODY(sincosf_nan, tc)
379 1.1 christos {
380 1.1 christos const float x = 0.0L / 0.0L;
381 1.1 christos float s, c;
382 1.1 christos
383 1.1 christos sincosf(x, &s, &c);
384 1.1 christos ATF_CHECK(isnan(x) && isnan(s) && isnan(c));
385 1.1 christos }
386 1.1 christos
387 1.1 christos ATF_TC(sincosf_inf_neg);
388 1.1 christos ATF_TC_HEAD(sincosf_inf_neg, tc)
389 1.1 christos {
390 1.1 christos atf_tc_set_md_var(tc, "descr", "Test cosf(-Inf) == (NaN, NaN)");
391 1.1 christos }
392 1.1 christos
393 1.1 christos ATF_TC_BODY(sincosf_inf_neg, tc)
394 1.1 christos {
395 1.1 christos const float x = -1.0L / 0.0L;
396 1.1 christos float s, c;
397 1.1 christos
398 1.1 christos sincosf(x, &s, &c);
399 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
400 1.1 christos
401 1.1 christos }
402 1.1 christos
403 1.1 christos ATF_TC(sincosf_inf_pos);
404 1.1 christos ATF_TC_HEAD(sincosf_inf_pos, tc)
405 1.1 christos {
406 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosf(+Inf) == (NaN, NaN)");
407 1.1 christos }
408 1.1 christos
409 1.1 christos ATF_TC_BODY(sincosf_inf_pos, tc)
410 1.1 christos {
411 1.1 christos const float x = 1.0L / 0.0L;
412 1.1 christos float s, c;
413 1.1 christos
414 1.1 christos sincosf(x, &s, &c);
415 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
416 1.1 christos }
417 1.1 christos
418 1.1 christos
419 1.1 christos ATF_TC(sincosf_zero_neg);
420 1.1 christos ATF_TC_HEAD(sincosf_zero_neg, tc)
421 1.1 christos {
422 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosf(-0.0) == (0.0, 1.0)");
423 1.1 christos }
424 1.1 christos
425 1.1 christos ATF_TC_BODY(sincosf_zero_neg, tc)
426 1.1 christos {
427 1.1 christos const float x = -0.0L;
428 1.1 christos float s, c;
429 1.1 christos
430 1.1 christos sincosf(x, &s, &c);
431 1.1 christos
432 1.1 christos ATF_CHECK(s == 0.0 && c == 1.0);
433 1.1 christos }
434 1.1 christos
435 1.1 christos ATF_TC(sincosf_zero_pos);
436 1.1 christos ATF_TC_HEAD(sincosf_zero_pos, tc)
437 1.1 christos {
438 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosf(+0.0) == (0.0, 1.0)");
439 1.1 christos }
440 1.1 christos
441 1.1 christos ATF_TC_BODY(sincosf_zero_pos, tc)
442 1.1 christos {
443 1.1 christos const float x = 0.0L;
444 1.1 christos
445 1.1 christos float s, c;
446 1.1 christos
447 1.1 christos sincosf(x, &s, &c);
448 1.1 christos
449 1.1 christos ATF_CHECK(s == 0 && c == 1.0);
450 1.1 christos }
451 1.1 christos
452 1.1 christos ATF_TP_ADD_TCS(tp)
453 1.1 christos {
454 1.1 christos #ifdef __HAVE_LONG_DOUBLE
455 1.1 christos ATF_TP_ADD_TC(tp, sincosl_angles);
456 1.1 christos ATF_TP_ADD_TC(tp, sincosl_nan);
457 1.1 christos ATF_TP_ADD_TC(tp, sincosl_inf_neg);
458 1.1 christos ATF_TP_ADD_TC(tp, sincosl_inf_pos);
459 1.1 christos ATF_TP_ADD_TC(tp, sincosl_zero_neg);
460 1.1 christos ATF_TP_ADD_TC(tp, sincosl_zero_pos);
461 1.1 christos #endif
462 1.1 christos
463 1.1 christos ATF_TP_ADD_TC(tp, sincos_angles);
464 1.1 christos ATF_TP_ADD_TC(tp, sincos_nan);
465 1.1 christos ATF_TP_ADD_TC(tp, sincos_inf_neg);
466 1.1 christos ATF_TP_ADD_TC(tp, sincos_inf_pos);
467 1.1 christos ATF_TP_ADD_TC(tp, sincos_zero_neg);
468 1.1 christos ATF_TP_ADD_TC(tp, sincos_zero_pos);
469 1.1 christos
470 1.1 christos ATF_TP_ADD_TC(tp, sincosf_angles);
471 1.1 christos ATF_TP_ADD_TC(tp, sincosf_nan);
472 1.1 christos ATF_TP_ADD_TC(tp, sincosf_inf_neg);
473 1.1 christos ATF_TP_ADD_TC(tp, sincosf_inf_pos);
474 1.1 christos ATF_TP_ADD_TC(tp, sincosf_zero_neg);
475 1.1 christos ATF_TP_ADD_TC(tp, sincosf_zero_pos);
476 1.1 christos
477 1.1 christos return atf_no_error();
478 1.1 christos }
479