1*57718be8SEnji Cooper /* $NetBSD: t_ceil.c,v 1.10 2014/03/03 10:39:08 martin Exp $ */
2*57718be8SEnji Cooper
3*57718be8SEnji Cooper /*-
4*57718be8SEnji Cooper * Copyright (c) 2011 The NetBSD Foundation, Inc.
5*57718be8SEnji Cooper * All rights reserved.
6*57718be8SEnji Cooper *
7*57718be8SEnji Cooper * This code is derived from software contributed to The NetBSD Foundation
8*57718be8SEnji Cooper * by Jukka Ruohonen.
9*57718be8SEnji Cooper *
10*57718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without
11*57718be8SEnji Cooper * modification, are permitted provided that the following conditions
12*57718be8SEnji Cooper * are met:
13*57718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright
14*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer.
15*57718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright
16*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the
17*57718be8SEnji Cooper * documentation and/or other materials provided with the distribution.
18*57718be8SEnji Cooper *
19*57718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20*57718be8SEnji Cooper * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21*57718be8SEnji Cooper * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22*57718be8SEnji Cooper * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23*57718be8SEnji Cooper * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*57718be8SEnji Cooper * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*57718be8SEnji Cooper * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*57718be8SEnji Cooper * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*57718be8SEnji Cooper * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*57718be8SEnji Cooper * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*57718be8SEnji Cooper * POSSIBILITY OF SUCH DAMAGE.
30*57718be8SEnji Cooper */
31*57718be8SEnji Cooper #include <sys/cdefs.h>
32*57718be8SEnji Cooper __RCSID("$NetBSD: t_ceil.c,v 1.10 2014/03/03 10:39:08 martin Exp $");
33*57718be8SEnji Cooper
34*57718be8SEnji Cooper #include <atf-c.h>
35*57718be8SEnji Cooper #include <math.h>
36*57718be8SEnji Cooper #include <limits.h>
37*57718be8SEnji Cooper #include <stdio.h>
38*57718be8SEnji Cooper
39*57718be8SEnji Cooper #ifdef __vax__
40*57718be8SEnji Cooper #define SMALL_NUM 1.0e-38
41*57718be8SEnji Cooper #else
42*57718be8SEnji Cooper #define SMALL_NUM 1.0e-40
43*57718be8SEnji Cooper #endif
44*57718be8SEnji Cooper
45*57718be8SEnji Cooper /*
46*57718be8SEnji Cooper * ceil(3)
47*57718be8SEnji Cooper */
48*57718be8SEnji Cooper ATF_TC(ceil_basic);
ATF_TC_HEAD(ceil_basic,tc)49*57718be8SEnji Cooper ATF_TC_HEAD(ceil_basic, tc)
50*57718be8SEnji Cooper {
51*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of ceil(3)");
52*57718be8SEnji Cooper }
53*57718be8SEnji Cooper
ATF_TC_BODY(ceil_basic,tc)54*57718be8SEnji Cooper ATF_TC_BODY(ceil_basic, tc)
55*57718be8SEnji Cooper {
56*57718be8SEnji Cooper const double x = 0.999999999999999;
57*57718be8SEnji Cooper const double y = 0.000000000000001;
58*57718be8SEnji Cooper
59*57718be8SEnji Cooper ATF_CHECK(fabs(ceil(x) - 1) < SMALL_NUM);
60*57718be8SEnji Cooper ATF_CHECK(fabs(ceil(y) - 1) < SMALL_NUM);
61*57718be8SEnji Cooper }
62*57718be8SEnji Cooper
63*57718be8SEnji Cooper ATF_TC(ceil_nan);
ATF_TC_HEAD(ceil_nan,tc)64*57718be8SEnji Cooper ATF_TC_HEAD(ceil_nan, tc)
65*57718be8SEnji Cooper {
66*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceil(NaN) == NaN");
67*57718be8SEnji Cooper }
68*57718be8SEnji Cooper
ATF_TC_BODY(ceil_nan,tc)69*57718be8SEnji Cooper ATF_TC_BODY(ceil_nan, tc)
70*57718be8SEnji Cooper {
71*57718be8SEnji Cooper const double x = 0.0L / 0.0L;
72*57718be8SEnji Cooper
73*57718be8SEnji Cooper ATF_CHECK(isnan(ceil(x)) != 0);
74*57718be8SEnji Cooper }
75*57718be8SEnji Cooper
76*57718be8SEnji Cooper ATF_TC(ceil_inf_neg);
ATF_TC_HEAD(ceil_inf_neg,tc)77*57718be8SEnji Cooper ATF_TC_HEAD(ceil_inf_neg, tc)
78*57718be8SEnji Cooper {
79*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceil(-Inf) == -Inf");
80*57718be8SEnji Cooper }
81*57718be8SEnji Cooper
ATF_TC_BODY(ceil_inf_neg,tc)82*57718be8SEnji Cooper ATF_TC_BODY(ceil_inf_neg, tc)
83*57718be8SEnji Cooper {
84*57718be8SEnji Cooper const double x = -1.0L / 0.0L;
85*57718be8SEnji Cooper double y = ceil(x);
86*57718be8SEnji Cooper
87*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
88*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceil(-Inf) != -Inf");
89*57718be8SEnji Cooper }
90*57718be8SEnji Cooper
91*57718be8SEnji Cooper ATF_TC(ceil_inf_pos);
ATF_TC_HEAD(ceil_inf_pos,tc)92*57718be8SEnji Cooper ATF_TC_HEAD(ceil_inf_pos, tc)
93*57718be8SEnji Cooper {
94*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceil(+Inf) == +Inf");
95*57718be8SEnji Cooper }
96*57718be8SEnji Cooper
ATF_TC_BODY(ceil_inf_pos,tc)97*57718be8SEnji Cooper ATF_TC_BODY(ceil_inf_pos, tc)
98*57718be8SEnji Cooper {
99*57718be8SEnji Cooper const double x = 1.0L / 0.0L;
100*57718be8SEnji Cooper double y = ceil(x);
101*57718be8SEnji Cooper
102*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
103*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceil(+Inf) != +Inf");
104*57718be8SEnji Cooper }
105*57718be8SEnji Cooper
106*57718be8SEnji Cooper ATF_TC(ceil_zero_neg);
ATF_TC_HEAD(ceil_zero_neg,tc)107*57718be8SEnji Cooper ATF_TC_HEAD(ceil_zero_neg, tc)
108*57718be8SEnji Cooper {
109*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceil(-0.0) == -0.0");
110*57718be8SEnji Cooper }
111*57718be8SEnji Cooper
ATF_TC_BODY(ceil_zero_neg,tc)112*57718be8SEnji Cooper ATF_TC_BODY(ceil_zero_neg, tc)
113*57718be8SEnji Cooper {
114*57718be8SEnji Cooper const double x = -0.0L;
115*57718be8SEnji Cooper double y = ceil(x);
116*57718be8SEnji Cooper
117*57718be8SEnji Cooper if (fabs(y) > 0.0 || signbit(y) == 0)
118*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceil(-0.0) != -0.0");
119*57718be8SEnji Cooper }
120*57718be8SEnji Cooper
121*57718be8SEnji Cooper ATF_TC(ceil_zero_pos);
ATF_TC_HEAD(ceil_zero_pos,tc)122*57718be8SEnji Cooper ATF_TC_HEAD(ceil_zero_pos, tc)
123*57718be8SEnji Cooper {
124*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceil(+0.0) == +0.0");
125*57718be8SEnji Cooper }
126*57718be8SEnji Cooper
ATF_TC_BODY(ceil_zero_pos,tc)127*57718be8SEnji Cooper ATF_TC_BODY(ceil_zero_pos, tc)
128*57718be8SEnji Cooper {
129*57718be8SEnji Cooper const double x = 0.0L;
130*57718be8SEnji Cooper double y = ceil(x);
131*57718be8SEnji Cooper
132*57718be8SEnji Cooper if (fabs(y) > 0.0 || signbit(y) != 0)
133*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceil(+0.0) != +0.0");
134*57718be8SEnji Cooper }
135*57718be8SEnji Cooper
136*57718be8SEnji Cooper /*
137*57718be8SEnji Cooper * ceilf(3)
138*57718be8SEnji Cooper */
139*57718be8SEnji Cooper ATF_TC(ceilf_basic);
ATF_TC_HEAD(ceilf_basic,tc)140*57718be8SEnji Cooper ATF_TC_HEAD(ceilf_basic, tc)
141*57718be8SEnji Cooper {
142*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of ceilf(3)");
143*57718be8SEnji Cooper }
144*57718be8SEnji Cooper
ATF_TC_BODY(ceilf_basic,tc)145*57718be8SEnji Cooper ATF_TC_BODY(ceilf_basic, tc)
146*57718be8SEnji Cooper {
147*57718be8SEnji Cooper const float x = 0.9999999;
148*57718be8SEnji Cooper const float y = 0.0000001;
149*57718be8SEnji Cooper
150*57718be8SEnji Cooper ATF_CHECK(fabsf(ceilf(x) - 1) < SMALL_NUM);
151*57718be8SEnji Cooper ATF_CHECK(fabsf(ceilf(y) - 1) < SMALL_NUM);
152*57718be8SEnji Cooper }
153*57718be8SEnji Cooper
154*57718be8SEnji Cooper ATF_TC(ceilf_nan);
ATF_TC_HEAD(ceilf_nan,tc)155*57718be8SEnji Cooper ATF_TC_HEAD(ceilf_nan, tc)
156*57718be8SEnji Cooper {
157*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceilf(NaN) == NaN");
158*57718be8SEnji Cooper }
159*57718be8SEnji Cooper
ATF_TC_BODY(ceilf_nan,tc)160*57718be8SEnji Cooper ATF_TC_BODY(ceilf_nan, tc)
161*57718be8SEnji Cooper {
162*57718be8SEnji Cooper const float x = 0.0L / 0.0L;
163*57718be8SEnji Cooper
164*57718be8SEnji Cooper ATF_CHECK(isnan(ceilf(x)) != 0);
165*57718be8SEnji Cooper }
166*57718be8SEnji Cooper
167*57718be8SEnji Cooper ATF_TC(ceilf_inf_neg);
ATF_TC_HEAD(ceilf_inf_neg,tc)168*57718be8SEnji Cooper ATF_TC_HEAD(ceilf_inf_neg, tc)
169*57718be8SEnji Cooper {
170*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceilf(-Inf) == -Inf");
171*57718be8SEnji Cooper }
172*57718be8SEnji Cooper
ATF_TC_BODY(ceilf_inf_neg,tc)173*57718be8SEnji Cooper ATF_TC_BODY(ceilf_inf_neg, tc)
174*57718be8SEnji Cooper {
175*57718be8SEnji Cooper const float x = -1.0L / 0.0L;
176*57718be8SEnji Cooper float y = ceilf(x);
177*57718be8SEnji Cooper
178*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
179*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceilf(-Inf) != -Inf");
180*57718be8SEnji Cooper }
181*57718be8SEnji Cooper
182*57718be8SEnji Cooper ATF_TC(ceilf_inf_pos);
ATF_TC_HEAD(ceilf_inf_pos,tc)183*57718be8SEnji Cooper ATF_TC_HEAD(ceilf_inf_pos, tc)
184*57718be8SEnji Cooper {
185*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceilf(+Inf) == +Inf");
186*57718be8SEnji Cooper }
187*57718be8SEnji Cooper
ATF_TC_BODY(ceilf_inf_pos,tc)188*57718be8SEnji Cooper ATF_TC_BODY(ceilf_inf_pos, tc)
189*57718be8SEnji Cooper {
190*57718be8SEnji Cooper const float x = 1.0L / 0.0L;
191*57718be8SEnji Cooper float y = ceilf(x);
192*57718be8SEnji Cooper
193*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
194*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceilf(+Inf) != +Inf");
195*57718be8SEnji Cooper }
196*57718be8SEnji Cooper
197*57718be8SEnji Cooper ATF_TC(ceilf_zero_neg);
ATF_TC_HEAD(ceilf_zero_neg,tc)198*57718be8SEnji Cooper ATF_TC_HEAD(ceilf_zero_neg, tc)
199*57718be8SEnji Cooper {
200*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceilf(-0.0) == -0.0");
201*57718be8SEnji Cooper }
202*57718be8SEnji Cooper
ATF_TC_BODY(ceilf_zero_neg,tc)203*57718be8SEnji Cooper ATF_TC_BODY(ceilf_zero_neg, tc)
204*57718be8SEnji Cooper {
205*57718be8SEnji Cooper const float x = -0.0L;
206*57718be8SEnji Cooper float y = ceilf(x);
207*57718be8SEnji Cooper
208*57718be8SEnji Cooper if (fabsf(y) > 0.0 || signbit(y) == 0)
209*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceilf(-0.0) != -0.0");
210*57718be8SEnji Cooper }
211*57718be8SEnji Cooper
212*57718be8SEnji Cooper ATF_TC(ceilf_zero_pos);
ATF_TC_HEAD(ceilf_zero_pos,tc)213*57718be8SEnji Cooper ATF_TC_HEAD(ceilf_zero_pos, tc)
214*57718be8SEnji Cooper {
215*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceilf(+0.0) == +0.0");
216*57718be8SEnji Cooper }
217*57718be8SEnji Cooper
ATF_TC_BODY(ceilf_zero_pos,tc)218*57718be8SEnji Cooper ATF_TC_BODY(ceilf_zero_pos, tc)
219*57718be8SEnji Cooper {
220*57718be8SEnji Cooper const float x = 0.0L;
221*57718be8SEnji Cooper float y = ceilf(x);
222*57718be8SEnji Cooper
223*57718be8SEnji Cooper if (fabsf(y) > 0.0 || signbit(y) != 0)
224*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceilf(+0.0) != +0.0");
225*57718be8SEnji Cooper }
226*57718be8SEnji Cooper
227*57718be8SEnji Cooper /*
228*57718be8SEnji Cooper * ceill(3)
229*57718be8SEnji Cooper */
230*57718be8SEnji Cooper ATF_TC(ceill_basic);
ATF_TC_HEAD(ceill_basic,tc)231*57718be8SEnji Cooper ATF_TC_HEAD(ceill_basic, tc)
232*57718be8SEnji Cooper {
233*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of ceill(3)");
234*57718be8SEnji Cooper }
235*57718be8SEnji Cooper
ATF_TC_BODY(ceill_basic,tc)236*57718be8SEnji Cooper ATF_TC_BODY(ceill_basic, tc)
237*57718be8SEnji Cooper {
238*57718be8SEnji Cooper const long double x = 0.9999999;
239*57718be8SEnji Cooper const long double y = 0.0000001;
240*57718be8SEnji Cooper
241*57718be8SEnji Cooper ATF_CHECK(fabsl(ceill(x) - 1) < SMALL_NUM);
242*57718be8SEnji Cooper ATF_CHECK(fabsl(ceill(y) - 1) < SMALL_NUM);
243*57718be8SEnji Cooper }
244*57718be8SEnji Cooper
245*57718be8SEnji Cooper ATF_TC(ceill_nan);
ATF_TC_HEAD(ceill_nan,tc)246*57718be8SEnji Cooper ATF_TC_HEAD(ceill_nan, tc)
247*57718be8SEnji Cooper {
248*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceill(NaN) == NaN");
249*57718be8SEnji Cooper }
250*57718be8SEnji Cooper
ATF_TC_BODY(ceill_nan,tc)251*57718be8SEnji Cooper ATF_TC_BODY(ceill_nan, tc)
252*57718be8SEnji Cooper {
253*57718be8SEnji Cooper const long double x = 0.0L / 0.0L;
254*57718be8SEnji Cooper
255*57718be8SEnji Cooper ATF_CHECK(isnan(ceill(x)) != 0);
256*57718be8SEnji Cooper }
257*57718be8SEnji Cooper
258*57718be8SEnji Cooper ATF_TC(ceill_inf_neg);
ATF_TC_HEAD(ceill_inf_neg,tc)259*57718be8SEnji Cooper ATF_TC_HEAD(ceill_inf_neg, tc)
260*57718be8SEnji Cooper {
261*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceill(-Inf) == -Inf");
262*57718be8SEnji Cooper }
263*57718be8SEnji Cooper
ATF_TC_BODY(ceill_inf_neg,tc)264*57718be8SEnji Cooper ATF_TC_BODY(ceill_inf_neg, tc)
265*57718be8SEnji Cooper {
266*57718be8SEnji Cooper const long double x = -1.0L / 0.0L;
267*57718be8SEnji Cooper long double y = ceill(x);
268*57718be8SEnji Cooper
269*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
270*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceill(-Inf) != -Inf");
271*57718be8SEnji Cooper }
272*57718be8SEnji Cooper
273*57718be8SEnji Cooper ATF_TC(ceill_inf_pos);
ATF_TC_HEAD(ceill_inf_pos,tc)274*57718be8SEnji Cooper ATF_TC_HEAD(ceill_inf_pos, tc)
275*57718be8SEnji Cooper {
276*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceill(+Inf) == +Inf");
277*57718be8SEnji Cooper }
278*57718be8SEnji Cooper
ATF_TC_BODY(ceill_inf_pos,tc)279*57718be8SEnji Cooper ATF_TC_BODY(ceill_inf_pos, tc)
280*57718be8SEnji Cooper {
281*57718be8SEnji Cooper const long double x = 1.0L / 0.0L;
282*57718be8SEnji Cooper long double y = ceill(x);
283*57718be8SEnji Cooper
284*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
285*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceill(+Inf) != +Inf");
286*57718be8SEnji Cooper }
287*57718be8SEnji Cooper
288*57718be8SEnji Cooper ATF_TC(ceill_zero_neg);
ATF_TC_HEAD(ceill_zero_neg,tc)289*57718be8SEnji Cooper ATF_TC_HEAD(ceill_zero_neg, tc)
290*57718be8SEnji Cooper {
291*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceill(-0.0) == -0.0");
292*57718be8SEnji Cooper }
293*57718be8SEnji Cooper
ATF_TC_BODY(ceill_zero_neg,tc)294*57718be8SEnji Cooper ATF_TC_BODY(ceill_zero_neg, tc)
295*57718be8SEnji Cooper {
296*57718be8SEnji Cooper const long double x = -0.0L;
297*57718be8SEnji Cooper long double y = ceill(x);
298*57718be8SEnji Cooper
299*57718be8SEnji Cooper if (fabsl(y) > 0.0 || signbit(y) == 0)
300*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceill(-0.0) != -0.0");
301*57718be8SEnji Cooper }
302*57718be8SEnji Cooper
303*57718be8SEnji Cooper ATF_TC(ceill_zero_pos);
ATF_TC_HEAD(ceill_zero_pos,tc)304*57718be8SEnji Cooper ATF_TC_HEAD(ceill_zero_pos, tc)
305*57718be8SEnji Cooper {
306*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test ceill(+0.0) == +0.0");
307*57718be8SEnji Cooper }
308*57718be8SEnji Cooper
ATF_TC_BODY(ceill_zero_pos,tc)309*57718be8SEnji Cooper ATF_TC_BODY(ceill_zero_pos, tc)
310*57718be8SEnji Cooper {
311*57718be8SEnji Cooper const long double x = 0.0L;
312*57718be8SEnji Cooper long double y = ceill(x);
313*57718be8SEnji Cooper
314*57718be8SEnji Cooper if (fabsl(y) > 0.0 || signbit(y) != 0)
315*57718be8SEnji Cooper atf_tc_fail_nonfatal("ceill(+0.0) != +0.0");
316*57718be8SEnji Cooper }
317*57718be8SEnji Cooper
318*57718be8SEnji Cooper /*
319*57718be8SEnji Cooper * floor(3)
320*57718be8SEnji Cooper */
321*57718be8SEnji Cooper ATF_TC(floor_basic);
ATF_TC_HEAD(floor_basic,tc)322*57718be8SEnji Cooper ATF_TC_HEAD(floor_basic, tc)
323*57718be8SEnji Cooper {
324*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of floor(3)");
325*57718be8SEnji Cooper }
326*57718be8SEnji Cooper
ATF_TC_BODY(floor_basic,tc)327*57718be8SEnji Cooper ATF_TC_BODY(floor_basic, tc)
328*57718be8SEnji Cooper {
329*57718be8SEnji Cooper const double x = 0.999999999999999;
330*57718be8SEnji Cooper const double y = 0.000000000000001;
331*57718be8SEnji Cooper
332*57718be8SEnji Cooper ATF_CHECK(floor(x) < SMALL_NUM);
333*57718be8SEnji Cooper ATF_CHECK(floor(y) < SMALL_NUM);
334*57718be8SEnji Cooper }
335*57718be8SEnji Cooper
336*57718be8SEnji Cooper ATF_TC(floor_nan);
ATF_TC_HEAD(floor_nan,tc)337*57718be8SEnji Cooper ATF_TC_HEAD(floor_nan, tc)
338*57718be8SEnji Cooper {
339*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floor(NaN) == NaN");
340*57718be8SEnji Cooper }
341*57718be8SEnji Cooper
ATF_TC_BODY(floor_nan,tc)342*57718be8SEnji Cooper ATF_TC_BODY(floor_nan, tc)
343*57718be8SEnji Cooper {
344*57718be8SEnji Cooper const double x = 0.0L / 0.0L;
345*57718be8SEnji Cooper
346*57718be8SEnji Cooper ATF_CHECK(isnan(floor(x)) != 0);
347*57718be8SEnji Cooper }
348*57718be8SEnji Cooper
349*57718be8SEnji Cooper ATF_TC(floor_inf_neg);
ATF_TC_HEAD(floor_inf_neg,tc)350*57718be8SEnji Cooper ATF_TC_HEAD(floor_inf_neg, tc)
351*57718be8SEnji Cooper {
352*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floor(-Inf) == -Inf");
353*57718be8SEnji Cooper }
354*57718be8SEnji Cooper
ATF_TC_BODY(floor_inf_neg,tc)355*57718be8SEnji Cooper ATF_TC_BODY(floor_inf_neg, tc)
356*57718be8SEnji Cooper {
357*57718be8SEnji Cooper const double x = -1.0L / 0.0L;
358*57718be8SEnji Cooper double y = floor(x);
359*57718be8SEnji Cooper
360*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
361*57718be8SEnji Cooper atf_tc_fail_nonfatal("floor(-Inf) != -Inf");
362*57718be8SEnji Cooper }
363*57718be8SEnji Cooper
364*57718be8SEnji Cooper ATF_TC(floor_inf_pos);
ATF_TC_HEAD(floor_inf_pos,tc)365*57718be8SEnji Cooper ATF_TC_HEAD(floor_inf_pos, tc)
366*57718be8SEnji Cooper {
367*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floor(+Inf) == +Inf");
368*57718be8SEnji Cooper }
369*57718be8SEnji Cooper
ATF_TC_BODY(floor_inf_pos,tc)370*57718be8SEnji Cooper ATF_TC_BODY(floor_inf_pos, tc)
371*57718be8SEnji Cooper {
372*57718be8SEnji Cooper const double x = 1.0L / 0.0L;
373*57718be8SEnji Cooper double y = floor(x);
374*57718be8SEnji Cooper
375*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
376*57718be8SEnji Cooper atf_tc_fail_nonfatal("floor(+Inf) != +Inf");
377*57718be8SEnji Cooper }
378*57718be8SEnji Cooper
379*57718be8SEnji Cooper ATF_TC(floor_zero_neg);
ATF_TC_HEAD(floor_zero_neg,tc)380*57718be8SEnji Cooper ATF_TC_HEAD(floor_zero_neg, tc)
381*57718be8SEnji Cooper {
382*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floor(-0.0) == -0.0");
383*57718be8SEnji Cooper }
384*57718be8SEnji Cooper
ATF_TC_BODY(floor_zero_neg,tc)385*57718be8SEnji Cooper ATF_TC_BODY(floor_zero_neg, tc)
386*57718be8SEnji Cooper {
387*57718be8SEnji Cooper const double x = -0.0L;
388*57718be8SEnji Cooper double y = floor(x);
389*57718be8SEnji Cooper
390*57718be8SEnji Cooper if (fabs(y) > 0.0 || signbit(y) == 0)
391*57718be8SEnji Cooper atf_tc_fail_nonfatal("floor(-0.0) != -0.0");
392*57718be8SEnji Cooper }
393*57718be8SEnji Cooper
394*57718be8SEnji Cooper ATF_TC(floor_zero_pos);
ATF_TC_HEAD(floor_zero_pos,tc)395*57718be8SEnji Cooper ATF_TC_HEAD(floor_zero_pos, tc)
396*57718be8SEnji Cooper {
397*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floor(+0.0) == +0.0");
398*57718be8SEnji Cooper }
399*57718be8SEnji Cooper
ATF_TC_BODY(floor_zero_pos,tc)400*57718be8SEnji Cooper ATF_TC_BODY(floor_zero_pos, tc)
401*57718be8SEnji Cooper {
402*57718be8SEnji Cooper const double x = 0.0L;
403*57718be8SEnji Cooper double y = floor(x);
404*57718be8SEnji Cooper
405*57718be8SEnji Cooper if (fabs(y) > 0.0 || signbit(y) != 0)
406*57718be8SEnji Cooper atf_tc_fail_nonfatal("floor(+0.0) != +0.0");
407*57718be8SEnji Cooper }
408*57718be8SEnji Cooper
409*57718be8SEnji Cooper /*
410*57718be8SEnji Cooper * floorf(3)
411*57718be8SEnji Cooper */
412*57718be8SEnji Cooper ATF_TC(floorf_basic);
ATF_TC_HEAD(floorf_basic,tc)413*57718be8SEnji Cooper ATF_TC_HEAD(floorf_basic, tc)
414*57718be8SEnji Cooper {
415*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of floorf(3)");
416*57718be8SEnji Cooper }
417*57718be8SEnji Cooper
ATF_TC_BODY(floorf_basic,tc)418*57718be8SEnji Cooper ATF_TC_BODY(floorf_basic, tc)
419*57718be8SEnji Cooper {
420*57718be8SEnji Cooper const float x = 0.9999999;
421*57718be8SEnji Cooper const float y = 0.0000001;
422*57718be8SEnji Cooper
423*57718be8SEnji Cooper ATF_CHECK(floorf(x) < SMALL_NUM);
424*57718be8SEnji Cooper ATF_CHECK(floorf(y) < SMALL_NUM);
425*57718be8SEnji Cooper }
426*57718be8SEnji Cooper
427*57718be8SEnji Cooper ATF_TC(floorf_nan);
ATF_TC_HEAD(floorf_nan,tc)428*57718be8SEnji Cooper ATF_TC_HEAD(floorf_nan, tc)
429*57718be8SEnji Cooper {
430*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorf(NaN) == NaN");
431*57718be8SEnji Cooper }
432*57718be8SEnji Cooper
ATF_TC_BODY(floorf_nan,tc)433*57718be8SEnji Cooper ATF_TC_BODY(floorf_nan, tc)
434*57718be8SEnji Cooper {
435*57718be8SEnji Cooper const float x = 0.0L / 0.0L;
436*57718be8SEnji Cooper
437*57718be8SEnji Cooper ATF_CHECK(isnan(floorf(x)) != 0);
438*57718be8SEnji Cooper }
439*57718be8SEnji Cooper
440*57718be8SEnji Cooper ATF_TC(floorf_inf_neg);
ATF_TC_HEAD(floorf_inf_neg,tc)441*57718be8SEnji Cooper ATF_TC_HEAD(floorf_inf_neg, tc)
442*57718be8SEnji Cooper {
443*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorf(-Inf) == -Inf");
444*57718be8SEnji Cooper }
445*57718be8SEnji Cooper
ATF_TC_BODY(floorf_inf_neg,tc)446*57718be8SEnji Cooper ATF_TC_BODY(floorf_inf_neg, tc)
447*57718be8SEnji Cooper {
448*57718be8SEnji Cooper const float x = -1.0L / 0.0L;
449*57718be8SEnji Cooper float y = floorf(x);
450*57718be8SEnji Cooper
451*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
452*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorf(-Inf) != -Inf");
453*57718be8SEnji Cooper }
454*57718be8SEnji Cooper
455*57718be8SEnji Cooper ATF_TC(floorf_inf_pos);
ATF_TC_HEAD(floorf_inf_pos,tc)456*57718be8SEnji Cooper ATF_TC_HEAD(floorf_inf_pos, tc)
457*57718be8SEnji Cooper {
458*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorf(+Inf) == +Inf");
459*57718be8SEnji Cooper }
460*57718be8SEnji Cooper
ATF_TC_BODY(floorf_inf_pos,tc)461*57718be8SEnji Cooper ATF_TC_BODY(floorf_inf_pos, tc)
462*57718be8SEnji Cooper {
463*57718be8SEnji Cooper const float x = 1.0L / 0.0L;
464*57718be8SEnji Cooper float y = floorf(x);
465*57718be8SEnji Cooper
466*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
467*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorf(+Inf) != +Inf");
468*57718be8SEnji Cooper }
469*57718be8SEnji Cooper
470*57718be8SEnji Cooper ATF_TC(floorf_zero_neg);
ATF_TC_HEAD(floorf_zero_neg,tc)471*57718be8SEnji Cooper ATF_TC_HEAD(floorf_zero_neg, tc)
472*57718be8SEnji Cooper {
473*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorf(-0.0) == -0.0");
474*57718be8SEnji Cooper }
475*57718be8SEnji Cooper
ATF_TC_BODY(floorf_zero_neg,tc)476*57718be8SEnji Cooper ATF_TC_BODY(floorf_zero_neg, tc)
477*57718be8SEnji Cooper {
478*57718be8SEnji Cooper const float x = -0.0L;
479*57718be8SEnji Cooper float y = floorf(x);
480*57718be8SEnji Cooper
481*57718be8SEnji Cooper if (fabsf(y) > 0.0 || signbit(y) == 0)
482*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorf(-0.0) != -0.0");
483*57718be8SEnji Cooper }
484*57718be8SEnji Cooper
485*57718be8SEnji Cooper ATF_TC(floorf_zero_pos);
ATF_TC_HEAD(floorf_zero_pos,tc)486*57718be8SEnji Cooper ATF_TC_HEAD(floorf_zero_pos, tc)
487*57718be8SEnji Cooper {
488*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorf(+0.0) == +0.0");
489*57718be8SEnji Cooper }
490*57718be8SEnji Cooper
ATF_TC_BODY(floorf_zero_pos,tc)491*57718be8SEnji Cooper ATF_TC_BODY(floorf_zero_pos, tc)
492*57718be8SEnji Cooper {
493*57718be8SEnji Cooper const float x = 0.0L;
494*57718be8SEnji Cooper float y = floorf(x);
495*57718be8SEnji Cooper
496*57718be8SEnji Cooper if (fabsf(y) > 0.0 || signbit(y) != 0)
497*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorf(+0.0) != +0.0");
498*57718be8SEnji Cooper }
499*57718be8SEnji Cooper
500*57718be8SEnji Cooper /*
501*57718be8SEnji Cooper * floorl(3)
502*57718be8SEnji Cooper */
503*57718be8SEnji Cooper ATF_TC(floorl_basic);
ATF_TC_HEAD(floorl_basic,tc)504*57718be8SEnji Cooper ATF_TC_HEAD(floorl_basic, tc)
505*57718be8SEnji Cooper {
506*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of floorl(3)");
507*57718be8SEnji Cooper }
508*57718be8SEnji Cooper
ATF_TC_BODY(floorl_basic,tc)509*57718be8SEnji Cooper ATF_TC_BODY(floorl_basic, tc)
510*57718be8SEnji Cooper {
511*57718be8SEnji Cooper const long double x = 0.9999999;
512*57718be8SEnji Cooper const long double y = 0.0000001;
513*57718be8SEnji Cooper
514*57718be8SEnji Cooper ATF_CHECK(floorl(x) < SMALL_NUM);
515*57718be8SEnji Cooper ATF_CHECK(floorl(y) < SMALL_NUM);
516*57718be8SEnji Cooper }
517*57718be8SEnji Cooper
518*57718be8SEnji Cooper ATF_TC(floorl_nan);
ATF_TC_HEAD(floorl_nan,tc)519*57718be8SEnji Cooper ATF_TC_HEAD(floorl_nan, tc)
520*57718be8SEnji Cooper {
521*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorl(NaN) == NaN");
522*57718be8SEnji Cooper }
523*57718be8SEnji Cooper
ATF_TC_BODY(floorl_nan,tc)524*57718be8SEnji Cooper ATF_TC_BODY(floorl_nan, tc)
525*57718be8SEnji Cooper {
526*57718be8SEnji Cooper const long double x = 0.0L / 0.0L;
527*57718be8SEnji Cooper
528*57718be8SEnji Cooper ATF_CHECK(isnan(floorl(x)) != 0);
529*57718be8SEnji Cooper }
530*57718be8SEnji Cooper
531*57718be8SEnji Cooper ATF_TC(floorl_inf_neg);
ATF_TC_HEAD(floorl_inf_neg,tc)532*57718be8SEnji Cooper ATF_TC_HEAD(floorl_inf_neg, tc)
533*57718be8SEnji Cooper {
534*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorl(-Inf) == -Inf");
535*57718be8SEnji Cooper }
536*57718be8SEnji Cooper
ATF_TC_BODY(floorl_inf_neg,tc)537*57718be8SEnji Cooper ATF_TC_BODY(floorl_inf_neg, tc)
538*57718be8SEnji Cooper {
539*57718be8SEnji Cooper const long double x = -1.0L / 0.0L;
540*57718be8SEnji Cooper long double y = floorl(x);
541*57718be8SEnji Cooper
542*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
543*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorl(-Inf) != -Inf");
544*57718be8SEnji Cooper }
545*57718be8SEnji Cooper
546*57718be8SEnji Cooper ATF_TC(floorl_inf_pos);
ATF_TC_HEAD(floorl_inf_pos,tc)547*57718be8SEnji Cooper ATF_TC_HEAD(floorl_inf_pos, tc)
548*57718be8SEnji Cooper {
549*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorl(+Inf) == +Inf");
550*57718be8SEnji Cooper }
551*57718be8SEnji Cooper
ATF_TC_BODY(floorl_inf_pos,tc)552*57718be8SEnji Cooper ATF_TC_BODY(floorl_inf_pos, tc)
553*57718be8SEnji Cooper {
554*57718be8SEnji Cooper const long double x = 1.0L / 0.0L;
555*57718be8SEnji Cooper long double y = floorl(x);
556*57718be8SEnji Cooper
557*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
558*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorl(+Inf) != +Inf");
559*57718be8SEnji Cooper }
560*57718be8SEnji Cooper
561*57718be8SEnji Cooper ATF_TC(floorl_zero_neg);
ATF_TC_HEAD(floorl_zero_neg,tc)562*57718be8SEnji Cooper ATF_TC_HEAD(floorl_zero_neg, tc)
563*57718be8SEnji Cooper {
564*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorl(-0.0) == -0.0");
565*57718be8SEnji Cooper }
566*57718be8SEnji Cooper
ATF_TC_BODY(floorl_zero_neg,tc)567*57718be8SEnji Cooper ATF_TC_BODY(floorl_zero_neg, tc)
568*57718be8SEnji Cooper {
569*57718be8SEnji Cooper const long double x = -0.0L;
570*57718be8SEnji Cooper long double y = floorl(x);
571*57718be8SEnji Cooper
572*57718be8SEnji Cooper if (fabsl(y) > 0.0 || signbit(y) == 0)
573*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorl(-0.0) != -0.0");
574*57718be8SEnji Cooper }
575*57718be8SEnji Cooper
576*57718be8SEnji Cooper ATF_TC(floorl_zero_pos);
ATF_TC_HEAD(floorl_zero_pos,tc)577*57718be8SEnji Cooper ATF_TC_HEAD(floorl_zero_pos, tc)
578*57718be8SEnji Cooper {
579*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test floorl(+0.0) == +0.0");
580*57718be8SEnji Cooper }
581*57718be8SEnji Cooper
ATF_TC_BODY(floorl_zero_pos,tc)582*57718be8SEnji Cooper ATF_TC_BODY(floorl_zero_pos, tc)
583*57718be8SEnji Cooper {
584*57718be8SEnji Cooper const long double x = 0.0L;
585*57718be8SEnji Cooper long double y = floorl(x);
586*57718be8SEnji Cooper
587*57718be8SEnji Cooper if (fabsl(y) > 0.0 || signbit(y) != 0)
588*57718be8SEnji Cooper atf_tc_fail_nonfatal("floorl(+0.0) != +0.0");
589*57718be8SEnji Cooper }
590*57718be8SEnji Cooper
591*57718be8SEnji Cooper /*
592*57718be8SEnji Cooper * trunc(3)
593*57718be8SEnji Cooper */
594*57718be8SEnji Cooper ATF_TC(trunc_basic);
ATF_TC_HEAD(trunc_basic,tc)595*57718be8SEnji Cooper ATF_TC_HEAD(trunc_basic, tc)
596*57718be8SEnji Cooper {
597*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of trunc(3)");
598*57718be8SEnji Cooper }
599*57718be8SEnji Cooper
ATF_TC_BODY(trunc_basic,tc)600*57718be8SEnji Cooper ATF_TC_BODY(trunc_basic, tc)
601*57718be8SEnji Cooper {
602*57718be8SEnji Cooper const double x = 0.999999999999999;
603*57718be8SEnji Cooper const double y = 0.000000000000001;
604*57718be8SEnji Cooper
605*57718be8SEnji Cooper ATF_CHECK(trunc(x) < SMALL_NUM);
606*57718be8SEnji Cooper ATF_CHECK(trunc(y) < SMALL_NUM);
607*57718be8SEnji Cooper }
608*57718be8SEnji Cooper
609*57718be8SEnji Cooper ATF_TC(trunc_nan);
ATF_TC_HEAD(trunc_nan,tc)610*57718be8SEnji Cooper ATF_TC_HEAD(trunc_nan, tc)
611*57718be8SEnji Cooper {
612*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test trunc(NaN) == NaN");
613*57718be8SEnji Cooper }
614*57718be8SEnji Cooper
ATF_TC_BODY(trunc_nan,tc)615*57718be8SEnji Cooper ATF_TC_BODY(trunc_nan, tc)
616*57718be8SEnji Cooper {
617*57718be8SEnji Cooper const double x = 0.0L / 0.0L;
618*57718be8SEnji Cooper
619*57718be8SEnji Cooper ATF_CHECK(isnan(trunc(x)) != 0);
620*57718be8SEnji Cooper }
621*57718be8SEnji Cooper
622*57718be8SEnji Cooper ATF_TC(trunc_inf_neg);
ATF_TC_HEAD(trunc_inf_neg,tc)623*57718be8SEnji Cooper ATF_TC_HEAD(trunc_inf_neg, tc)
624*57718be8SEnji Cooper {
625*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test trunc(-Inf) == -Inf");
626*57718be8SEnji Cooper }
627*57718be8SEnji Cooper
ATF_TC_BODY(trunc_inf_neg,tc)628*57718be8SEnji Cooper ATF_TC_BODY(trunc_inf_neg, tc)
629*57718be8SEnji Cooper {
630*57718be8SEnji Cooper const double x = -1.0L / 0.0L;
631*57718be8SEnji Cooper double y = trunc(x);
632*57718be8SEnji Cooper
633*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
634*57718be8SEnji Cooper atf_tc_fail_nonfatal("trunc(-Inf) != -Inf");
635*57718be8SEnji Cooper }
636*57718be8SEnji Cooper
637*57718be8SEnji Cooper ATF_TC(trunc_inf_pos);
ATF_TC_HEAD(trunc_inf_pos,tc)638*57718be8SEnji Cooper ATF_TC_HEAD(trunc_inf_pos, tc)
639*57718be8SEnji Cooper {
640*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test trunc(+Inf) == +Inf");
641*57718be8SEnji Cooper }
642*57718be8SEnji Cooper
ATF_TC_BODY(trunc_inf_pos,tc)643*57718be8SEnji Cooper ATF_TC_BODY(trunc_inf_pos, tc)
644*57718be8SEnji Cooper {
645*57718be8SEnji Cooper const double x = 1.0L / 0.0L;
646*57718be8SEnji Cooper double y = trunc(x);
647*57718be8SEnji Cooper
648*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
649*57718be8SEnji Cooper atf_tc_fail_nonfatal("trunc(+Inf) != +Inf");
650*57718be8SEnji Cooper }
651*57718be8SEnji Cooper
652*57718be8SEnji Cooper ATF_TC(trunc_zero_neg);
ATF_TC_HEAD(trunc_zero_neg,tc)653*57718be8SEnji Cooper ATF_TC_HEAD(trunc_zero_neg, tc)
654*57718be8SEnji Cooper {
655*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test trunc(-0.0) == -0.0");
656*57718be8SEnji Cooper }
657*57718be8SEnji Cooper
ATF_TC_BODY(trunc_zero_neg,tc)658*57718be8SEnji Cooper ATF_TC_BODY(trunc_zero_neg, tc)
659*57718be8SEnji Cooper {
660*57718be8SEnji Cooper const double x = -0.0L;
661*57718be8SEnji Cooper double y = trunc(x);
662*57718be8SEnji Cooper
663*57718be8SEnji Cooper if (fabs(y) > 0.0 || signbit(y) == 0)
664*57718be8SEnji Cooper atf_tc_fail_nonfatal("trunc(-0.0) != -0.0");
665*57718be8SEnji Cooper }
666*57718be8SEnji Cooper
667*57718be8SEnji Cooper ATF_TC(trunc_zero_pos);
ATF_TC_HEAD(trunc_zero_pos,tc)668*57718be8SEnji Cooper ATF_TC_HEAD(trunc_zero_pos, tc)
669*57718be8SEnji Cooper {
670*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test trunc(+0.0) == +0.0");
671*57718be8SEnji Cooper }
672*57718be8SEnji Cooper
ATF_TC_BODY(trunc_zero_pos,tc)673*57718be8SEnji Cooper ATF_TC_BODY(trunc_zero_pos, tc)
674*57718be8SEnji Cooper {
675*57718be8SEnji Cooper const double x = 0.0L;
676*57718be8SEnji Cooper double y = trunc(x);
677*57718be8SEnji Cooper
678*57718be8SEnji Cooper if (fabs(y) > 0.0 || signbit(y) != 0)
679*57718be8SEnji Cooper atf_tc_fail_nonfatal("trunc(+0.0) != +0.0");
680*57718be8SEnji Cooper }
681*57718be8SEnji Cooper
682*57718be8SEnji Cooper /*
683*57718be8SEnji Cooper * truncf(3)
684*57718be8SEnji Cooper */
685*57718be8SEnji Cooper ATF_TC(truncf_basic);
ATF_TC_HEAD(truncf_basic,tc)686*57718be8SEnji Cooper ATF_TC_HEAD(truncf_basic, tc)
687*57718be8SEnji Cooper {
688*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of truncf(3)");
689*57718be8SEnji Cooper }
690*57718be8SEnji Cooper
ATF_TC_BODY(truncf_basic,tc)691*57718be8SEnji Cooper ATF_TC_BODY(truncf_basic, tc)
692*57718be8SEnji Cooper {
693*57718be8SEnji Cooper const float x = 0.9999999;
694*57718be8SEnji Cooper const float y = 0.0000001;
695*57718be8SEnji Cooper
696*57718be8SEnji Cooper ATF_CHECK(truncf(x) < SMALL_NUM);
697*57718be8SEnji Cooper ATF_CHECK(truncf(y) < SMALL_NUM);
698*57718be8SEnji Cooper }
699*57718be8SEnji Cooper
700*57718be8SEnji Cooper ATF_TC(truncf_nan);
ATF_TC_HEAD(truncf_nan,tc)701*57718be8SEnji Cooper ATF_TC_HEAD(truncf_nan, tc)
702*57718be8SEnji Cooper {
703*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncf(NaN) == NaN");
704*57718be8SEnji Cooper }
705*57718be8SEnji Cooper
ATF_TC_BODY(truncf_nan,tc)706*57718be8SEnji Cooper ATF_TC_BODY(truncf_nan, tc)
707*57718be8SEnji Cooper {
708*57718be8SEnji Cooper const float x = 0.0L / 0.0L;
709*57718be8SEnji Cooper
710*57718be8SEnji Cooper ATF_CHECK(isnan(truncf(x)) != 0);
711*57718be8SEnji Cooper }
712*57718be8SEnji Cooper
713*57718be8SEnji Cooper ATF_TC(truncf_inf_neg);
ATF_TC_HEAD(truncf_inf_neg,tc)714*57718be8SEnji Cooper ATF_TC_HEAD(truncf_inf_neg, tc)
715*57718be8SEnji Cooper {
716*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncf(-Inf) == -Inf");
717*57718be8SEnji Cooper }
718*57718be8SEnji Cooper
ATF_TC_BODY(truncf_inf_neg,tc)719*57718be8SEnji Cooper ATF_TC_BODY(truncf_inf_neg, tc)
720*57718be8SEnji Cooper {
721*57718be8SEnji Cooper const float x = -1.0L / 0.0L;
722*57718be8SEnji Cooper float y = truncf(x);
723*57718be8SEnji Cooper
724*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
725*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncf(-Inf) != -Inf");
726*57718be8SEnji Cooper }
727*57718be8SEnji Cooper
728*57718be8SEnji Cooper ATF_TC(truncf_inf_pos);
ATF_TC_HEAD(truncf_inf_pos,tc)729*57718be8SEnji Cooper ATF_TC_HEAD(truncf_inf_pos, tc)
730*57718be8SEnji Cooper {
731*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncf(+Inf) == +Inf");
732*57718be8SEnji Cooper }
733*57718be8SEnji Cooper
ATF_TC_BODY(truncf_inf_pos,tc)734*57718be8SEnji Cooper ATF_TC_BODY(truncf_inf_pos, tc)
735*57718be8SEnji Cooper {
736*57718be8SEnji Cooper const float x = 1.0L / 0.0L;
737*57718be8SEnji Cooper float y = truncf(x);
738*57718be8SEnji Cooper
739*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
740*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncf(+Inf) != +Inf");
741*57718be8SEnji Cooper }
742*57718be8SEnji Cooper
743*57718be8SEnji Cooper ATF_TC(truncf_zero_neg);
ATF_TC_HEAD(truncf_zero_neg,tc)744*57718be8SEnji Cooper ATF_TC_HEAD(truncf_zero_neg, tc)
745*57718be8SEnji Cooper {
746*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncf(-0.0) == -0.0");
747*57718be8SEnji Cooper }
748*57718be8SEnji Cooper
ATF_TC_BODY(truncf_zero_neg,tc)749*57718be8SEnji Cooper ATF_TC_BODY(truncf_zero_neg, tc)
750*57718be8SEnji Cooper {
751*57718be8SEnji Cooper const float x = -0.0L;
752*57718be8SEnji Cooper float y = truncf(x);
753*57718be8SEnji Cooper
754*57718be8SEnji Cooper if (fabsf(y) > 0.0 || signbit(y) == 0)
755*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncf(-0.0) != -0.0");
756*57718be8SEnji Cooper }
757*57718be8SEnji Cooper
758*57718be8SEnji Cooper ATF_TC(truncf_zero_pos);
ATF_TC_HEAD(truncf_zero_pos,tc)759*57718be8SEnji Cooper ATF_TC_HEAD(truncf_zero_pos, tc)
760*57718be8SEnji Cooper {
761*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncf(+0.0) == +0.0");
762*57718be8SEnji Cooper }
763*57718be8SEnji Cooper
ATF_TC_BODY(truncf_zero_pos,tc)764*57718be8SEnji Cooper ATF_TC_BODY(truncf_zero_pos, tc)
765*57718be8SEnji Cooper {
766*57718be8SEnji Cooper const float x = 0.0L;
767*57718be8SEnji Cooper float y = truncf(x);
768*57718be8SEnji Cooper
769*57718be8SEnji Cooper if (fabsf(y) > 0.0 || signbit(y) != 0)
770*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncf(+0.0) != +0.0");
771*57718be8SEnji Cooper }
772*57718be8SEnji Cooper
773*57718be8SEnji Cooper /*
774*57718be8SEnji Cooper * truncl(3)
775*57718be8SEnji Cooper */
776*57718be8SEnji Cooper ATF_TC(truncl_basic);
ATF_TC_HEAD(truncl_basic,tc)777*57718be8SEnji Cooper ATF_TC_HEAD(truncl_basic, tc)
778*57718be8SEnji Cooper {
779*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "A basic test of truncl(3)");
780*57718be8SEnji Cooper }
781*57718be8SEnji Cooper
ATF_TC_BODY(truncl_basic,tc)782*57718be8SEnji Cooper ATF_TC_BODY(truncl_basic, tc)
783*57718be8SEnji Cooper {
784*57718be8SEnji Cooper const long double x = 0.9999999;
785*57718be8SEnji Cooper const long double y = 0.0000001;
786*57718be8SEnji Cooper
787*57718be8SEnji Cooper ATF_CHECK(truncl(x) < SMALL_NUM);
788*57718be8SEnji Cooper ATF_CHECK(truncl(y) < SMALL_NUM);
789*57718be8SEnji Cooper }
790*57718be8SEnji Cooper
791*57718be8SEnji Cooper ATF_TC(truncl_nan);
ATF_TC_HEAD(truncl_nan,tc)792*57718be8SEnji Cooper ATF_TC_HEAD(truncl_nan, tc)
793*57718be8SEnji Cooper {
794*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncl(NaN) == NaN");
795*57718be8SEnji Cooper }
796*57718be8SEnji Cooper
ATF_TC_BODY(truncl_nan,tc)797*57718be8SEnji Cooper ATF_TC_BODY(truncl_nan, tc)
798*57718be8SEnji Cooper {
799*57718be8SEnji Cooper const long double x = 0.0L / 0.0L;
800*57718be8SEnji Cooper
801*57718be8SEnji Cooper ATF_CHECK(isnan(truncl(x)) != 0);
802*57718be8SEnji Cooper }
803*57718be8SEnji Cooper
804*57718be8SEnji Cooper ATF_TC(truncl_inf_neg);
ATF_TC_HEAD(truncl_inf_neg,tc)805*57718be8SEnji Cooper ATF_TC_HEAD(truncl_inf_neg, tc)
806*57718be8SEnji Cooper {
807*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncl(-Inf) == -Inf");
808*57718be8SEnji Cooper }
809*57718be8SEnji Cooper
ATF_TC_BODY(truncl_inf_neg,tc)810*57718be8SEnji Cooper ATF_TC_BODY(truncl_inf_neg, tc)
811*57718be8SEnji Cooper {
812*57718be8SEnji Cooper const long double x = -1.0L / 0.0L;
813*57718be8SEnji Cooper long double y = truncl(x);
814*57718be8SEnji Cooper
815*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) == 0)
816*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncl(-Inf) != -Inf");
817*57718be8SEnji Cooper }
818*57718be8SEnji Cooper
819*57718be8SEnji Cooper ATF_TC(truncl_inf_pos);
ATF_TC_HEAD(truncl_inf_pos,tc)820*57718be8SEnji Cooper ATF_TC_HEAD(truncl_inf_pos, tc)
821*57718be8SEnji Cooper {
822*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncl(+Inf) == +Inf");
823*57718be8SEnji Cooper }
824*57718be8SEnji Cooper
ATF_TC_BODY(truncl_inf_pos,tc)825*57718be8SEnji Cooper ATF_TC_BODY(truncl_inf_pos, tc)
826*57718be8SEnji Cooper {
827*57718be8SEnji Cooper const long double x = 1.0L / 0.0L;
828*57718be8SEnji Cooper long double y = truncl(x);
829*57718be8SEnji Cooper
830*57718be8SEnji Cooper if (isinf(y) == 0 || signbit(y) != 0)
831*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncl(+Inf) != +Inf");
832*57718be8SEnji Cooper }
833*57718be8SEnji Cooper
834*57718be8SEnji Cooper ATF_TC(truncl_zero_neg);
ATF_TC_HEAD(truncl_zero_neg,tc)835*57718be8SEnji Cooper ATF_TC_HEAD(truncl_zero_neg, tc)
836*57718be8SEnji Cooper {
837*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncl(-0.0) == -0.0");
838*57718be8SEnji Cooper }
839*57718be8SEnji Cooper
ATF_TC_BODY(truncl_zero_neg,tc)840*57718be8SEnji Cooper ATF_TC_BODY(truncl_zero_neg, tc)
841*57718be8SEnji Cooper {
842*57718be8SEnji Cooper const long double x = -0.0L;
843*57718be8SEnji Cooper long double y = truncl(x);
844*57718be8SEnji Cooper
845*57718be8SEnji Cooper if (fabsl(y) > 0.0 || signbit(y) == 0)
846*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncl(-0.0) != -0.0");
847*57718be8SEnji Cooper }
848*57718be8SEnji Cooper
849*57718be8SEnji Cooper ATF_TC(truncl_zero_pos);
ATF_TC_HEAD(truncl_zero_pos,tc)850*57718be8SEnji Cooper ATF_TC_HEAD(truncl_zero_pos, tc)
851*57718be8SEnji Cooper {
852*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test truncl(+0.0) == +0.0");
853*57718be8SEnji Cooper }
854*57718be8SEnji Cooper
ATF_TC_BODY(truncl_zero_pos,tc)855*57718be8SEnji Cooper ATF_TC_BODY(truncl_zero_pos, tc)
856*57718be8SEnji Cooper {
857*57718be8SEnji Cooper const long double x = 0.0L;
858*57718be8SEnji Cooper long double y = truncl(x);
859*57718be8SEnji Cooper
860*57718be8SEnji Cooper if (fabsl(y) > 0.0 || signbit(y) != 0)
861*57718be8SEnji Cooper atf_tc_fail_nonfatal("truncl(+0.0) != +0.0");
862*57718be8SEnji Cooper }
863*57718be8SEnji Cooper
ATF_TP_ADD_TCS(tp)864*57718be8SEnji Cooper ATF_TP_ADD_TCS(tp)
865*57718be8SEnji Cooper {
866*57718be8SEnji Cooper
867*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceil_basic);
868*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceil_nan);
869*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceil_inf_neg);
870*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceil_inf_pos);
871*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceil_zero_neg);
872*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceil_zero_pos);
873*57718be8SEnji Cooper
874*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceilf_basic);
875*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceilf_nan);
876*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceilf_inf_neg);
877*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceilf_inf_pos);
878*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceilf_zero_neg);
879*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceilf_zero_pos);
880*57718be8SEnji Cooper
881*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceill_basic);
882*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceill_nan);
883*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceill_inf_neg);
884*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceill_inf_pos);
885*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceill_zero_neg);
886*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, ceill_zero_pos);
887*57718be8SEnji Cooper
888*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floor_basic);
889*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floor_nan);
890*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floor_inf_neg);
891*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floor_inf_pos);
892*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floor_zero_neg);
893*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floor_zero_pos);
894*57718be8SEnji Cooper
895*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorf_basic);
896*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorf_nan);
897*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorf_inf_neg);
898*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorf_inf_pos);
899*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorf_zero_neg);
900*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorf_zero_pos);
901*57718be8SEnji Cooper
902*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorl_basic);
903*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorl_nan);
904*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorl_inf_neg);
905*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorl_inf_pos);
906*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorl_zero_neg);
907*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, floorl_zero_pos);
908*57718be8SEnji Cooper
909*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, trunc_basic);
910*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, trunc_nan);
911*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, trunc_inf_neg);
912*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, trunc_inf_pos);
913*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, trunc_zero_neg);
914*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, trunc_zero_pos);
915*57718be8SEnji Cooper
916*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncf_basic);
917*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncf_nan);
918*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncf_inf_neg);
919*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncf_inf_pos);
920*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncf_zero_neg);
921*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncf_zero_pos);
922*57718be8SEnji Cooper
923*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncl_basic);
924*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncl_nan);
925*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncl_inf_neg);
926*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncl_inf_pos);
927*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncl_zero_neg);
928*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, truncl_zero_pos);
929*57718be8SEnji Cooper
930*57718be8SEnji Cooper return atf_no_error();
931*57718be8SEnji Cooper }
932