t_sincos.c revision 1.2 1 1.2 riastrad /* $NetBSD: t_sincos.c,v 1.2 2024/05/06 15:53:46 riastradh 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 /*
89 1.1 christos * sincosl(3)
90 1.1 christos */
91 1.1 christos ATF_TC(sincosl_angles);
92 1.1 christos ATF_TC_HEAD(sincosl_angles, tc)
93 1.1 christos {
94 1.1 christos atf_tc_set_md_var(tc, "descr", "Test some selected angles");
95 1.1 christos }
96 1.1 christos
97 1.1 christos ATF_TC_BODY(sincosl_angles, tc)
98 1.1 christos {
99 1.1 christos /*
100 1.1 christos * XXX The given data is for double, so take that
101 1.1 christos * into account and expect less precise results..
102 1.1 christos */
103 1.1 christos const long double eps = DBL_EPSILON;
104 1.1 christos size_t i;
105 1.1 christos
106 1.1 christos ATF_CHECK(__arraycount(sin_angles) == __arraycount(cos_angles));
107 1.1 christos
108 1.1 christos for (i = 0; i < __arraycount(sin_angles); i++) {
109 1.1 christos ATF_CHECK_MSG(sin_angles[i].angle == cos_angles[i].angle,
110 1.1 christos "%zu %d %d", i, sin_angles[i].angle, cos_angles[i].angle);
111 1.1 christos int deg = sin_angles[i].angle;
112 1.1 christos ATF_CHECK_MSG(sin_angles[i].x == cos_angles[i].x,
113 1.1 christos "%zu %g %g", i, sin_angles[i].x, cos_angles[i].x);
114 1.1 christos long double theta = sin_angles[i].x;
115 1.1 christos long double sin_theta = sin_angles[i].y;
116 1.1 christos long double cos_theta = cos_angles[i].y;
117 1.1 christos long double s, c;
118 1.1 christos
119 1.1 christos sincosl(theta, &s, &c);
120 1.1 christos
121 1.1 christos if (fabsl((s - sin_theta)/sin_theta) > eps) {
122 1.1 christos atf_tc_fail_nonfatal("sin(%d deg = %.17Lg) = %.17Lg"
123 1.1 christos " != %.17Lg",
124 1.1 christos deg, theta, s, sin_theta);
125 1.1 christos }
126 1.1 christos if (fabsl((c - cos_theta)/cos_theta) > eps) {
127 1.1 christos atf_tc_fail_nonfatal("cos(%d deg = %.17Lg) = %.17Lg"
128 1.1 christos " != %.17Lg",
129 1.1 christos deg, theta, c, cos_theta);
130 1.1 christos }
131 1.1 christos }
132 1.1 christos }
133 1.1 christos
134 1.1 christos ATF_TC(sincosl_nan);
135 1.1 christos ATF_TC_HEAD(sincosl_nan, tc)
136 1.1 christos {
137 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(NaN) == (NaN, NaN)");
138 1.1 christos }
139 1.1 christos
140 1.1 christos ATF_TC_BODY(sincosl_nan, tc)
141 1.1 christos {
142 1.1 christos const long double x = 0.0L / 0.0L;
143 1.1 christos long double s, c;
144 1.1 christos
145 1.1 christos sincosl(x, &s, &c);
146 1.1 christos ATF_CHECK(isnan(x) && isnan(s) && isnan(c));
147 1.1 christos }
148 1.1 christos
149 1.1 christos ATF_TC(sincosl_inf_neg);
150 1.1 christos ATF_TC_HEAD(sincosl_inf_neg, tc)
151 1.1 christos {
152 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(-Inf) == (NaN, NaN)");
153 1.1 christos }
154 1.1 christos
155 1.1 christos ATF_TC_BODY(sincosl_inf_neg, tc)
156 1.1 christos {
157 1.1 christos const long double x = -1.0L / 0.0L;
158 1.1 christos long double s, c;
159 1.1 christos
160 1.1 christos sincosl(x, &s, &c);
161 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
162 1.1 christos }
163 1.1 christos
164 1.1 christos ATF_TC(sincosl_inf_pos);
165 1.1 christos ATF_TC_HEAD(sincosl_inf_pos, tc)
166 1.1 christos {
167 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(+Inf) == (NaN, NaN)");
168 1.1 christos }
169 1.1 christos
170 1.1 christos ATF_TC_BODY(sincosl_inf_pos, tc)
171 1.1 christos {
172 1.1 christos const long double x = 1.0L / 0.0L;
173 1.1 christos long double s, c;
174 1.1 christos
175 1.1 christos sincosl(x, &s, &c);
176 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
177 1.1 christos }
178 1.1 christos
179 1.1 christos
180 1.1 christos ATF_TC(sincosl_zero_neg);
181 1.1 christos ATF_TC_HEAD(sincosl_zero_neg, tc)
182 1.1 christos {
183 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(-0.0) == (0.0, 1.0)");
184 1.1 christos }
185 1.1 christos
186 1.1 christos ATF_TC_BODY(sincosl_zero_neg, tc)
187 1.1 christos {
188 1.1 christos const long double x = -0.0L;
189 1.1 christos long double s, c;
190 1.1 christos
191 1.1 christos sincosl(x, &s, &c);
192 1.1 christos ATF_CHECK(s == 0.0 && c == 1.0);
193 1.1 christos }
194 1.1 christos
195 1.1 christos ATF_TC(sincosl_zero_pos);
196 1.1 christos ATF_TC_HEAD(sincosl_zero_pos, tc)
197 1.1 christos {
198 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosl(+0.0) == (0.0, 1.0)");
199 1.1 christos }
200 1.1 christos
201 1.1 christos ATF_TC_BODY(sincosl_zero_pos, tc)
202 1.1 christos {
203 1.1 christos const long double x = 0.0L;
204 1.1 christos long double s, c;
205 1.1 christos
206 1.1 christos sincosl(x, &s, &c);
207 1.1 christos ATF_CHECK(s == 0.0 && c == 1.0);
208 1.1 christos }
209 1.1 christos
210 1.1 christos /*
211 1.1 christos * sincos(3)
212 1.1 christos */
213 1.1 christos ATF_TC(sincos_angles);
214 1.1 christos ATF_TC_HEAD(sincos_angles, tc)
215 1.1 christos {
216 1.1 christos atf_tc_set_md_var(tc, "descr", "Test some selected angles");
217 1.1 christos }
218 1.1 christos
219 1.1 christos ATF_TC_BODY(sincos_angles, tc)
220 1.1 christos {
221 1.1 christos const double eps = DBL_EPSILON;
222 1.1 christos size_t i;
223 1.1 christos
224 1.1 christos for (i = 0; i < __arraycount(sin_angles); i++) {
225 1.1 christos ATF_CHECK_MSG(sin_angles[i].angle == cos_angles[i].angle,
226 1.1 christos "%zu %d %d", i, sin_angles[i].angle, cos_angles[i].angle);
227 1.1 christos int deg = sin_angles[i].angle;
228 1.1 christos ATF_CHECK_MSG(sin_angles[i].x == cos_angles[i].x,
229 1.1 christos "%zu %g %g", i, sin_angles[i].x, cos_angles[i].x);
230 1.1 christos double theta = sin_angles[i].x;
231 1.1 christos double sin_theta = sin_angles[i].y;
232 1.1 christos double cos_theta = cos_angles[i].y;
233 1.1 christos double s, c;
234 1.1 christos
235 1.1 christos sincos(theta, &s, &c);
236 1.1 christos
237 1.1 christos if (fabs((s - sin_theta)/sin_theta) > eps) {
238 1.1 christos atf_tc_fail_nonfatal("sin(%d deg = %.17g) = %.17g"
239 1.1 christos " != %.17g",
240 1.1 christos deg, theta, s, sin_theta);
241 1.1 christos }
242 1.1 christos if (fabs((c - cos_theta)/cos_theta) > eps) {
243 1.1 christos atf_tc_fail_nonfatal("cos(%d deg = %.17g) = %.17g"
244 1.1 christos " != %.17g",
245 1.1 christos deg, theta, c, cos_theta);
246 1.1 christos }
247 1.1 christos }
248 1.1 christos }
249 1.1 christos
250 1.1 christos ATF_TC(sincos_nan);
251 1.1 christos ATF_TC_HEAD(sincos_nan, tc)
252 1.1 christos {
253 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(NaN) == (NaN, NaN)");
254 1.1 christos }
255 1.1 christos
256 1.1 christos ATF_TC_BODY(sincos_nan, tc)
257 1.1 christos {
258 1.1 christos const double x = 0.0L / 0.0L;
259 1.1 christos double s, c;
260 1.1 christos
261 1.1 christos sincos(x, &s, &c);
262 1.1 christos ATF_CHECK(isnan(x) && isnan(s) && isnan(c));
263 1.1 christos }
264 1.1 christos
265 1.1 christos ATF_TC(sincos_inf_neg);
266 1.1 christos ATF_TC_HEAD(sincos_inf_neg, tc)
267 1.1 christos {
268 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(-Inf) == (NaN, NaN)");
269 1.1 christos }
270 1.1 christos
271 1.1 christos ATF_TC_BODY(sincos_inf_neg, tc)
272 1.1 christos {
273 1.1 christos const double x = -1.0L / 0.0L;
274 1.1 christos double s, c;
275 1.1 christos
276 1.1 christos sincos(x, &s, &c);
277 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
278 1.1 christos }
279 1.1 christos
280 1.1 christos ATF_TC(sincos_inf_pos);
281 1.1 christos ATF_TC_HEAD(sincos_inf_pos, tc)
282 1.1 christos {
283 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(+Inf) == (NaN, NaN)");
284 1.1 christos }
285 1.1 christos
286 1.1 christos ATF_TC_BODY(sincos_inf_pos, tc)
287 1.1 christos {
288 1.1 christos const double x = 1.0L / 0.0L;
289 1.1 christos double s, c;
290 1.1 christos
291 1.1 christos sincos(x, &s, &c);
292 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
293 1.1 christos }
294 1.1 christos
295 1.1 christos
296 1.1 christos ATF_TC(sincos_zero_neg);
297 1.1 christos ATF_TC_HEAD(sincos_zero_neg, tc)
298 1.1 christos {
299 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincos(-0.0) == (0.0, 1.0)");
300 1.1 christos }
301 1.1 christos
302 1.1 christos ATF_TC_BODY(sincos_zero_neg, tc)
303 1.1 christos {
304 1.1 christos const double x = -0.0L;
305 1.1 christos double s, c;
306 1.1 christos
307 1.1 christos sincos(x, &s, &c);
308 1.1 christos ATF_CHECK(s == 0 && c == 1.0);
309 1.1 christos }
310 1.1 christos
311 1.1 christos ATF_TC(sincos_zero_pos);
312 1.1 christos ATF_TC_HEAD(sincos_zero_pos, tc)
313 1.1 christos {
314 1.1 christos atf_tc_set_md_var(tc, "descr", "Test cos(+0.0) == (0.0, 1.0)");
315 1.1 christos }
316 1.1 christos
317 1.1 christos ATF_TC_BODY(sincos_zero_pos, tc)
318 1.1 christos {
319 1.1 christos const double x = 0.0L;
320 1.1 christos double s, c;
321 1.1 christos
322 1.1 christos sincos(x, &s, &c);
323 1.1 christos ATF_CHECK(s == 0 && c == 1.0);
324 1.1 christos }
325 1.1 christos
326 1.1 christos /*
327 1.1 christos * sincosf(3)
328 1.1 christos */
329 1.1 christos ATF_TC(sincosf_angles);
330 1.1 christos ATF_TC_HEAD(sincosf_angles, tc)
331 1.1 christos {
332 1.1 christos atf_tc_set_md_var(tc, "descr", "Test some selected angles");
333 1.1 christos }
334 1.1 christos
335 1.1 christos ATF_TC_BODY(sincosf_angles, tc)
336 1.1 christos {
337 1.1 christos const float eps = FLT_EPSILON;
338 1.1 christos size_t i;
339 1.1 christos
340 1.1 christos for (i = 0; i < __arraycount(sin_angles); i++) {
341 1.1 christos ATF_CHECK_MSG(sin_angles[i].angle == cos_angles[i].angle,
342 1.1 christos "%zu %d %d", i, sin_angles[i].angle, cos_angles[i].angle);
343 1.1 christos int deg = sin_angles[i].angle;
344 1.1 christos ATF_CHECK_MSG(sin_angles[i].x == cos_angles[i].x,
345 1.1 christos "%zu %g %g", i, sin_angles[i].x, cos_angles[i].x);
346 1.1 christos float theta = sin_angles[i].x;
347 1.1 christos float sin_theta = sin_angles[i].fy;
348 1.1 christos float cos_theta = cos_angles[i].fy;
349 1.1 christos float s, c;
350 1.1 christos
351 1.1 christos sincosf(theta, &s, &c);
352 1.1 christos if (cos_theta == 999)
353 1.1 christos cos_theta = cos_angles[i].y;
354 1.1 christos if (sin_theta == 999)
355 1.1 christos sin_theta = sin_angles[i].y;
356 1.1 christos
357 1.1 christos if (fabs((s - sin_theta)/sin_theta) > eps) {
358 1.1 christos atf_tc_fail_nonfatal("sin(%d deg = %.8g) = %.8g"
359 1.1 christos " != %.8g",
360 1.1 christos deg, theta, s, sin_theta);
361 1.1 christos }
362 1.1 christos if (fabs((c - cos_theta)/cos_theta) > eps) {
363 1.1 christos atf_tc_fail_nonfatal("cos(%d deg = %.8g) = %.8g"
364 1.1 christos " != %.8g",
365 1.1 christos deg, theta, c, cos_theta);
366 1.1 christos }
367 1.1 christos }
368 1.1 christos }
369 1.1 christos
370 1.1 christos ATF_TC(sincosf_nan);
371 1.1 christos ATF_TC_HEAD(sincosf_nan, tc)
372 1.1 christos {
373 1.1 christos atf_tc_set_md_var(tc, "descr", "Test cosf(NaN) == (NaN, NaN)");
374 1.1 christos }
375 1.1 christos
376 1.1 christos ATF_TC_BODY(sincosf_nan, tc)
377 1.1 christos {
378 1.1 christos const float x = 0.0L / 0.0L;
379 1.1 christos float s, c;
380 1.1 christos
381 1.1 christos sincosf(x, &s, &c);
382 1.1 christos ATF_CHECK(isnan(x) && isnan(s) && isnan(c));
383 1.1 christos }
384 1.1 christos
385 1.1 christos ATF_TC(sincosf_inf_neg);
386 1.1 christos ATF_TC_HEAD(sincosf_inf_neg, tc)
387 1.1 christos {
388 1.1 christos atf_tc_set_md_var(tc, "descr", "Test cosf(-Inf) == (NaN, NaN)");
389 1.1 christos }
390 1.1 christos
391 1.1 christos ATF_TC_BODY(sincosf_inf_neg, tc)
392 1.1 christos {
393 1.1 christos const float x = -1.0L / 0.0L;
394 1.1 christos float s, c;
395 1.1 christos
396 1.1 christos sincosf(x, &s, &c);
397 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
398 1.1 christos
399 1.1 christos }
400 1.1 christos
401 1.1 christos ATF_TC(sincosf_inf_pos);
402 1.1 christos ATF_TC_HEAD(sincosf_inf_pos, tc)
403 1.1 christos {
404 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosf(+Inf) == (NaN, NaN)");
405 1.1 christos }
406 1.1 christos
407 1.1 christos ATF_TC_BODY(sincosf_inf_pos, tc)
408 1.1 christos {
409 1.1 christos const float x = 1.0L / 0.0L;
410 1.1 christos float s, c;
411 1.1 christos
412 1.1 christos sincosf(x, &s, &c);
413 1.1 christos ATF_CHECK(isnan(s) && isnan(c));
414 1.1 christos }
415 1.1 christos
416 1.1 christos
417 1.1 christos ATF_TC(sincosf_zero_neg);
418 1.1 christos ATF_TC_HEAD(sincosf_zero_neg, tc)
419 1.1 christos {
420 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosf(-0.0) == (0.0, 1.0)");
421 1.1 christos }
422 1.1 christos
423 1.1 christos ATF_TC_BODY(sincosf_zero_neg, tc)
424 1.1 christos {
425 1.1 christos const float x = -0.0L;
426 1.1 christos float s, c;
427 1.1 christos
428 1.1 christos sincosf(x, &s, &c);
429 1.1 christos
430 1.1 christos ATF_CHECK(s == 0.0 && c == 1.0);
431 1.1 christos }
432 1.1 christos
433 1.1 christos ATF_TC(sincosf_zero_pos);
434 1.1 christos ATF_TC_HEAD(sincosf_zero_pos, tc)
435 1.1 christos {
436 1.1 christos atf_tc_set_md_var(tc, "descr", "Test sincosf(+0.0) == (0.0, 1.0)");
437 1.1 christos }
438 1.1 christos
439 1.1 christos ATF_TC_BODY(sincosf_zero_pos, tc)
440 1.1 christos {
441 1.1 christos const float x = 0.0L;
442 1.1 christos
443 1.1 christos float s, c;
444 1.1 christos
445 1.1 christos sincosf(x, &s, &c);
446 1.1 christos
447 1.1 christos ATF_CHECK(s == 0 && c == 1.0);
448 1.1 christos }
449 1.1 christos
450 1.1 christos ATF_TP_ADD_TCS(tp)
451 1.1 christos {
452 1.2 riastrad
453 1.1 christos ATF_TP_ADD_TC(tp, sincosl_angles);
454 1.1 christos ATF_TP_ADD_TC(tp, sincosl_nan);
455 1.1 christos ATF_TP_ADD_TC(tp, sincosl_inf_neg);
456 1.1 christos ATF_TP_ADD_TC(tp, sincosl_inf_pos);
457 1.1 christos ATF_TP_ADD_TC(tp, sincosl_zero_neg);
458 1.1 christos ATF_TP_ADD_TC(tp, sincosl_zero_pos);
459 1.1 christos
460 1.1 christos ATF_TP_ADD_TC(tp, sincos_angles);
461 1.1 christos ATF_TP_ADD_TC(tp, sincos_nan);
462 1.1 christos ATF_TP_ADD_TC(tp, sincos_inf_neg);
463 1.1 christos ATF_TP_ADD_TC(tp, sincos_inf_pos);
464 1.1 christos ATF_TP_ADD_TC(tp, sincos_zero_neg);
465 1.1 christos ATF_TP_ADD_TC(tp, sincos_zero_pos);
466 1.1 christos
467 1.1 christos ATF_TP_ADD_TC(tp, sincosf_angles);
468 1.1 christos ATF_TP_ADD_TC(tp, sincosf_nan);
469 1.1 christos ATF_TP_ADD_TC(tp, sincosf_inf_neg);
470 1.1 christos ATF_TP_ADD_TC(tp, sincosf_inf_pos);
471 1.1 christos ATF_TP_ADD_TC(tp, sincosf_zero_neg);
472 1.1 christos ATF_TP_ADD_TC(tp, sincosf_zero_pos);
473 1.1 christos
474 1.1 christos return atf_no_error();
475 1.1 christos }
476