xref: /freebsd/contrib/netbsd-tests/lib/libm/t_log.c (revision 57718be8fa0bd5edc11ab9a72e68cc71982939a6)
1*57718be8SEnji Cooper /* $NetBSD: t_log.c,v 1.11 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_log.c,v 1.11 2014/03/03 10:39:08 martin Exp $");
33*57718be8SEnji Cooper 
34*57718be8SEnji Cooper #include <atf-c.h>
35*57718be8SEnji Cooper #include <atf-c/config.h>
36*57718be8SEnji Cooper 
37*57718be8SEnji Cooper #include <math.h>
38*57718be8SEnji Cooper #include <stdio.h>
39*57718be8SEnji Cooper #include <string.h>
40*57718be8SEnji Cooper 
41*57718be8SEnji Cooper /*
42*57718be8SEnji Cooper  * log10(3)
43*57718be8SEnji Cooper  */
44*57718be8SEnji Cooper ATF_TC(log10_base);
45*57718be8SEnji Cooper ATF_TC_HEAD(log10_base, tc)
46*57718be8SEnji Cooper {
47*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10(10) == 1");
48*57718be8SEnji Cooper }
49*57718be8SEnji Cooper 
50*57718be8SEnji Cooper ATF_TC_BODY(log10_base, tc)
51*57718be8SEnji Cooper {
52*57718be8SEnji Cooper 	ATF_CHECK(log10(10.0) == 1.0);
53*57718be8SEnji Cooper }
54*57718be8SEnji Cooper 
55*57718be8SEnji Cooper ATF_TC(log10_nan);
56*57718be8SEnji Cooper ATF_TC_HEAD(log10_nan, tc)
57*57718be8SEnji Cooper {
58*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10(NaN) == NaN");
59*57718be8SEnji Cooper }
60*57718be8SEnji Cooper 
61*57718be8SEnji Cooper ATF_TC_BODY(log10_nan, tc)
62*57718be8SEnji Cooper {
63*57718be8SEnji Cooper 	const double x = 0.0L / 0.0L;
64*57718be8SEnji Cooper 
65*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
66*57718be8SEnji Cooper 	ATF_CHECK(isnan(log10(x)) != 0);
67*57718be8SEnji Cooper }
68*57718be8SEnji Cooper 
69*57718be8SEnji Cooper ATF_TC(log10_inf_neg);
70*57718be8SEnji Cooper ATF_TC_HEAD(log10_inf_neg, tc)
71*57718be8SEnji Cooper {
72*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10(-Inf) == NaN");
73*57718be8SEnji Cooper }
74*57718be8SEnji Cooper 
75*57718be8SEnji Cooper ATF_TC_BODY(log10_inf_neg, tc)
76*57718be8SEnji Cooper {
77*57718be8SEnji Cooper 	const double x = -1.0L / 0.0L;
78*57718be8SEnji Cooper 	const double y = log10(x);
79*57718be8SEnji Cooper 
80*57718be8SEnji Cooper 	ATF_CHECK(isnan(y) != 0);
81*57718be8SEnji Cooper }
82*57718be8SEnji Cooper 
83*57718be8SEnji Cooper ATF_TC(log10_inf_pos);
84*57718be8SEnji Cooper ATF_TC_HEAD(log10_inf_pos, tc)
85*57718be8SEnji Cooper {
86*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10(+Inf) == +Inf");
87*57718be8SEnji Cooper }
88*57718be8SEnji Cooper 
89*57718be8SEnji Cooper ATF_TC_BODY(log10_inf_pos, tc)
90*57718be8SEnji Cooper {
91*57718be8SEnji Cooper 	const double x = 1.0L / 0.0L;
92*57718be8SEnji Cooper 
93*57718be8SEnji Cooper 	ATF_CHECK(log10(x) == x);
94*57718be8SEnji Cooper }
95*57718be8SEnji Cooper 
96*57718be8SEnji Cooper ATF_TC(log10_one_pos);
97*57718be8SEnji Cooper ATF_TC_HEAD(log10_one_pos, tc)
98*57718be8SEnji Cooper {
99*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10(1.0) == +0.0");
100*57718be8SEnji Cooper }
101*57718be8SEnji Cooper 
102*57718be8SEnji Cooper ATF_TC_BODY(log10_one_pos, tc)
103*57718be8SEnji Cooper {
104*57718be8SEnji Cooper 	const double x = log10(1.0);
105*57718be8SEnji Cooper 	const double y = 0.0L;
106*57718be8SEnji Cooper 
107*57718be8SEnji Cooper 	ATF_CHECK(x == y);
108*57718be8SEnji Cooper 	ATF_CHECK(signbit(x) == 0);
109*57718be8SEnji Cooper 	ATF_CHECK(signbit(y) == 0);
110*57718be8SEnji Cooper }
111*57718be8SEnji Cooper 
112*57718be8SEnji Cooper ATF_TC(log10_zero_neg);
113*57718be8SEnji Cooper ATF_TC_HEAD(log10_zero_neg, tc)
114*57718be8SEnji Cooper {
115*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10(-0.0) == -HUGE_VAL");
116*57718be8SEnji Cooper }
117*57718be8SEnji Cooper 
118*57718be8SEnji Cooper ATF_TC_BODY(log10_zero_neg, tc)
119*57718be8SEnji Cooper {
120*57718be8SEnji Cooper 	const double x = -0.0L;
121*57718be8SEnji Cooper 
122*57718be8SEnji Cooper 	ATF_CHECK(log10(x) == -HUGE_VAL);
123*57718be8SEnji Cooper }
124*57718be8SEnji Cooper 
125*57718be8SEnji Cooper ATF_TC(log10_zero_pos);
126*57718be8SEnji Cooper ATF_TC_HEAD(log10_zero_pos, tc)
127*57718be8SEnji Cooper {
128*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10(+0.0) == -HUGE_VAL");
129*57718be8SEnji Cooper }
130*57718be8SEnji Cooper 
131*57718be8SEnji Cooper ATF_TC_BODY(log10_zero_pos, tc)
132*57718be8SEnji Cooper {
133*57718be8SEnji Cooper 	const double x = 0.0L;
134*57718be8SEnji Cooper 
135*57718be8SEnji Cooper 	ATF_CHECK(log10(x) == -HUGE_VAL);
136*57718be8SEnji Cooper }
137*57718be8SEnji Cooper 
138*57718be8SEnji Cooper /*
139*57718be8SEnji Cooper  * log10f(3)
140*57718be8SEnji Cooper  */
141*57718be8SEnji Cooper ATF_TC(log10f_base);
142*57718be8SEnji Cooper ATF_TC_HEAD(log10f_base, tc)
143*57718be8SEnji Cooper {
144*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10f(10) == 1");
145*57718be8SEnji Cooper }
146*57718be8SEnji Cooper 
147*57718be8SEnji Cooper ATF_TC_BODY(log10f_base, tc)
148*57718be8SEnji Cooper {
149*57718be8SEnji Cooper 	ATF_CHECK(log10f(10.0) == 1.0);
150*57718be8SEnji Cooper }
151*57718be8SEnji Cooper 
152*57718be8SEnji Cooper ATF_TC(log10f_nan);
153*57718be8SEnji Cooper ATF_TC_HEAD(log10f_nan, tc)
154*57718be8SEnji Cooper {
155*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10f(NaN) == NaN");
156*57718be8SEnji Cooper }
157*57718be8SEnji Cooper 
158*57718be8SEnji Cooper ATF_TC_BODY(log10f_nan, tc)
159*57718be8SEnji Cooper {
160*57718be8SEnji Cooper 	const float x = 0.0L / 0.0L;
161*57718be8SEnji Cooper 
162*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
163*57718be8SEnji Cooper 	ATF_CHECK(isnan(log10f(x)) != 0);
164*57718be8SEnji Cooper }
165*57718be8SEnji Cooper 
166*57718be8SEnji Cooper ATF_TC(log10f_inf_neg);
167*57718be8SEnji Cooper ATF_TC_HEAD(log10f_inf_neg, tc)
168*57718be8SEnji Cooper {
169*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10f(-Inf) == NaN");
170*57718be8SEnji Cooper }
171*57718be8SEnji Cooper 
172*57718be8SEnji Cooper ATF_TC_BODY(log10f_inf_neg, tc)
173*57718be8SEnji Cooper {
174*57718be8SEnji Cooper 	const float x = -1.0L / 0.0L;
175*57718be8SEnji Cooper 	const float y = log10f(x);
176*57718be8SEnji Cooper 
177*57718be8SEnji Cooper 	ATF_CHECK(isnan(y) != 0);
178*57718be8SEnji Cooper }
179*57718be8SEnji Cooper 
180*57718be8SEnji Cooper ATF_TC(log10f_inf_pos);
181*57718be8SEnji Cooper ATF_TC_HEAD(log10f_inf_pos, tc)
182*57718be8SEnji Cooper {
183*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10f(+Inf) == +Inf");
184*57718be8SEnji Cooper }
185*57718be8SEnji Cooper 
186*57718be8SEnji Cooper ATF_TC_BODY(log10f_inf_pos, tc)
187*57718be8SEnji Cooper {
188*57718be8SEnji Cooper 	const float x = 1.0L / 0.0L;
189*57718be8SEnji Cooper 
190*57718be8SEnji Cooper #if defined(__alpha__)
191*57718be8SEnji Cooper 	atf_tc_expect_fail("PR port-alpha/46301");
192*57718be8SEnji Cooper #endif
193*57718be8SEnji Cooper 
194*57718be8SEnji Cooper 	ATF_CHECK(log10f(x) == x);
195*57718be8SEnji Cooper }
196*57718be8SEnji Cooper 
197*57718be8SEnji Cooper ATF_TC(log10f_one_pos);
198*57718be8SEnji Cooper ATF_TC_HEAD(log10f_one_pos, tc)
199*57718be8SEnji Cooper {
200*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10f(1.0) == +0.0");
201*57718be8SEnji Cooper }
202*57718be8SEnji Cooper 
203*57718be8SEnji Cooper ATF_TC_BODY(log10f_one_pos, tc)
204*57718be8SEnji Cooper {
205*57718be8SEnji Cooper 	const float x = log10f(1.0);
206*57718be8SEnji Cooper 	const float y = 0.0L;
207*57718be8SEnji Cooper 
208*57718be8SEnji Cooper 	ATF_CHECK(x == y);
209*57718be8SEnji Cooper 	ATF_CHECK(signbit(x) == 0);
210*57718be8SEnji Cooper 	ATF_CHECK(signbit(y) == 0);
211*57718be8SEnji Cooper }
212*57718be8SEnji Cooper 
213*57718be8SEnji Cooper ATF_TC(log10f_zero_neg);
214*57718be8SEnji Cooper ATF_TC_HEAD(log10f_zero_neg, tc)
215*57718be8SEnji Cooper {
216*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10f(-0.0) == -HUGE_VALF");
217*57718be8SEnji Cooper }
218*57718be8SEnji Cooper 
219*57718be8SEnji Cooper ATF_TC_BODY(log10f_zero_neg, tc)
220*57718be8SEnji Cooper {
221*57718be8SEnji Cooper 	const float x = -0.0L;
222*57718be8SEnji Cooper 
223*57718be8SEnji Cooper 	ATF_CHECK(log10f(x) == -HUGE_VALF);
224*57718be8SEnji Cooper }
225*57718be8SEnji Cooper 
226*57718be8SEnji Cooper ATF_TC(log10f_zero_pos);
227*57718be8SEnji Cooper ATF_TC_HEAD(log10f_zero_pos, tc)
228*57718be8SEnji Cooper {
229*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log10f(+0.0) == -HUGE_VALF");
230*57718be8SEnji Cooper }
231*57718be8SEnji Cooper 
232*57718be8SEnji Cooper ATF_TC_BODY(log10f_zero_pos, tc)
233*57718be8SEnji Cooper {
234*57718be8SEnji Cooper 	const float x = 0.0L;
235*57718be8SEnji Cooper 
236*57718be8SEnji Cooper 	ATF_CHECK(log10f(x) == -HUGE_VALF);
237*57718be8SEnji Cooper }
238*57718be8SEnji Cooper 
239*57718be8SEnji Cooper /*
240*57718be8SEnji Cooper  * log1p(3)
241*57718be8SEnji Cooper  */
242*57718be8SEnji Cooper ATF_TC(log1p_nan);
243*57718be8SEnji Cooper ATF_TC_HEAD(log1p_nan, tc)
244*57718be8SEnji Cooper {
245*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1p(NaN) == NaN");
246*57718be8SEnji Cooper }
247*57718be8SEnji Cooper 
248*57718be8SEnji Cooper ATF_TC_BODY(log1p_nan, tc)
249*57718be8SEnji Cooper {
250*57718be8SEnji Cooper 	const double x = 0.0L / 0.0L;
251*57718be8SEnji Cooper 
252*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
253*57718be8SEnji Cooper 	ATF_CHECK(isnan(log1p(x)) != 0);
254*57718be8SEnji Cooper }
255*57718be8SEnji Cooper 
256*57718be8SEnji Cooper ATF_TC(log1p_inf_neg);
257*57718be8SEnji Cooper ATF_TC_HEAD(log1p_inf_neg, tc)
258*57718be8SEnji Cooper {
259*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1p(-Inf) == NaN");
260*57718be8SEnji Cooper }
261*57718be8SEnji Cooper 
262*57718be8SEnji Cooper ATF_TC_BODY(log1p_inf_neg, tc)
263*57718be8SEnji Cooper {
264*57718be8SEnji Cooper 	const double x = -1.0L / 0.0L;
265*57718be8SEnji Cooper 	const double y = log1p(x);
266*57718be8SEnji Cooper 
267*57718be8SEnji Cooper 	if (isnan(y) == 0) {
268*57718be8SEnji Cooper 		atf_tc_expect_fail("PR lib/45362");
269*57718be8SEnji Cooper 		atf_tc_fail("log1p(-Inf) != NaN");
270*57718be8SEnji Cooper 	}
271*57718be8SEnji Cooper }
272*57718be8SEnji Cooper 
273*57718be8SEnji Cooper ATF_TC(log1p_inf_pos);
274*57718be8SEnji Cooper ATF_TC_HEAD(log1p_inf_pos, tc)
275*57718be8SEnji Cooper {
276*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1p(+Inf) == +Inf");
277*57718be8SEnji Cooper }
278*57718be8SEnji Cooper 
279*57718be8SEnji Cooper ATF_TC_BODY(log1p_inf_pos, tc)
280*57718be8SEnji Cooper {
281*57718be8SEnji Cooper 	const double x = 1.0L / 0.0L;
282*57718be8SEnji Cooper 
283*57718be8SEnji Cooper 	ATF_CHECK(log1p(x) == x);
284*57718be8SEnji Cooper }
285*57718be8SEnji Cooper 
286*57718be8SEnji Cooper ATF_TC(log1p_one_neg);
287*57718be8SEnji Cooper ATF_TC_HEAD(log1p_one_neg, tc)
288*57718be8SEnji Cooper {
289*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1p(-1.0) == -HUGE_VAL");
290*57718be8SEnji Cooper }
291*57718be8SEnji Cooper 
292*57718be8SEnji Cooper ATF_TC_BODY(log1p_one_neg, tc)
293*57718be8SEnji Cooper {
294*57718be8SEnji Cooper 	const double x = log1p(-1.0);
295*57718be8SEnji Cooper 
296*57718be8SEnji Cooper 	if (x != -HUGE_VAL) {
297*57718be8SEnji Cooper 		atf_tc_expect_fail("PR lib/45362");
298*57718be8SEnji Cooper 		atf_tc_fail("log1p(-1.0) != -HUGE_VAL");
299*57718be8SEnji Cooper 	}
300*57718be8SEnji Cooper }
301*57718be8SEnji Cooper 
302*57718be8SEnji Cooper ATF_TC(log1p_zero_neg);
303*57718be8SEnji Cooper ATF_TC_HEAD(log1p_zero_neg, tc)
304*57718be8SEnji Cooper {
305*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1p(-0.0) == -0.0");
306*57718be8SEnji Cooper }
307*57718be8SEnji Cooper 
308*57718be8SEnji Cooper ATF_TC_BODY(log1p_zero_neg, tc)
309*57718be8SEnji Cooper {
310*57718be8SEnji Cooper 	const double x = -0.0L;
311*57718be8SEnji Cooper 
312*57718be8SEnji Cooper 	ATF_CHECK(log1p(x) == x);
313*57718be8SEnji Cooper }
314*57718be8SEnji Cooper 
315*57718be8SEnji Cooper ATF_TC(log1p_zero_pos);
316*57718be8SEnji Cooper ATF_TC_HEAD(log1p_zero_pos, tc)
317*57718be8SEnji Cooper {
318*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1p(+0.0) == +0.0");
319*57718be8SEnji Cooper }
320*57718be8SEnji Cooper 
321*57718be8SEnji Cooper ATF_TC_BODY(log1p_zero_pos, tc)
322*57718be8SEnji Cooper {
323*57718be8SEnji Cooper 	const double x = 0.0L;
324*57718be8SEnji Cooper 
325*57718be8SEnji Cooper 	ATF_CHECK(log1p(x) == x);
326*57718be8SEnji Cooper }
327*57718be8SEnji Cooper 
328*57718be8SEnji Cooper /*
329*57718be8SEnji Cooper  * log1pf(3)
330*57718be8SEnji Cooper  */
331*57718be8SEnji Cooper ATF_TC(log1pf_nan);
332*57718be8SEnji Cooper ATF_TC_HEAD(log1pf_nan, tc)
333*57718be8SEnji Cooper {
334*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1pf(NaN) == NaN");
335*57718be8SEnji Cooper }
336*57718be8SEnji Cooper 
337*57718be8SEnji Cooper ATF_TC_BODY(log1pf_nan, tc)
338*57718be8SEnji Cooper {
339*57718be8SEnji Cooper 	const float x = 0.0L / 0.0L;
340*57718be8SEnji Cooper 
341*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
342*57718be8SEnji Cooper 	ATF_CHECK(isnan(log1pf(x)) != 0);
343*57718be8SEnji Cooper }
344*57718be8SEnji Cooper 
345*57718be8SEnji Cooper ATF_TC(log1pf_inf_neg);
346*57718be8SEnji Cooper ATF_TC_HEAD(log1pf_inf_neg, tc)
347*57718be8SEnji Cooper {
348*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1pf(-Inf) == NaN");
349*57718be8SEnji Cooper }
350*57718be8SEnji Cooper 
351*57718be8SEnji Cooper ATF_TC_BODY(log1pf_inf_neg, tc)
352*57718be8SEnji Cooper {
353*57718be8SEnji Cooper 	const float x = -1.0L / 0.0L;
354*57718be8SEnji Cooper 	const float y = log1pf(x);
355*57718be8SEnji Cooper 
356*57718be8SEnji Cooper 	if (isnan(y) == 0) {
357*57718be8SEnji Cooper 		atf_tc_expect_fail("PR lib/45362");
358*57718be8SEnji Cooper 		atf_tc_fail("log1pf(-Inf) != NaN");
359*57718be8SEnji Cooper 	}
360*57718be8SEnji Cooper }
361*57718be8SEnji Cooper 
362*57718be8SEnji Cooper ATF_TC(log1pf_inf_pos);
363*57718be8SEnji Cooper ATF_TC_HEAD(log1pf_inf_pos, tc)
364*57718be8SEnji Cooper {
365*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1pf(+Inf) == +Inf");
366*57718be8SEnji Cooper }
367*57718be8SEnji Cooper 
368*57718be8SEnji Cooper ATF_TC_BODY(log1pf_inf_pos, tc)
369*57718be8SEnji Cooper {
370*57718be8SEnji Cooper 	const float x = 1.0L / 0.0L;
371*57718be8SEnji Cooper 
372*57718be8SEnji Cooper 	ATF_CHECK(log1pf(x) == x);
373*57718be8SEnji Cooper }
374*57718be8SEnji Cooper 
375*57718be8SEnji Cooper ATF_TC(log1pf_one_neg);
376*57718be8SEnji Cooper ATF_TC_HEAD(log1pf_one_neg, tc)
377*57718be8SEnji Cooper {
378*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1pf(-1.0) == -HUGE_VALF");
379*57718be8SEnji Cooper }
380*57718be8SEnji Cooper 
381*57718be8SEnji Cooper ATF_TC_BODY(log1pf_one_neg, tc)
382*57718be8SEnji Cooper {
383*57718be8SEnji Cooper 	const float x = log1pf(-1.0);
384*57718be8SEnji Cooper 
385*57718be8SEnji Cooper 	if (x != -HUGE_VALF) {
386*57718be8SEnji Cooper 		atf_tc_expect_fail("PR lib/45362");
387*57718be8SEnji Cooper 		atf_tc_fail("log1pf(-1.0) != -HUGE_VALF");
388*57718be8SEnji Cooper 	}
389*57718be8SEnji Cooper }
390*57718be8SEnji Cooper 
391*57718be8SEnji Cooper ATF_TC(log1pf_zero_neg);
392*57718be8SEnji Cooper ATF_TC_HEAD(log1pf_zero_neg, tc)
393*57718be8SEnji Cooper {
394*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1pf(-0.0) == -0.0");
395*57718be8SEnji Cooper }
396*57718be8SEnji Cooper 
397*57718be8SEnji Cooper ATF_TC_BODY(log1pf_zero_neg, tc)
398*57718be8SEnji Cooper {
399*57718be8SEnji Cooper 	const float x = -0.0L;
400*57718be8SEnji Cooper 
401*57718be8SEnji Cooper 	ATF_CHECK(log1pf(x) == x);
402*57718be8SEnji Cooper }
403*57718be8SEnji Cooper 
404*57718be8SEnji Cooper ATF_TC(log1pf_zero_pos);
405*57718be8SEnji Cooper ATF_TC_HEAD(log1pf_zero_pos, tc)
406*57718be8SEnji Cooper {
407*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log1pf(+0.0) == +0.0");
408*57718be8SEnji Cooper }
409*57718be8SEnji Cooper 
410*57718be8SEnji Cooper ATF_TC_BODY(log1pf_zero_pos, tc)
411*57718be8SEnji Cooper {
412*57718be8SEnji Cooper 	const float x = 0.0L;
413*57718be8SEnji Cooper 
414*57718be8SEnji Cooper 	ATF_CHECK(log1pf(x) == x);
415*57718be8SEnji Cooper }
416*57718be8SEnji Cooper 
417*57718be8SEnji Cooper /*
418*57718be8SEnji Cooper  * log2(3)
419*57718be8SEnji Cooper  */
420*57718be8SEnji Cooper ATF_TC(log2_base);
421*57718be8SEnji Cooper ATF_TC_HEAD(log2_base, tc)
422*57718be8SEnji Cooper {
423*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2(2) == 1");
424*57718be8SEnji Cooper }
425*57718be8SEnji Cooper 
426*57718be8SEnji Cooper ATF_TC_BODY(log2_base, tc)
427*57718be8SEnji Cooper {
428*57718be8SEnji Cooper 	ATF_CHECK(log2(2.0) == 1.0);
429*57718be8SEnji Cooper }
430*57718be8SEnji Cooper 
431*57718be8SEnji Cooper ATF_TC(log2_nan);
432*57718be8SEnji Cooper ATF_TC_HEAD(log2_nan, tc)
433*57718be8SEnji Cooper {
434*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2(NaN) == NaN");
435*57718be8SEnji Cooper }
436*57718be8SEnji Cooper 
437*57718be8SEnji Cooper ATF_TC_BODY(log2_nan, tc)
438*57718be8SEnji Cooper {
439*57718be8SEnji Cooper 	const double x = 0.0L / 0.0L;
440*57718be8SEnji Cooper 
441*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
442*57718be8SEnji Cooper 	ATF_CHECK(isnan(log2(x)) != 0);
443*57718be8SEnji Cooper }
444*57718be8SEnji Cooper 
445*57718be8SEnji Cooper ATF_TC(log2_inf_neg);
446*57718be8SEnji Cooper ATF_TC_HEAD(log2_inf_neg, tc)
447*57718be8SEnji Cooper {
448*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2(-Inf) == NaN");
449*57718be8SEnji Cooper }
450*57718be8SEnji Cooper 
451*57718be8SEnji Cooper ATF_TC_BODY(log2_inf_neg, tc)
452*57718be8SEnji Cooper {
453*57718be8SEnji Cooper 	const double x = -1.0L / 0.0L;
454*57718be8SEnji Cooper 	const double y = log2(x);
455*57718be8SEnji Cooper 
456*57718be8SEnji Cooper 	ATF_CHECK(isnan(y) != 0);
457*57718be8SEnji Cooper }
458*57718be8SEnji Cooper 
459*57718be8SEnji Cooper ATF_TC(log2_inf_pos);
460*57718be8SEnji Cooper ATF_TC_HEAD(log2_inf_pos, tc)
461*57718be8SEnji Cooper {
462*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2(+Inf) == +Inf");
463*57718be8SEnji Cooper }
464*57718be8SEnji Cooper 
465*57718be8SEnji Cooper ATF_TC_BODY(log2_inf_pos, tc)
466*57718be8SEnji Cooper {
467*57718be8SEnji Cooper 	const double x = 1.0L / 0.0L;
468*57718be8SEnji Cooper 
469*57718be8SEnji Cooper 	ATF_CHECK(log2(x) == x);
470*57718be8SEnji Cooper }
471*57718be8SEnji Cooper 
472*57718be8SEnji Cooper ATF_TC(log2_one_pos);
473*57718be8SEnji Cooper ATF_TC_HEAD(log2_one_pos, tc)
474*57718be8SEnji Cooper {
475*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2(1.0) == +0.0");
476*57718be8SEnji Cooper }
477*57718be8SEnji Cooper 
478*57718be8SEnji Cooper ATF_TC_BODY(log2_one_pos, tc)
479*57718be8SEnji Cooper {
480*57718be8SEnji Cooper 	const double x = log2(1.0);
481*57718be8SEnji Cooper 	const double y = 0.0L;
482*57718be8SEnji Cooper 
483*57718be8SEnji Cooper 	ATF_CHECK(x == y);
484*57718be8SEnji Cooper 	ATF_CHECK(signbit(x) == 0);
485*57718be8SEnji Cooper 	ATF_CHECK(signbit(y) == 0);
486*57718be8SEnji Cooper }
487*57718be8SEnji Cooper 
488*57718be8SEnji Cooper ATF_TC(log2_zero_neg);
489*57718be8SEnji Cooper ATF_TC_HEAD(log2_zero_neg, tc)
490*57718be8SEnji Cooper {
491*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2(-0.0) == -HUGE_VAL");
492*57718be8SEnji Cooper }
493*57718be8SEnji Cooper 
494*57718be8SEnji Cooper ATF_TC_BODY(log2_zero_neg, tc)
495*57718be8SEnji Cooper {
496*57718be8SEnji Cooper 	const double x = -0.0L;
497*57718be8SEnji Cooper 
498*57718be8SEnji Cooper 	ATF_CHECK(log2(x) == -HUGE_VAL);
499*57718be8SEnji Cooper }
500*57718be8SEnji Cooper 
501*57718be8SEnji Cooper ATF_TC(log2_zero_pos);
502*57718be8SEnji Cooper ATF_TC_HEAD(log2_zero_pos, tc)
503*57718be8SEnji Cooper {
504*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2(+0.0) == -HUGE_VAL");
505*57718be8SEnji Cooper }
506*57718be8SEnji Cooper 
507*57718be8SEnji Cooper ATF_TC_BODY(log2_zero_pos, tc)
508*57718be8SEnji Cooper {
509*57718be8SEnji Cooper 	const double x = 0.0L;
510*57718be8SEnji Cooper 
511*57718be8SEnji Cooper 	ATF_CHECK(log2(x) == -HUGE_VAL);
512*57718be8SEnji Cooper }
513*57718be8SEnji Cooper 
514*57718be8SEnji Cooper /*
515*57718be8SEnji Cooper  * log2f(3)
516*57718be8SEnji Cooper  */
517*57718be8SEnji Cooper ATF_TC(log2f_base);
518*57718be8SEnji Cooper ATF_TC_HEAD(log2f_base, tc)
519*57718be8SEnji Cooper {
520*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2f(2) == 1");
521*57718be8SEnji Cooper }
522*57718be8SEnji Cooper 
523*57718be8SEnji Cooper ATF_TC_BODY(log2f_base, tc)
524*57718be8SEnji Cooper {
525*57718be8SEnji Cooper 	ATF_CHECK(log2f(2.0) == 1.0);
526*57718be8SEnji Cooper }
527*57718be8SEnji Cooper 
528*57718be8SEnji Cooper ATF_TC(log2f_nan);
529*57718be8SEnji Cooper ATF_TC_HEAD(log2f_nan, tc)
530*57718be8SEnji Cooper {
531*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2f(NaN) == NaN");
532*57718be8SEnji Cooper }
533*57718be8SEnji Cooper 
534*57718be8SEnji Cooper ATF_TC_BODY(log2f_nan, tc)
535*57718be8SEnji Cooper {
536*57718be8SEnji Cooper 	const float x = 0.0L / 0.0L;
537*57718be8SEnji Cooper 
538*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
539*57718be8SEnji Cooper 	ATF_CHECK(isnan(log2f(x)) != 0);
540*57718be8SEnji Cooper }
541*57718be8SEnji Cooper 
542*57718be8SEnji Cooper ATF_TC(log2f_inf_neg);
543*57718be8SEnji Cooper ATF_TC_HEAD(log2f_inf_neg, tc)
544*57718be8SEnji Cooper {
545*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2f(-Inf) == NaN");
546*57718be8SEnji Cooper }
547*57718be8SEnji Cooper 
548*57718be8SEnji Cooper ATF_TC_BODY(log2f_inf_neg, tc)
549*57718be8SEnji Cooper {
550*57718be8SEnji Cooper 	const float x = -1.0L / 0.0L;
551*57718be8SEnji Cooper 	const float y = log2f(x);
552*57718be8SEnji Cooper 
553*57718be8SEnji Cooper 	ATF_CHECK(isnan(y) != 0);
554*57718be8SEnji Cooper }
555*57718be8SEnji Cooper 
556*57718be8SEnji Cooper ATF_TC(log2f_inf_pos);
557*57718be8SEnji Cooper ATF_TC_HEAD(log2f_inf_pos, tc)
558*57718be8SEnji Cooper {
559*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2f(+Inf) == +Inf");
560*57718be8SEnji Cooper }
561*57718be8SEnji Cooper 
562*57718be8SEnji Cooper ATF_TC_BODY(log2f_inf_pos, tc)
563*57718be8SEnji Cooper {
564*57718be8SEnji Cooper 	const float x = 1.0L / 0.0L;
565*57718be8SEnji Cooper 
566*57718be8SEnji Cooper #if defined(__alpha__)
567*57718be8SEnji Cooper 	atf_tc_expect_fail("PR port-alpha/46301");
568*57718be8SEnji Cooper #endif
569*57718be8SEnji Cooper 
570*57718be8SEnji Cooper 	ATF_CHECK(log2f(x) == x);
571*57718be8SEnji Cooper }
572*57718be8SEnji Cooper 
573*57718be8SEnji Cooper ATF_TC(log2f_one_pos);
574*57718be8SEnji Cooper ATF_TC_HEAD(log2f_one_pos, tc)
575*57718be8SEnji Cooper {
576*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2f(1.0) == +0.0");
577*57718be8SEnji Cooper }
578*57718be8SEnji Cooper 
579*57718be8SEnji Cooper ATF_TC_BODY(log2f_one_pos, tc)
580*57718be8SEnji Cooper {
581*57718be8SEnji Cooper 	const float x = log2f(1.0);
582*57718be8SEnji Cooper 	const float y = 0.0L;
583*57718be8SEnji Cooper 
584*57718be8SEnji Cooper 	ATF_CHECK(x == y);
585*57718be8SEnji Cooper 	ATF_CHECK(signbit(x) == 0);
586*57718be8SEnji Cooper 	ATF_CHECK(signbit(y) == 0);
587*57718be8SEnji Cooper }
588*57718be8SEnji Cooper 
589*57718be8SEnji Cooper ATF_TC(log2f_zero_neg);
590*57718be8SEnji Cooper ATF_TC_HEAD(log2f_zero_neg, tc)
591*57718be8SEnji Cooper {
592*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2f(-0.0) == -HUGE_VALF");
593*57718be8SEnji Cooper }
594*57718be8SEnji Cooper 
595*57718be8SEnji Cooper ATF_TC_BODY(log2f_zero_neg, tc)
596*57718be8SEnji Cooper {
597*57718be8SEnji Cooper 	const float x = -0.0L;
598*57718be8SEnji Cooper 
599*57718be8SEnji Cooper 	ATF_CHECK(log2f(x) == -HUGE_VALF);
600*57718be8SEnji Cooper }
601*57718be8SEnji Cooper 
602*57718be8SEnji Cooper ATF_TC(log2f_zero_pos);
603*57718be8SEnji Cooper ATF_TC_HEAD(log2f_zero_pos, tc)
604*57718be8SEnji Cooper {
605*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log2f(+0.0) == -HUGE_VALF");
606*57718be8SEnji Cooper }
607*57718be8SEnji Cooper 
608*57718be8SEnji Cooper ATF_TC_BODY(log2f_zero_pos, tc)
609*57718be8SEnji Cooper {
610*57718be8SEnji Cooper 	const float x = 0.0L;
611*57718be8SEnji Cooper 
612*57718be8SEnji Cooper 	ATF_CHECK(log2f(x) == -HUGE_VALF);
613*57718be8SEnji Cooper }
614*57718be8SEnji Cooper 
615*57718be8SEnji Cooper /*
616*57718be8SEnji Cooper  * log(3)
617*57718be8SEnji Cooper  */
618*57718be8SEnji Cooper ATF_TC(log_base);
619*57718be8SEnji Cooper ATF_TC_HEAD(log_base, tc)
620*57718be8SEnji Cooper {
621*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log(e) == 1");
622*57718be8SEnji Cooper }
623*57718be8SEnji Cooper 
624*57718be8SEnji Cooper ATF_TC_BODY(log_base, tc)
625*57718be8SEnji Cooper {
626*57718be8SEnji Cooper 	const double eps = 1.0e-38;
627*57718be8SEnji Cooper 
628*57718be8SEnji Cooper 	if (fabs(log(M_E) - 1.0) > eps)
629*57718be8SEnji Cooper 		atf_tc_fail_nonfatal("log(e) != 1");
630*57718be8SEnji Cooper }
631*57718be8SEnji Cooper 
632*57718be8SEnji Cooper ATF_TC(log_nan);
633*57718be8SEnji Cooper ATF_TC_HEAD(log_nan, tc)
634*57718be8SEnji Cooper {
635*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log(NaN) == NaN");
636*57718be8SEnji Cooper }
637*57718be8SEnji Cooper 
638*57718be8SEnji Cooper ATF_TC_BODY(log_nan, tc)
639*57718be8SEnji Cooper {
640*57718be8SEnji Cooper 	const double x = 0.0L / 0.0L;
641*57718be8SEnji Cooper 
642*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
643*57718be8SEnji Cooper 	ATF_CHECK(isnan(log(x)) != 0);
644*57718be8SEnji Cooper }
645*57718be8SEnji Cooper 
646*57718be8SEnji Cooper ATF_TC(log_inf_neg);
647*57718be8SEnji Cooper ATF_TC_HEAD(log_inf_neg, tc)
648*57718be8SEnji Cooper {
649*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log(-Inf) == NaN");
650*57718be8SEnji Cooper }
651*57718be8SEnji Cooper 
652*57718be8SEnji Cooper ATF_TC_BODY(log_inf_neg, tc)
653*57718be8SEnji Cooper {
654*57718be8SEnji Cooper 	const double x = -1.0L / 0.0L;
655*57718be8SEnji Cooper 	const double y = log(x);
656*57718be8SEnji Cooper 
657*57718be8SEnji Cooper 	ATF_CHECK(isnan(y) != 0);
658*57718be8SEnji Cooper }
659*57718be8SEnji Cooper 
660*57718be8SEnji Cooper ATF_TC(log_inf_pos);
661*57718be8SEnji Cooper ATF_TC_HEAD(log_inf_pos, tc)
662*57718be8SEnji Cooper {
663*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log(+Inf) == +Inf");
664*57718be8SEnji Cooper }
665*57718be8SEnji Cooper 
666*57718be8SEnji Cooper ATF_TC_BODY(log_inf_pos, tc)
667*57718be8SEnji Cooper {
668*57718be8SEnji Cooper 	const double x = 1.0L / 0.0L;
669*57718be8SEnji Cooper 
670*57718be8SEnji Cooper 	ATF_CHECK(log(x) == x);
671*57718be8SEnji Cooper }
672*57718be8SEnji Cooper 
673*57718be8SEnji Cooper ATF_TC(log_one_pos);
674*57718be8SEnji Cooper ATF_TC_HEAD(log_one_pos, tc)
675*57718be8SEnji Cooper {
676*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log(1.0) == +0.0");
677*57718be8SEnji Cooper }
678*57718be8SEnji Cooper 
679*57718be8SEnji Cooper ATF_TC_BODY(log_one_pos, tc)
680*57718be8SEnji Cooper {
681*57718be8SEnji Cooper 	const double x = log(1.0);
682*57718be8SEnji Cooper 	const double y = 0.0L;
683*57718be8SEnji Cooper 
684*57718be8SEnji Cooper 	ATF_CHECK(x == y);
685*57718be8SEnji Cooper 	ATF_CHECK(signbit(x) == 0);
686*57718be8SEnji Cooper 	ATF_CHECK(signbit(y) == 0);
687*57718be8SEnji Cooper }
688*57718be8SEnji Cooper 
689*57718be8SEnji Cooper ATF_TC(log_zero_neg);
690*57718be8SEnji Cooper ATF_TC_HEAD(log_zero_neg, tc)
691*57718be8SEnji Cooper {
692*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log(-0.0) == -HUGE_VAL");
693*57718be8SEnji Cooper }
694*57718be8SEnji Cooper 
695*57718be8SEnji Cooper ATF_TC_BODY(log_zero_neg, tc)
696*57718be8SEnji Cooper {
697*57718be8SEnji Cooper 	const double x = -0.0L;
698*57718be8SEnji Cooper 
699*57718be8SEnji Cooper 	ATF_CHECK(log(x) == -HUGE_VAL);
700*57718be8SEnji Cooper }
701*57718be8SEnji Cooper 
702*57718be8SEnji Cooper ATF_TC(log_zero_pos);
703*57718be8SEnji Cooper ATF_TC_HEAD(log_zero_pos, tc)
704*57718be8SEnji Cooper {
705*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test log(+0.0) == -HUGE_VAL");
706*57718be8SEnji Cooper }
707*57718be8SEnji Cooper 
708*57718be8SEnji Cooper ATF_TC_BODY(log_zero_pos, tc)
709*57718be8SEnji Cooper {
710*57718be8SEnji Cooper 	const double x = 0.0L;
711*57718be8SEnji Cooper 
712*57718be8SEnji Cooper 	ATF_CHECK(log(x) == -HUGE_VAL);
713*57718be8SEnji Cooper }
714*57718be8SEnji Cooper 
715*57718be8SEnji Cooper /*
716*57718be8SEnji Cooper  * logf(3)
717*57718be8SEnji Cooper  */
718*57718be8SEnji Cooper ATF_TC(logf_base);
719*57718be8SEnji Cooper ATF_TC_HEAD(logf_base, tc)
720*57718be8SEnji Cooper {
721*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test logf(e) == 1");
722*57718be8SEnji Cooper }
723*57718be8SEnji Cooper 
724*57718be8SEnji Cooper ATF_TC_BODY(logf_base, tc)
725*57718be8SEnji Cooper {
726*57718be8SEnji Cooper 	const float eps = 1.0e-7;
727*57718be8SEnji Cooper 
728*57718be8SEnji Cooper 	if (fabsf(logf(M_E) - 1.0f) > eps)
729*57718be8SEnji Cooper 		atf_tc_fail_nonfatal("logf(e) != 1");
730*57718be8SEnji Cooper }
731*57718be8SEnji Cooper 
732*57718be8SEnji Cooper ATF_TC(logf_nan);
733*57718be8SEnji Cooper ATF_TC_HEAD(logf_nan, tc)
734*57718be8SEnji Cooper {
735*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test logf(NaN) == NaN");
736*57718be8SEnji Cooper }
737*57718be8SEnji Cooper 
738*57718be8SEnji Cooper ATF_TC_BODY(logf_nan, tc)
739*57718be8SEnji Cooper {
740*57718be8SEnji Cooper 	const float x = 0.0L / 0.0L;
741*57718be8SEnji Cooper 
742*57718be8SEnji Cooper 	ATF_CHECK(isnan(x) != 0);
743*57718be8SEnji Cooper 	ATF_CHECK(isnan(logf(x)) != 0);
744*57718be8SEnji Cooper }
745*57718be8SEnji Cooper 
746*57718be8SEnji Cooper ATF_TC(logf_inf_neg);
747*57718be8SEnji Cooper ATF_TC_HEAD(logf_inf_neg, tc)
748*57718be8SEnji Cooper {
749*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test logf(-Inf) == NaN");
750*57718be8SEnji Cooper }
751*57718be8SEnji Cooper 
752*57718be8SEnji Cooper ATF_TC_BODY(logf_inf_neg, tc)
753*57718be8SEnji Cooper {
754*57718be8SEnji Cooper 	const float x = -1.0L / 0.0L;
755*57718be8SEnji Cooper 	const float y = logf(x);
756*57718be8SEnji Cooper 
757*57718be8SEnji Cooper 	ATF_CHECK(isnan(y) != 0);
758*57718be8SEnji Cooper }
759*57718be8SEnji Cooper 
760*57718be8SEnji Cooper ATF_TC(logf_inf_pos);
761*57718be8SEnji Cooper ATF_TC_HEAD(logf_inf_pos, tc)
762*57718be8SEnji Cooper {
763*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test logf(+Inf) == +Inf");
764*57718be8SEnji Cooper }
765*57718be8SEnji Cooper 
766*57718be8SEnji Cooper ATF_TC_BODY(logf_inf_pos, tc)
767*57718be8SEnji Cooper {
768*57718be8SEnji Cooper 	const float x = 1.0L / 0.0L;
769*57718be8SEnji Cooper 
770*57718be8SEnji Cooper #if defined(__alpha__)
771*57718be8SEnji Cooper 	atf_tc_expect_fail("PR port-alpha/46301");
772*57718be8SEnji Cooper #endif
773*57718be8SEnji Cooper 
774*57718be8SEnji Cooper 	ATF_CHECK(logf(x) == x);
775*57718be8SEnji Cooper }
776*57718be8SEnji Cooper 
777*57718be8SEnji Cooper ATF_TC(logf_one_pos);
778*57718be8SEnji Cooper ATF_TC_HEAD(logf_one_pos, tc)
779*57718be8SEnji Cooper {
780*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test logf(1.0) == +0.0");
781*57718be8SEnji Cooper }
782*57718be8SEnji Cooper 
783*57718be8SEnji Cooper ATF_TC_BODY(logf_one_pos, tc)
784*57718be8SEnji Cooper {
785*57718be8SEnji Cooper 	const float x = logf(1.0);
786*57718be8SEnji Cooper 	const float y = 0.0L;
787*57718be8SEnji Cooper 
788*57718be8SEnji Cooper 	ATF_CHECK(x == y);
789*57718be8SEnji Cooper 	ATF_CHECK(signbit(x) == 0);
790*57718be8SEnji Cooper 	ATF_CHECK(signbit(y) == 0);
791*57718be8SEnji Cooper }
792*57718be8SEnji Cooper 
793*57718be8SEnji Cooper ATF_TC(logf_zero_neg);
794*57718be8SEnji Cooper ATF_TC_HEAD(logf_zero_neg, tc)
795*57718be8SEnji Cooper {
796*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test logf(-0.0) == -HUGE_VALF");
797*57718be8SEnji Cooper }
798*57718be8SEnji Cooper 
799*57718be8SEnji Cooper ATF_TC_BODY(logf_zero_neg, tc)
800*57718be8SEnji Cooper {
801*57718be8SEnji Cooper 	const float x = -0.0L;
802*57718be8SEnji Cooper 
803*57718be8SEnji Cooper 	ATF_CHECK(logf(x) == -HUGE_VALF);
804*57718be8SEnji Cooper }
805*57718be8SEnji Cooper 
806*57718be8SEnji Cooper ATF_TC(logf_zero_pos);
807*57718be8SEnji Cooper ATF_TC_HEAD(logf_zero_pos, tc)
808*57718be8SEnji Cooper {
809*57718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Test logf(+0.0) == -HUGE_VALF");
810*57718be8SEnji Cooper }
811*57718be8SEnji Cooper 
812*57718be8SEnji Cooper ATF_TC_BODY(logf_zero_pos, tc)
813*57718be8SEnji Cooper {
814*57718be8SEnji Cooper 	const float x = 0.0L;
815*57718be8SEnji Cooper 
816*57718be8SEnji Cooper 	ATF_CHECK(logf(x) == -HUGE_VALF);
817*57718be8SEnji Cooper }
818*57718be8SEnji Cooper 
819*57718be8SEnji Cooper ATF_TP_ADD_TCS(tp)
820*57718be8SEnji Cooper {
821*57718be8SEnji Cooper 
822*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10_base);
823*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10_nan);
824*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10_inf_neg);
825*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10_inf_pos);
826*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10_one_pos);
827*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10_zero_neg);
828*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10_zero_pos);
829*57718be8SEnji Cooper 
830*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10f_base);
831*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10f_nan);
832*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10f_inf_neg);
833*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10f_inf_pos);
834*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10f_one_pos);
835*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10f_zero_neg);
836*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log10f_zero_pos);
837*57718be8SEnji Cooper 
838*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1p_nan);
839*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1p_inf_neg);
840*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1p_inf_pos);
841*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1p_one_neg);
842*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1p_zero_neg);
843*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1p_zero_pos);
844*57718be8SEnji Cooper 
845*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1pf_nan);
846*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1pf_inf_neg);
847*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1pf_inf_pos);
848*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1pf_one_neg);
849*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1pf_zero_neg);
850*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log1pf_zero_pos);
851*57718be8SEnji Cooper 
852*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2_base);
853*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2_nan);
854*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2_inf_neg);
855*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2_inf_pos);
856*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2_one_pos);
857*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2_zero_neg);
858*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2_zero_pos);
859*57718be8SEnji Cooper 
860*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2f_base);
861*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2f_nan);
862*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2f_inf_neg);
863*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2f_inf_pos);
864*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2f_one_pos);
865*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2f_zero_neg);
866*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log2f_zero_pos);
867*57718be8SEnji Cooper 
868*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log_base);
869*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log_nan);
870*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log_inf_neg);
871*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log_inf_pos);
872*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log_one_pos);
873*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log_zero_neg);
874*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, log_zero_pos);
875*57718be8SEnji Cooper 
876*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, logf_base);
877*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, logf_nan);
878*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, logf_inf_neg);
879*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, logf_inf_pos);
880*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, logf_one_pos);
881*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, logf_zero_neg);
882*57718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, logf_zero_pos);
883*57718be8SEnji Cooper 
884*57718be8SEnji Cooper 	return atf_no_error();
885*57718be8SEnji Cooper }
886