t_log.c revision 1.14 1 1.14 riastrad /* $NetBSD: t_log.c,v 1.14 2018/11/07 03:59:36 riastradh 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.14 riastrad __RCSID("$NetBSD: t_log.c,v 1.14 2018/11/07 03:59:36 riastradh Exp $");
33 1.1 jruoho
34 1.3 jruoho #include <atf-c.h>
35 1.7 jruoho
36 1.14 riastrad #include <float.h>
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.3 jruoho ATF_CHECK(log10f(x) == x);
191 1.3 jruoho }
192 1.3 jruoho
193 1.3 jruoho ATF_TC(log10f_one_pos);
194 1.3 jruoho ATF_TC_HEAD(log10f_one_pos, tc)
195 1.3 jruoho {
196 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log10f(1.0) == +0.0");
197 1.3 jruoho }
198 1.3 jruoho
199 1.3 jruoho ATF_TC_BODY(log10f_one_pos, tc)
200 1.3 jruoho {
201 1.3 jruoho const float x = log10f(1.0);
202 1.3 jruoho const float y = 0.0L;
203 1.3 jruoho
204 1.3 jruoho ATF_CHECK(x == y);
205 1.3 jruoho ATF_CHECK(signbit(x) == 0);
206 1.3 jruoho ATF_CHECK(signbit(y) == 0);
207 1.3 jruoho }
208 1.3 jruoho
209 1.3 jruoho ATF_TC(log10f_zero_neg);
210 1.3 jruoho ATF_TC_HEAD(log10f_zero_neg, tc)
211 1.3 jruoho {
212 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log10f(-0.0) == -HUGE_VALF");
213 1.3 jruoho }
214 1.3 jruoho
215 1.3 jruoho ATF_TC_BODY(log10f_zero_neg, tc)
216 1.3 jruoho {
217 1.3 jruoho const float x = -0.0L;
218 1.3 jruoho
219 1.3 jruoho ATF_CHECK(log10f(x) == -HUGE_VALF);
220 1.3 jruoho }
221 1.3 jruoho
222 1.3 jruoho ATF_TC(log10f_zero_pos);
223 1.3 jruoho ATF_TC_HEAD(log10f_zero_pos, tc)
224 1.3 jruoho {
225 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log10f(+0.0) == -HUGE_VALF");
226 1.3 jruoho }
227 1.3 jruoho
228 1.3 jruoho ATF_TC_BODY(log10f_zero_pos, tc)
229 1.3 jruoho {
230 1.3 jruoho const float x = 0.0L;
231 1.3 jruoho
232 1.3 jruoho ATF_CHECK(log10f(x) == -HUGE_VALF);
233 1.3 jruoho }
234 1.3 jruoho
235 1.3 jruoho /*
236 1.3 jruoho * log1p(3)
237 1.3 jruoho */
238 1.3 jruoho ATF_TC(log1p_nan);
239 1.3 jruoho ATF_TC_HEAD(log1p_nan, tc)
240 1.3 jruoho {
241 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1p(NaN) == NaN");
242 1.3 jruoho }
243 1.3 jruoho
244 1.3 jruoho ATF_TC_BODY(log1p_nan, tc)
245 1.3 jruoho {
246 1.3 jruoho const double x = 0.0L / 0.0L;
247 1.3 jruoho
248 1.3 jruoho ATF_CHECK(isnan(x) != 0);
249 1.3 jruoho ATF_CHECK(isnan(log1p(x)) != 0);
250 1.3 jruoho }
251 1.3 jruoho
252 1.3 jruoho ATF_TC(log1p_inf_neg);
253 1.3 jruoho ATF_TC_HEAD(log1p_inf_neg, tc)
254 1.3 jruoho {
255 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1p(-Inf) == NaN");
256 1.3 jruoho }
257 1.3 jruoho
258 1.3 jruoho ATF_TC_BODY(log1p_inf_neg, tc)
259 1.3 jruoho {
260 1.3 jruoho const double x = -1.0L / 0.0L;
261 1.3 jruoho const double y = log1p(x);
262 1.3 jruoho
263 1.4 jruoho if (isnan(y) == 0) {
264 1.4 jruoho atf_tc_expect_fail("PR lib/45362");
265 1.4 jruoho atf_tc_fail("log1p(-Inf) != NaN");
266 1.4 jruoho }
267 1.3 jruoho }
268 1.3 jruoho
269 1.3 jruoho ATF_TC(log1p_inf_pos);
270 1.3 jruoho ATF_TC_HEAD(log1p_inf_pos, tc)
271 1.3 jruoho {
272 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1p(+Inf) == +Inf");
273 1.3 jruoho }
274 1.3 jruoho
275 1.3 jruoho ATF_TC_BODY(log1p_inf_pos, tc)
276 1.3 jruoho {
277 1.3 jruoho const double x = 1.0L / 0.0L;
278 1.3 jruoho
279 1.3 jruoho ATF_CHECK(log1p(x) == x);
280 1.3 jruoho }
281 1.3 jruoho
282 1.3 jruoho ATF_TC(log1p_one_neg);
283 1.3 jruoho ATF_TC_HEAD(log1p_one_neg, tc)
284 1.3 jruoho {
285 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1p(-1.0) == -HUGE_VAL");
286 1.3 jruoho }
287 1.3 jruoho
288 1.3 jruoho ATF_TC_BODY(log1p_one_neg, tc)
289 1.3 jruoho {
290 1.3 jruoho const double x = log1p(-1.0);
291 1.3 jruoho
292 1.4 jruoho if (x != -HUGE_VAL) {
293 1.4 jruoho atf_tc_expect_fail("PR lib/45362");
294 1.4 jruoho atf_tc_fail("log1p(-1.0) != -HUGE_VAL");
295 1.4 jruoho }
296 1.3 jruoho }
297 1.3 jruoho
298 1.3 jruoho ATF_TC(log1p_zero_neg);
299 1.3 jruoho ATF_TC_HEAD(log1p_zero_neg, tc)
300 1.3 jruoho {
301 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1p(-0.0) == -0.0");
302 1.3 jruoho }
303 1.3 jruoho
304 1.3 jruoho ATF_TC_BODY(log1p_zero_neg, tc)
305 1.3 jruoho {
306 1.3 jruoho const double x = -0.0L;
307 1.3 jruoho
308 1.3 jruoho ATF_CHECK(log1p(x) == x);
309 1.3 jruoho }
310 1.3 jruoho
311 1.3 jruoho ATF_TC(log1p_zero_pos);
312 1.3 jruoho ATF_TC_HEAD(log1p_zero_pos, tc)
313 1.3 jruoho {
314 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1p(+0.0) == +0.0");
315 1.3 jruoho }
316 1.3 jruoho
317 1.3 jruoho ATF_TC_BODY(log1p_zero_pos, tc)
318 1.3 jruoho {
319 1.3 jruoho const double x = 0.0L;
320 1.3 jruoho
321 1.3 jruoho ATF_CHECK(log1p(x) == x);
322 1.3 jruoho }
323 1.3 jruoho
324 1.3 jruoho /*
325 1.3 jruoho * log1pf(3)
326 1.3 jruoho */
327 1.3 jruoho ATF_TC(log1pf_nan);
328 1.3 jruoho ATF_TC_HEAD(log1pf_nan, tc)
329 1.3 jruoho {
330 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1pf(NaN) == NaN");
331 1.3 jruoho }
332 1.3 jruoho
333 1.3 jruoho ATF_TC_BODY(log1pf_nan, tc)
334 1.3 jruoho {
335 1.3 jruoho const float x = 0.0L / 0.0L;
336 1.3 jruoho
337 1.3 jruoho ATF_CHECK(isnan(x) != 0);
338 1.3 jruoho ATF_CHECK(isnan(log1pf(x)) != 0);
339 1.3 jruoho }
340 1.3 jruoho
341 1.3 jruoho ATF_TC(log1pf_inf_neg);
342 1.3 jruoho ATF_TC_HEAD(log1pf_inf_neg, tc)
343 1.3 jruoho {
344 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1pf(-Inf) == NaN");
345 1.3 jruoho }
346 1.3 jruoho
347 1.3 jruoho ATF_TC_BODY(log1pf_inf_neg, tc)
348 1.3 jruoho {
349 1.3 jruoho const float x = -1.0L / 0.0L;
350 1.3 jruoho const float y = log1pf(x);
351 1.3 jruoho
352 1.4 jruoho if (isnan(y) == 0) {
353 1.4 jruoho atf_tc_expect_fail("PR lib/45362");
354 1.4 jruoho atf_tc_fail("log1pf(-Inf) != NaN");
355 1.4 jruoho }
356 1.3 jruoho }
357 1.3 jruoho
358 1.3 jruoho ATF_TC(log1pf_inf_pos);
359 1.3 jruoho ATF_TC_HEAD(log1pf_inf_pos, tc)
360 1.3 jruoho {
361 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1pf(+Inf) == +Inf");
362 1.3 jruoho }
363 1.3 jruoho
364 1.3 jruoho ATF_TC_BODY(log1pf_inf_pos, tc)
365 1.3 jruoho {
366 1.3 jruoho const float x = 1.0L / 0.0L;
367 1.3 jruoho
368 1.3 jruoho ATF_CHECK(log1pf(x) == x);
369 1.3 jruoho }
370 1.3 jruoho
371 1.3 jruoho ATF_TC(log1pf_one_neg);
372 1.3 jruoho ATF_TC_HEAD(log1pf_one_neg, tc)
373 1.3 jruoho {
374 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1pf(-1.0) == -HUGE_VALF");
375 1.3 jruoho }
376 1.3 jruoho
377 1.3 jruoho ATF_TC_BODY(log1pf_one_neg, tc)
378 1.3 jruoho {
379 1.3 jruoho const float x = log1pf(-1.0);
380 1.3 jruoho
381 1.4 jruoho if (x != -HUGE_VALF) {
382 1.4 jruoho atf_tc_expect_fail("PR lib/45362");
383 1.4 jruoho atf_tc_fail("log1pf(-1.0) != -HUGE_VALF");
384 1.4 jruoho }
385 1.3 jruoho }
386 1.3 jruoho
387 1.3 jruoho ATF_TC(log1pf_zero_neg);
388 1.3 jruoho ATF_TC_HEAD(log1pf_zero_neg, tc)
389 1.3 jruoho {
390 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1pf(-0.0) == -0.0");
391 1.3 jruoho }
392 1.3 jruoho
393 1.3 jruoho ATF_TC_BODY(log1pf_zero_neg, tc)
394 1.3 jruoho {
395 1.3 jruoho const float x = -0.0L;
396 1.3 jruoho
397 1.3 jruoho ATF_CHECK(log1pf(x) == x);
398 1.3 jruoho }
399 1.3 jruoho
400 1.3 jruoho ATF_TC(log1pf_zero_pos);
401 1.3 jruoho ATF_TC_HEAD(log1pf_zero_pos, tc)
402 1.3 jruoho {
403 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log1pf(+0.0) == +0.0");
404 1.3 jruoho }
405 1.3 jruoho
406 1.3 jruoho ATF_TC_BODY(log1pf_zero_pos, tc)
407 1.3 jruoho {
408 1.3 jruoho const float x = 0.0L;
409 1.3 jruoho
410 1.3 jruoho ATF_CHECK(log1pf(x) == x);
411 1.3 jruoho }
412 1.3 jruoho
413 1.3 jruoho /*
414 1.3 jruoho * log2(3)
415 1.3 jruoho */
416 1.5 jruoho ATF_TC(log2_base);
417 1.5 jruoho ATF_TC_HEAD(log2_base, tc)
418 1.5 jruoho {
419 1.5 jruoho atf_tc_set_md_var(tc, "descr", "Test log2(2) == 1");
420 1.5 jruoho }
421 1.5 jruoho
422 1.5 jruoho ATF_TC_BODY(log2_base, tc)
423 1.5 jruoho {
424 1.5 jruoho ATF_CHECK(log2(2.0) == 1.0);
425 1.5 jruoho }
426 1.5 jruoho
427 1.3 jruoho ATF_TC(log2_nan);
428 1.3 jruoho ATF_TC_HEAD(log2_nan, tc)
429 1.3 jruoho {
430 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2(NaN) == NaN");
431 1.3 jruoho }
432 1.3 jruoho
433 1.3 jruoho ATF_TC_BODY(log2_nan, tc)
434 1.3 jruoho {
435 1.3 jruoho const double x = 0.0L / 0.0L;
436 1.3 jruoho
437 1.3 jruoho ATF_CHECK(isnan(x) != 0);
438 1.3 jruoho ATF_CHECK(isnan(log2(x)) != 0);
439 1.3 jruoho }
440 1.3 jruoho
441 1.3 jruoho ATF_TC(log2_inf_neg);
442 1.3 jruoho ATF_TC_HEAD(log2_inf_neg, tc)
443 1.3 jruoho {
444 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2(-Inf) == NaN");
445 1.3 jruoho }
446 1.3 jruoho
447 1.3 jruoho ATF_TC_BODY(log2_inf_neg, tc)
448 1.3 jruoho {
449 1.3 jruoho const double x = -1.0L / 0.0L;
450 1.3 jruoho const double y = log2(x);
451 1.3 jruoho
452 1.3 jruoho ATF_CHECK(isnan(y) != 0);
453 1.3 jruoho }
454 1.3 jruoho
455 1.3 jruoho ATF_TC(log2_inf_pos);
456 1.3 jruoho ATF_TC_HEAD(log2_inf_pos, tc)
457 1.3 jruoho {
458 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2(+Inf) == +Inf");
459 1.3 jruoho }
460 1.3 jruoho
461 1.3 jruoho ATF_TC_BODY(log2_inf_pos, tc)
462 1.3 jruoho {
463 1.3 jruoho const double x = 1.0L / 0.0L;
464 1.3 jruoho
465 1.3 jruoho ATF_CHECK(log2(x) == x);
466 1.3 jruoho }
467 1.3 jruoho
468 1.3 jruoho ATF_TC(log2_one_pos);
469 1.3 jruoho ATF_TC_HEAD(log2_one_pos, tc)
470 1.3 jruoho {
471 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2(1.0) == +0.0");
472 1.3 jruoho }
473 1.3 jruoho
474 1.3 jruoho ATF_TC_BODY(log2_one_pos, tc)
475 1.3 jruoho {
476 1.3 jruoho const double x = log2(1.0);
477 1.3 jruoho const double y = 0.0L;
478 1.3 jruoho
479 1.3 jruoho ATF_CHECK(x == y);
480 1.3 jruoho ATF_CHECK(signbit(x) == 0);
481 1.3 jruoho ATF_CHECK(signbit(y) == 0);
482 1.3 jruoho }
483 1.3 jruoho
484 1.3 jruoho ATF_TC(log2_zero_neg);
485 1.3 jruoho ATF_TC_HEAD(log2_zero_neg, tc)
486 1.3 jruoho {
487 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2(-0.0) == -HUGE_VAL");
488 1.3 jruoho }
489 1.3 jruoho
490 1.3 jruoho ATF_TC_BODY(log2_zero_neg, tc)
491 1.3 jruoho {
492 1.3 jruoho const double x = -0.0L;
493 1.3 jruoho
494 1.3 jruoho ATF_CHECK(log2(x) == -HUGE_VAL);
495 1.3 jruoho }
496 1.3 jruoho
497 1.3 jruoho ATF_TC(log2_zero_pos);
498 1.3 jruoho ATF_TC_HEAD(log2_zero_pos, tc)
499 1.3 jruoho {
500 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2(+0.0) == -HUGE_VAL");
501 1.3 jruoho }
502 1.3 jruoho
503 1.3 jruoho ATF_TC_BODY(log2_zero_pos, tc)
504 1.3 jruoho {
505 1.3 jruoho const double x = 0.0L;
506 1.3 jruoho
507 1.3 jruoho ATF_CHECK(log2(x) == -HUGE_VAL);
508 1.3 jruoho }
509 1.3 jruoho
510 1.3 jruoho /*
511 1.3 jruoho * log2f(3)
512 1.3 jruoho */
513 1.5 jruoho ATF_TC(log2f_base);
514 1.5 jruoho ATF_TC_HEAD(log2f_base, tc)
515 1.5 jruoho {
516 1.5 jruoho atf_tc_set_md_var(tc, "descr", "Test log2f(2) == 1");
517 1.5 jruoho }
518 1.5 jruoho
519 1.5 jruoho ATF_TC_BODY(log2f_base, tc)
520 1.5 jruoho {
521 1.5 jruoho ATF_CHECK(log2f(2.0) == 1.0);
522 1.5 jruoho }
523 1.5 jruoho
524 1.3 jruoho ATF_TC(log2f_nan);
525 1.3 jruoho ATF_TC_HEAD(log2f_nan, tc)
526 1.3 jruoho {
527 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2f(NaN) == NaN");
528 1.3 jruoho }
529 1.3 jruoho
530 1.3 jruoho ATF_TC_BODY(log2f_nan, tc)
531 1.3 jruoho {
532 1.3 jruoho const float x = 0.0L / 0.0L;
533 1.3 jruoho
534 1.3 jruoho ATF_CHECK(isnan(x) != 0);
535 1.3 jruoho ATF_CHECK(isnan(log2f(x)) != 0);
536 1.3 jruoho }
537 1.3 jruoho
538 1.3 jruoho ATF_TC(log2f_inf_neg);
539 1.3 jruoho ATF_TC_HEAD(log2f_inf_neg, tc)
540 1.3 jruoho {
541 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2f(-Inf) == NaN");
542 1.3 jruoho }
543 1.3 jruoho
544 1.3 jruoho ATF_TC_BODY(log2f_inf_neg, tc)
545 1.3 jruoho {
546 1.3 jruoho const float x = -1.0L / 0.0L;
547 1.3 jruoho const float y = log2f(x);
548 1.3 jruoho
549 1.3 jruoho ATF_CHECK(isnan(y) != 0);
550 1.3 jruoho }
551 1.3 jruoho
552 1.3 jruoho ATF_TC(log2f_inf_pos);
553 1.3 jruoho ATF_TC_HEAD(log2f_inf_pos, tc)
554 1.3 jruoho {
555 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2f(+Inf) == +Inf");
556 1.3 jruoho }
557 1.3 jruoho
558 1.3 jruoho ATF_TC_BODY(log2f_inf_pos, tc)
559 1.3 jruoho {
560 1.3 jruoho const float x = 1.0L / 0.0L;
561 1.3 jruoho
562 1.3 jruoho ATF_CHECK(log2f(x) == x);
563 1.3 jruoho }
564 1.3 jruoho
565 1.3 jruoho ATF_TC(log2f_one_pos);
566 1.3 jruoho ATF_TC_HEAD(log2f_one_pos, tc)
567 1.3 jruoho {
568 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2f(1.0) == +0.0");
569 1.3 jruoho }
570 1.3 jruoho
571 1.3 jruoho ATF_TC_BODY(log2f_one_pos, tc)
572 1.3 jruoho {
573 1.3 jruoho const float x = log2f(1.0);
574 1.3 jruoho const float y = 0.0L;
575 1.3 jruoho
576 1.3 jruoho ATF_CHECK(x == y);
577 1.3 jruoho ATF_CHECK(signbit(x) == 0);
578 1.3 jruoho ATF_CHECK(signbit(y) == 0);
579 1.3 jruoho }
580 1.3 jruoho
581 1.3 jruoho ATF_TC(log2f_zero_neg);
582 1.3 jruoho ATF_TC_HEAD(log2f_zero_neg, tc)
583 1.3 jruoho {
584 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2f(-0.0) == -HUGE_VALF");
585 1.3 jruoho }
586 1.3 jruoho
587 1.3 jruoho ATF_TC_BODY(log2f_zero_neg, tc)
588 1.3 jruoho {
589 1.3 jruoho const float x = -0.0L;
590 1.3 jruoho
591 1.3 jruoho ATF_CHECK(log2f(x) == -HUGE_VALF);
592 1.3 jruoho }
593 1.3 jruoho
594 1.3 jruoho ATF_TC(log2f_zero_pos);
595 1.3 jruoho ATF_TC_HEAD(log2f_zero_pos, tc)
596 1.3 jruoho {
597 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log2f(+0.0) == -HUGE_VALF");
598 1.3 jruoho }
599 1.3 jruoho
600 1.3 jruoho ATF_TC_BODY(log2f_zero_pos, tc)
601 1.3 jruoho {
602 1.3 jruoho const float x = 0.0L;
603 1.3 jruoho
604 1.3 jruoho ATF_CHECK(log2f(x) == -HUGE_VALF);
605 1.3 jruoho }
606 1.1 jruoho
607 1.3 jruoho /*
608 1.3 jruoho * log(3)
609 1.3 jruoho */
610 1.5 jruoho ATF_TC(log_base);
611 1.5 jruoho ATF_TC_HEAD(log_base, tc)
612 1.5 jruoho {
613 1.5 jruoho atf_tc_set_md_var(tc, "descr", "Test log(e) == 1");
614 1.5 jruoho }
615 1.5 jruoho
616 1.5 jruoho ATF_TC_BODY(log_base, tc)
617 1.5 jruoho {
618 1.14 riastrad const double eps = DBL_EPSILON;
619 1.5 jruoho
620 1.14 riastrad if (!(fabs(log(M_E) - 1.0) <= eps))
621 1.14 riastrad atf_tc_fail_nonfatal("log(e) = %.17g != 1", log(M_E));
622 1.5 jruoho }
623 1.5 jruoho
624 1.1 jruoho ATF_TC(log_nan);
625 1.1 jruoho ATF_TC_HEAD(log_nan, tc)
626 1.1 jruoho {
627 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log(NaN) == NaN");
628 1.1 jruoho }
629 1.1 jruoho
630 1.1 jruoho ATF_TC_BODY(log_nan, tc)
631 1.1 jruoho {
632 1.3 jruoho const double x = 0.0L / 0.0L;
633 1.3 jruoho
634 1.3 jruoho ATF_CHECK(isnan(x) != 0);
635 1.3 jruoho ATF_CHECK(isnan(log(x)) != 0);
636 1.3 jruoho }
637 1.3 jruoho
638 1.3 jruoho ATF_TC(log_inf_neg);
639 1.3 jruoho ATF_TC_HEAD(log_inf_neg, tc)
640 1.3 jruoho {
641 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log(-Inf) == NaN");
642 1.3 jruoho }
643 1.3 jruoho
644 1.3 jruoho ATF_TC_BODY(log_inf_neg, tc)
645 1.3 jruoho {
646 1.3 jruoho const double x = -1.0L / 0.0L;
647 1.3 jruoho const double y = log(x);
648 1.3 jruoho
649 1.3 jruoho ATF_CHECK(isnan(y) != 0);
650 1.3 jruoho }
651 1.3 jruoho
652 1.3 jruoho ATF_TC(log_inf_pos);
653 1.3 jruoho ATF_TC_HEAD(log_inf_pos, tc)
654 1.3 jruoho {
655 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log(+Inf) == +Inf");
656 1.3 jruoho }
657 1.3 jruoho
658 1.3 jruoho ATF_TC_BODY(log_inf_pos, tc)
659 1.3 jruoho {
660 1.3 jruoho const double x = 1.0L / 0.0L;
661 1.1 jruoho
662 1.3 jruoho ATF_CHECK(log(x) == x);
663 1.3 jruoho }
664 1.3 jruoho
665 1.3 jruoho ATF_TC(log_one_pos);
666 1.3 jruoho ATF_TC_HEAD(log_one_pos, tc)
667 1.3 jruoho {
668 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log(1.0) == +0.0");
669 1.3 jruoho }
670 1.3 jruoho
671 1.3 jruoho ATF_TC_BODY(log_one_pos, tc)
672 1.3 jruoho {
673 1.3 jruoho const double x = log(1.0);
674 1.3 jruoho const double y = 0.0L;
675 1.1 jruoho
676 1.3 jruoho ATF_CHECK(x == y);
677 1.3 jruoho ATF_CHECK(signbit(x) == 0);
678 1.3 jruoho ATF_CHECK(signbit(y) == 0);
679 1.3 jruoho }
680 1.1 jruoho
681 1.3 jruoho ATF_TC(log_zero_neg);
682 1.3 jruoho ATF_TC_HEAD(log_zero_neg, tc)
683 1.3 jruoho {
684 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log(-0.0) == -HUGE_VAL");
685 1.3 jruoho }
686 1.1 jruoho
687 1.3 jruoho ATF_TC_BODY(log_zero_neg, tc)
688 1.3 jruoho {
689 1.3 jruoho const double x = -0.0L;
690 1.1 jruoho
691 1.3 jruoho ATF_CHECK(log(x) == -HUGE_VAL);
692 1.3 jruoho }
693 1.3 jruoho
694 1.3 jruoho ATF_TC(log_zero_pos);
695 1.3 jruoho ATF_TC_HEAD(log_zero_pos, tc)
696 1.3 jruoho {
697 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test log(+0.0) == -HUGE_VAL");
698 1.3 jruoho }
699 1.3 jruoho
700 1.3 jruoho ATF_TC_BODY(log_zero_pos, tc)
701 1.3 jruoho {
702 1.3 jruoho const double x = 0.0L;
703 1.3 jruoho
704 1.3 jruoho ATF_CHECK(log(x) == -HUGE_VAL);
705 1.3 jruoho }
706 1.3 jruoho
707 1.3 jruoho /*
708 1.3 jruoho * logf(3)
709 1.3 jruoho */
710 1.5 jruoho ATF_TC(logf_base);
711 1.5 jruoho ATF_TC_HEAD(logf_base, tc)
712 1.5 jruoho {
713 1.5 jruoho atf_tc_set_md_var(tc, "descr", "Test logf(e) == 1");
714 1.5 jruoho }
715 1.5 jruoho
716 1.5 jruoho ATF_TC_BODY(logf_base, tc)
717 1.5 jruoho {
718 1.14 riastrad const float eps = FLT_EPSILON;
719 1.5 jruoho
720 1.14 riastrad if (!(fabsf(logf(M_E) - 1.0f) <= eps))
721 1.14 riastrad atf_tc_fail_nonfatal("logf(e) = %.17g != 1",
722 1.14 riastrad (double)logf(M_E));
723 1.5 jruoho }
724 1.5 jruoho
725 1.3 jruoho ATF_TC(logf_nan);
726 1.3 jruoho ATF_TC_HEAD(logf_nan, tc)
727 1.3 jruoho {
728 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test logf(NaN) == NaN");
729 1.3 jruoho }
730 1.3 jruoho
731 1.3 jruoho ATF_TC_BODY(logf_nan, tc)
732 1.3 jruoho {
733 1.3 jruoho const float x = 0.0L / 0.0L;
734 1.3 jruoho
735 1.3 jruoho ATF_CHECK(isnan(x) != 0);
736 1.3 jruoho ATF_CHECK(isnan(logf(x)) != 0);
737 1.3 jruoho }
738 1.3 jruoho
739 1.3 jruoho ATF_TC(logf_inf_neg);
740 1.3 jruoho ATF_TC_HEAD(logf_inf_neg, tc)
741 1.3 jruoho {
742 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test logf(-Inf) == NaN");
743 1.3 jruoho }
744 1.3 jruoho
745 1.3 jruoho ATF_TC_BODY(logf_inf_neg, tc)
746 1.3 jruoho {
747 1.3 jruoho const float x = -1.0L / 0.0L;
748 1.3 jruoho const float y = logf(x);
749 1.3 jruoho
750 1.3 jruoho ATF_CHECK(isnan(y) != 0);
751 1.3 jruoho }
752 1.3 jruoho
753 1.3 jruoho ATF_TC(logf_inf_pos);
754 1.3 jruoho ATF_TC_HEAD(logf_inf_pos, tc)
755 1.3 jruoho {
756 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test logf(+Inf) == +Inf");
757 1.3 jruoho }
758 1.3 jruoho
759 1.3 jruoho ATF_TC_BODY(logf_inf_pos, tc)
760 1.3 jruoho {
761 1.3 jruoho const float x = 1.0L / 0.0L;
762 1.3 jruoho
763 1.3 jruoho ATF_CHECK(logf(x) == x);
764 1.3 jruoho }
765 1.3 jruoho
766 1.3 jruoho ATF_TC(logf_one_pos);
767 1.3 jruoho ATF_TC_HEAD(logf_one_pos, tc)
768 1.3 jruoho {
769 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test logf(1.0) == +0.0");
770 1.3 jruoho }
771 1.3 jruoho
772 1.3 jruoho ATF_TC_BODY(logf_one_pos, tc)
773 1.3 jruoho {
774 1.3 jruoho const float x = logf(1.0);
775 1.3 jruoho const float y = 0.0L;
776 1.3 jruoho
777 1.3 jruoho ATF_CHECK(x == y);
778 1.3 jruoho ATF_CHECK(signbit(x) == 0);
779 1.3 jruoho ATF_CHECK(signbit(y) == 0);
780 1.3 jruoho }
781 1.3 jruoho
782 1.3 jruoho ATF_TC(logf_zero_neg);
783 1.3 jruoho ATF_TC_HEAD(logf_zero_neg, tc)
784 1.3 jruoho {
785 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test logf(-0.0) == -HUGE_VALF");
786 1.3 jruoho }
787 1.3 jruoho
788 1.3 jruoho ATF_TC_BODY(logf_zero_neg, tc)
789 1.3 jruoho {
790 1.3 jruoho const float x = -0.0L;
791 1.3 jruoho
792 1.3 jruoho ATF_CHECK(logf(x) == -HUGE_VALF);
793 1.3 jruoho }
794 1.3 jruoho
795 1.3 jruoho ATF_TC(logf_zero_pos);
796 1.3 jruoho ATF_TC_HEAD(logf_zero_pos, tc)
797 1.3 jruoho {
798 1.3 jruoho atf_tc_set_md_var(tc, "descr", "Test logf(+0.0) == -HUGE_VALF");
799 1.3 jruoho }
800 1.3 jruoho
801 1.3 jruoho ATF_TC_BODY(logf_zero_pos, tc)
802 1.3 jruoho {
803 1.3 jruoho const float x = 0.0L;
804 1.3 jruoho
805 1.3 jruoho ATF_CHECK(logf(x) == -HUGE_VALF);
806 1.1 jruoho }
807 1.1 jruoho
808 1.1 jruoho ATF_TP_ADD_TCS(tp)
809 1.1 jruoho {
810 1.1 jruoho
811 1.5 jruoho ATF_TP_ADD_TC(tp, log10_base);
812 1.3 jruoho ATF_TP_ADD_TC(tp, log10_nan);
813 1.3 jruoho ATF_TP_ADD_TC(tp, log10_inf_neg);
814 1.3 jruoho ATF_TP_ADD_TC(tp, log10_inf_pos);
815 1.3 jruoho ATF_TP_ADD_TC(tp, log10_one_pos);
816 1.3 jruoho ATF_TP_ADD_TC(tp, log10_zero_neg);
817 1.3 jruoho ATF_TP_ADD_TC(tp, log10_zero_pos);
818 1.3 jruoho
819 1.5 jruoho ATF_TP_ADD_TC(tp, log10f_base);
820 1.3 jruoho ATF_TP_ADD_TC(tp, log10f_nan);
821 1.3 jruoho ATF_TP_ADD_TC(tp, log10f_inf_neg);
822 1.3 jruoho ATF_TP_ADD_TC(tp, log10f_inf_pos);
823 1.3 jruoho ATF_TP_ADD_TC(tp, log10f_one_pos);
824 1.3 jruoho ATF_TP_ADD_TC(tp, log10f_zero_neg);
825 1.3 jruoho ATF_TP_ADD_TC(tp, log10f_zero_pos);
826 1.3 jruoho
827 1.3 jruoho ATF_TP_ADD_TC(tp, log1p_nan);
828 1.3 jruoho ATF_TP_ADD_TC(tp, log1p_inf_neg);
829 1.3 jruoho ATF_TP_ADD_TC(tp, log1p_inf_pos);
830 1.3 jruoho ATF_TP_ADD_TC(tp, log1p_one_neg);
831 1.3 jruoho ATF_TP_ADD_TC(tp, log1p_zero_neg);
832 1.3 jruoho ATF_TP_ADD_TC(tp, log1p_zero_pos);
833 1.3 jruoho
834 1.3 jruoho ATF_TP_ADD_TC(tp, log1pf_nan);
835 1.3 jruoho ATF_TP_ADD_TC(tp, log1pf_inf_neg);
836 1.3 jruoho ATF_TP_ADD_TC(tp, log1pf_inf_pos);
837 1.3 jruoho ATF_TP_ADD_TC(tp, log1pf_one_neg);
838 1.3 jruoho ATF_TP_ADD_TC(tp, log1pf_zero_neg);
839 1.3 jruoho ATF_TP_ADD_TC(tp, log1pf_zero_pos);
840 1.3 jruoho
841 1.5 jruoho ATF_TP_ADD_TC(tp, log2_base);
842 1.3 jruoho ATF_TP_ADD_TC(tp, log2_nan);
843 1.3 jruoho ATF_TP_ADD_TC(tp, log2_inf_neg);
844 1.3 jruoho ATF_TP_ADD_TC(tp, log2_inf_pos);
845 1.3 jruoho ATF_TP_ADD_TC(tp, log2_one_pos);
846 1.3 jruoho ATF_TP_ADD_TC(tp, log2_zero_neg);
847 1.3 jruoho ATF_TP_ADD_TC(tp, log2_zero_pos);
848 1.3 jruoho
849 1.5 jruoho ATF_TP_ADD_TC(tp, log2f_base);
850 1.3 jruoho ATF_TP_ADD_TC(tp, log2f_nan);
851 1.3 jruoho ATF_TP_ADD_TC(tp, log2f_inf_neg);
852 1.3 jruoho ATF_TP_ADD_TC(tp, log2f_inf_pos);
853 1.3 jruoho ATF_TP_ADD_TC(tp, log2f_one_pos);
854 1.3 jruoho ATF_TP_ADD_TC(tp, log2f_zero_neg);
855 1.3 jruoho ATF_TP_ADD_TC(tp, log2f_zero_pos);
856 1.3 jruoho
857 1.5 jruoho ATF_TP_ADD_TC(tp, log_base);
858 1.1 jruoho ATF_TP_ADD_TC(tp, log_nan);
859 1.3 jruoho ATF_TP_ADD_TC(tp, log_inf_neg);
860 1.3 jruoho ATF_TP_ADD_TC(tp, log_inf_pos);
861 1.3 jruoho ATF_TP_ADD_TC(tp, log_one_pos);
862 1.3 jruoho ATF_TP_ADD_TC(tp, log_zero_neg);
863 1.3 jruoho ATF_TP_ADD_TC(tp, log_zero_pos);
864 1.3 jruoho
865 1.5 jruoho ATF_TP_ADD_TC(tp, logf_base);
866 1.3 jruoho ATF_TP_ADD_TC(tp, logf_nan);
867 1.3 jruoho ATF_TP_ADD_TC(tp, logf_inf_neg);
868 1.3 jruoho ATF_TP_ADD_TC(tp, logf_inf_pos);
869 1.3 jruoho ATF_TP_ADD_TC(tp, logf_one_pos);
870 1.3 jruoho ATF_TP_ADD_TC(tp, logf_zero_neg);
871 1.3 jruoho ATF_TP_ADD_TC(tp, logf_zero_pos);
872 1.1 jruoho
873 1.1 jruoho return atf_no_error();
874 1.1 jruoho }
875