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