]> git.ipfire.org Git - thirdparty/glibc.git/blame - math/libm-test.inc
Fix fma missing underflows and bad results for some subnormal results (bugs 14152...
[thirdparty/glibc.git] / math / libm-test.inc
CommitLineData
cfdc0dd7 1/* Copyright (C) 1997-2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
8847214f 2 This file is part of the GNU C Library.
18394a08 3 Contributed by Andreas Jaeger <aj@suse.de>, 1997.
8847214f
UD
4
5 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
8847214f
UD
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 13 Lesser General Public License for more details.
8847214f 14
41bdb6e2 15 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
8847214f
UD
18
19/* Part of testsuite for libm.
20
21 This file is processed by a perl script. The resulting file has to
22 be included by a master file that defines:
23
f964490f 24 Macros:
8847214f
UD
25 FUNC(function): converts general function name (like cos) to
26 name with correct suffix (e.g. cosl or cosf)
27 MATHCONST(x): like FUNC but for constants (e.g convert 0.0 to 0.0L)
28 FLOAT: floating point type to test
29 - TEST_MSG: informal message to be displayed
30 CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
31 chooses one of the parameters as delta for testing
32 equality
33 PRINTF_EXPR Floating point conversion specification to print a variable
34 of type FLOAT with printf. PRINTF_EXPR just contains
35 the specifier, not the percent and width arguments,
36 e.g. "f".
37 PRINTF_XEXPR Like PRINTF_EXPR, but print in hexadecimal format.
38 PRINTF_NEXPR Like PRINTF_EXPR, but print nice. */
39
40/* This testsuite has currently tests for:
41 acos, acosh, asin, asinh, atan, atan2, atanh,
42 cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1,
ef1bb361 43 fabs, fdim, finite, floor, fma, fmax, fmin, fmod, fpclassify,
8847214f 44 frexp, gamma, hypot,
ef1bb361 45 ilogb, isfinite, isinf, isnan, isnormal,
0e8e0c1c 46 isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
8847214f
UD
47 j0, j1, jn,
48 ldexp, lgamma, log, log10, log1p, log2, logb,
28234b07 49 modf, nearbyint, nextafter, nexttoward,
8847214f
UD
50 pow, remainder, remquo, rint, lrint, llrint,
51 round, lround, llround,
52 scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
e9c7764e 53 y0, y1, yn, significand
8847214f
UD
54
55 and for the following complex math functions:
56 cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
28234b07
JM
57 ccos, ccosh, cexp, cimag, clog, clog10, conj, cpow, cproj, creal,
58 csin, csinh, csqrt, ctan, ctanh.
8847214f 59
28234b07
JM
60 At the moment the following functions and macros aren't tested:
61 drem (alias for remainder),
28234b07
JM
62 lgamma_r,
63 nan,
64 pow10 (alias for exp10).
8847214f
UD
65
66 Parameter handling is primitive in the moment:
67 --verbose=[0..3] for different levels of output:
68 0: only error count
69 1: basic report on failed tests (default)
70 2: full report on all tests
71 -v for full output (equals --verbose=3)
72 -u for generation of an ULPs file
73 */
74
75/* "Philosophy":
76
77 This suite tests some aspects of the correct implementation of
78 mathematical functions in libm. Some simple, specific parameters
79 are tested for correctness but there's no exhaustive
80 testing. Handling of specific inputs (e.g. infinity, not-a-number)
81 is also tested. Correct handling of exceptions is checked
82 against. These implemented tests should check all cases that are
ec751a23 83 specified in ISO C99.
8847214f 84
80bad0cc
JM
85 Exception testing: At the moment only divide-by-zero, invalid,
86 overflow and underflow exceptions are tested. Inexact exceptions
8847214f
UD
87 aren't checked at the moment.
88
89 NaN values: There exist signalling and quiet NaNs. This implementation
28234b07
JM
90 only uses quiet NaN as parameter but does not differentiate
91 between the two kinds of NaNs as result. Where the sign of a NaN is
92 significant, this is not tested.
8847214f
UD
93
94 Inline functions: Inlining functions should give an improvement in
95 speed - but not in precission. The inlined functions return
96 reasonable values for a reasonable range of input values. The
97 result is not necessarily correct for all values and exceptions are
98 not correctly raised in all cases. Problematic input and return
99 values are infinity, not-a-number and minus zero. This suite
100 therefore does not check these specific inputs and the exception
101 handling for inlined mathematical functions - just the "reasonable"
102 values are checked.
103
104 Beware: The tests might fail for any of the following reasons:
105 - Tests are wrong
106 - Functions are wrong
107 - Floating Point Unit not working properly
108 - Compiler has errors
109
110 With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
33996419
AJ
111
112
113 To Do: All parameter should be numbers that can be represented as
2550dfe9
AJ
114 exact floating point values. Currently some values cannot be
115 represented exactly and therefore the result is not the expected
116 result. For this we will use 36 digits so that numbers can be
117 represented exactly. */
8847214f
UD
118
119#ifndef _GNU_SOURCE
120# define _GNU_SOURCE
121#endif
122
123#include "libm-test-ulps.h"
124#include <complex.h>
125#include <math.h>
126#include <float.h>
127#include <fenv.h>
601d2942 128#include <limits.h>
8847214f
UD
129
130#include <errno.h>
131#include <stdlib.h>
132#include <stdio.h>
bdf09fab 133#include <string.h>
8847214f
UD
134#include <argp.h>
135
0af797de
CM
136/* Allow platforms without all rounding modes to test properly,
137 assuming they provide an __FE_UNDEFINED in <bits/fenv.h> which
138 causes fesetround() to return failure. */
139#ifndef FE_TONEAREST
140# define FE_TONEAREST __FE_UNDEFINED
141#endif
142#ifndef FE_TOWARDZERO
143# define FE_TOWARDZERO __FE_UNDEFINED
144#endif
145#ifndef FE_UPWARD
146# define FE_UPWARD __FE_UNDEFINED
147#endif
148#ifndef FE_DOWNWARD
149# define FE_DOWNWARD __FE_UNDEFINED
150#endif
151
8847214f
UD
152/* Possible exceptions */
153#define NO_EXCEPTION 0x0
154#define INVALID_EXCEPTION 0x1
155#define DIVIDE_BY_ZERO_EXCEPTION 0x2
c135cc1b 156#define OVERFLOW_EXCEPTION 0x4
80bad0cc 157#define UNDERFLOW_EXCEPTION 0x8
8847214f 158/* The next flags signals that those exceptions are allowed but not required. */
80bad0cc
JM
159#define INVALID_EXCEPTION_OK 0x10
160#define DIVIDE_BY_ZERO_EXCEPTION_OK 0x20
161#define OVERFLOW_EXCEPTION_OK 0x40
162#define UNDERFLOW_EXCEPTION_OK 0x80
8847214f 163#define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
80bad0cc
JM
164/* Some special test flags, passed together with exceptions. */
165#define IGNORE_ZERO_INF_SIGN 0x100
166
167/* Values underflowing only for float. */
168#ifdef TEST_FLOAT
169# define UNDERFLOW_EXCEPTION_FLOAT UNDERFLOW_EXCEPTION
170# define UNDERFLOW_EXCEPTION_OK_FLOAT UNDERFLOW_EXCEPTION_OK
171#else
172# define UNDERFLOW_EXCEPTION_FLOAT 0
173# define UNDERFLOW_EXCEPTION_OK_FLOAT 0
174#endif
175/* Values underflowing only for double or types with a larger least
176 positive normal value. */
177#if defined TEST_FLOAT || defined TEST_DOUBLE \
178 || (defined TEST_LDOUBLE && LDBL_MIN_EXP >= DBL_MIN_EXP)
179# define UNDERFLOW_EXCEPTION_DOUBLE UNDERFLOW_EXCEPTION
180#else
181# define UNDERFLOW_EXCEPTION_DOUBLE 0
182#endif
183/* Values underflowing only for IBM long double or types with a larger least
184 positive normal value. */
185#if defined TEST_FLOAT || (defined TEST_LDOUBLE && LDBL_MIN_EXP > DBL_MIN_EXP)
186# define UNDERFLOW_EXCEPTION_LDOUBLE_IBM UNDERFLOW_EXCEPTION
187#else
188# define UNDERFLOW_EXCEPTION_LDOUBLE_IBM 0
189#endif
8847214f
UD
190
191/* Various constants (we must supply them precalculated for accuracy). */
42be70d4
UD
192#define M_PI_6l .52359877559829887307710723054658383L
193#define M_E2l 7.389056098930650227230427460575008L
194#define M_E3l 20.085536923187667740928529654581719L
195#define M_2_SQRT_PIl 3.5449077018110320545963349666822903L /* 2 sqrt (M_PIl) */
196#define M_SQRT_PIl 1.7724538509055160272981674833411451L /* sqrt (M_PIl) */
3c6cad26
UD
197#define M_LOG_SQRT_PIl 0.57236494292470008707171367567652933L /* log(sqrt(M_PIl)) */
198#define M_LOG_2_SQRT_PIl 1.265512123484645396488945797134706L /* log(2*sqrt(M_PIl)) */
8847214f
UD
199#define M_PI_34l (M_PIl - M_PI_4l) /* 3*pi/4 */
200#define M_PI_34_LOG10El (M_PIl - M_PI_4l) * M_LOG10El
201#define M_PI2_LOG10El M_PI_2l * M_LOG10El
202#define M_PI4_LOG10El M_PI_4l * M_LOG10El
203#define M_PI_LOG10El M_PIl * M_LOG10El
72c7a71d 204#define M_SQRT_2_2 0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
8847214f
UD
205
206static FILE *ulps_file; /* File to document difference. */
207static int output_ulps; /* Should ulps printed? */
208
209static int noErrors; /* number of errors */
210static int noTests; /* number of tests (without testing exceptions) */
211static int noExcTests; /* number of tests for exception flags */
212static int noXFails; /* number of expected failures. */
213static int noXPasses; /* number of unexpected passes. */
214
215static int verbose;
216static int output_max_error; /* Should the maximal errors printed? */
217static int output_points; /* Should the single function results printed? */
cd33623e 218static int ignore_max_ulp; /* Should we ignore max_ulp? */
8847214f
UD
219
220static FLOAT minus_zero, plus_zero;
164f863e 221static FLOAT plus_infty, minus_infty, nan_value, max_value, min_value;
bec749fd 222static FLOAT min_subnorm_value;
8847214f 223
6815fabc 224static FLOAT max_error, real_max_error, imag_max_error;
8847214f
UD
225
226
227#define BUILD_COMPLEX(real, imag) \
228 ({ __complex__ FLOAT __retval; \
229 __real__ __retval = (real); \
230 __imag__ __retval = (imag); \
231 __retval; })
232
6815fabc
UD
233#define BUILD_COMPLEX_INT(real, imag) \
234 ({ __complex__ int __retval; \
235 __real__ __retval = (real); \
236 __imag__ __retval = (imag); \
237 __retval; })
238
8847214f
UD
239
240#define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
bf582445 241 (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
8847214f
UD
242
243static void
244init_max_error (void)
245{
246 max_error = 0;
6815fabc
UD
247 real_max_error = 0;
248 imag_max_error = 0;
aaca11d8 249 feclearexcept (FE_ALL_EXCEPT);
8847214f
UD
250}
251
252static void
6815fabc 253set_max_error (FLOAT current, FLOAT *curr_max_error)
8847214f 254{
6815fabc
UD
255 if (current > *curr_max_error)
256 *curr_max_error = current;
8847214f
UD
257}
258
259
260/* Should the message print to screen? This depends on the verbose flag,
261 and the test status. */
262static int
263print_screen (int ok, int xfail)
264{
265 if (output_points
266 && (verbose > 1
15daa639 267 || (verbose == 1 && ok == xfail)))
8847214f
UD
268 return 1;
269 return 0;
270}
271
272
273/* Should the message print to screen? This depends on the verbose flag,
274 and the test status. */
275static int
276print_screen_max_error (int ok, int xfail)
277{
278 if (output_max_error
279 && (verbose > 1
280 || ((verbose == 1) && (ok == xfail))))
281 return 1;
282 return 0;
283}
284
285/* Update statistic counters. */
286static void
287update_stats (int ok, int xfail)
288{
289 ++noTests;
290 if (ok && xfail)
291 ++noXPasses;
292 else if (!ok && xfail)
293 ++noXFails;
294 else if (!ok && !xfail)
295 ++noErrors;
296}
297
298static void
299print_ulps (const char *test_name, FLOAT ulp)
300{
301 if (output_ulps)
302 {
303 fprintf (ulps_file, "Test \"%s\":\n", test_name);
303f1335 304 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
8847214f 305 CHOOSE("ldouble", "double", "float",
303f1335
AS
306 "ildouble", "idouble", "ifloat"),
307 FUNC(ceil) (ulp));
8847214f
UD
308 }
309}
310
311static void
312print_function_ulps (const char *function_name, FLOAT ulp)
313{
314 if (output_ulps)
315 {
6815fabc 316 fprintf (ulps_file, "Function: \"%s\":\n", function_name);
303f1335 317 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
8847214f 318 CHOOSE("ldouble", "double", "float",
303f1335
AS
319 "ildouble", "idouble", "ifloat"),
320 FUNC(ceil) (ulp));
8847214f
UD
321 }
322}
323
324
6815fabc
UD
325static void
326print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
327 FLOAT imag_ulp)
328{
329 if (output_ulps)
330 {
331 if (real_ulp != 0.0)
332 {
333 fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
303f1335 334 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
6815fabc 335 CHOOSE("ldouble", "double", "float",
303f1335
AS
336 "ildouble", "idouble", "ifloat"),
337 FUNC(ceil) (real_ulp));
6815fabc
UD
338 }
339 if (imag_ulp != 0.0)
340 {
341 fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
303f1335 342 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
6815fabc 343 CHOOSE("ldouble", "double", "float",
303f1335
AS
344 "ildouble", "idouble", "ifloat"),
345 FUNC(ceil) (imag_ulp));
6815fabc 346 }
15daa639
UD
347
348
6815fabc
UD
349 }
350}
351
352
8847214f
UD
353
354/* Test if Floating-Point stack hasn't changed */
355static void
356fpstack_test (const char *test_name)
357{
358#ifdef i386
359 static int old_stack;
360 int sw;
361
362 asm ("fnstsw" : "=a" (sw));
363 sw >>= 11;
364 sw &= 7;
365
366 if (sw != old_stack)
367 {
368 printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
369 test_name, sw, old_stack);
370 ++noErrors;
371 old_stack = sw;
372 }
373#endif
374}
375
376
377static void
378print_max_error (const char *func_name, FLOAT allowed, int xfail)
379{
8847214f
UD
380 int ok = 0;
381
cd33623e 382 if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
8847214f
UD
383 {
384 ok = 1;
385 }
386
387 if (!ok)
388 print_function_ulps (func_name, max_error);
389
390
391 if (print_screen_max_error (ok, xfail))
392 {
6815fabc 393 printf ("Maximal error of `%s'\n", func_name);
303f1335
AS
394 printf (" is : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
395 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
8847214f
UD
396 }
397
398 update_stats (ok, xfail);
399}
400
401
6815fabc
UD
402static void
403print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
404 __complex__ int xfail)
405{
406 int ok = 0;
407
303f1335
AS
408 if ((real_max_error == 0 && imag_max_error == 0)
409 || (real_max_error <= __real__ allowed
410 && imag_max_error <= __imag__ allowed
411 && !ignore_max_ulp))
6815fabc
UD
412 {
413 ok = 1;
414 }
415
416 if (!ok)
417 print_complex_function_ulps (func_name, real_max_error, imag_max_error);
418
419
420 if (print_screen_max_error (ok, xfail))
421 {
422 printf ("Maximal error of real part of: %s\n", func_name);
303f1335
AS
423 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
424 FUNC(ceil) (real_max_error));
425 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
426 FUNC(ceil) (__real__ allowed));
6815fabc 427 printf ("Maximal error of imaginary part of: %s\n", func_name);
303f1335
AS
428 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
429 FUNC(ceil) (imag_max_error));
430 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
431 FUNC(ceil) (__imag__ allowed));
6815fabc
UD
432 }
433
434 update_stats (ok, xfail);
435}
436
437
8847214f
UD
438/* Test whether a given exception was raised. */
439static void
440test_single_exception (const char *test_name,
441 int exception,
442 int exc_flag,
443 int fe_flag,
444 const char *flag_name)
445{
446#ifndef TEST_INLINE
447 int ok = 1;
448 if (exception & exc_flag)
449 {
450 if (fetestexcept (fe_flag))
451 {
452 if (print_screen (1, 0))
453 printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
454 }
455 else
456 {
457 ok = 0;
458 if (print_screen (0, 0))
459 printf ("Failure: %s: Exception \"%s\" not set\n",
460 test_name, flag_name);
461 }
462 }
463 else
464 {
465 if (fetestexcept (fe_flag))
466 {
467 ok = 0;
468 if (print_screen (0, 0))
469 printf ("Failure: %s: Exception \"%s\" set\n",
470 test_name, flag_name);
471 }
472 else
473 {
474 if (print_screen (1, 0))
475 printf ("%s: Exception \"%s\" not set\n", test_name,
476 flag_name);
477 }
478 }
479 if (!ok)
480 ++noErrors;
481
482#endif
483}
484
485
486/* Test whether exceptions given by EXCEPTION are raised. Ignore thereby
487 allowed but not required exceptions.
488*/
489static void
490test_exceptions (const char *test_name, int exception)
491{
492 ++noExcTests;
493#ifdef FE_DIVBYZERO
494 if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
495 test_single_exception (test_name, exception,
496 DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
497 "Divide by zero");
498#endif
499#ifdef FE_INVALID
500 if ((exception & INVALID_EXCEPTION_OK) == 0)
501 test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
502 "Invalid operation");
c135cc1b
JM
503#endif
504#ifdef FE_OVERFLOW
505 if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
506 test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
507 FE_OVERFLOW, "Overflow");
80bad0cc
JM
508#endif
509#ifdef FE_UNDERFLOW
510 if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
511 test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
512 FE_UNDERFLOW, "Underflow");
8847214f
UD
513#endif
514 feclearexcept (FE_ALL_EXCEPT);
515}
516
517
518static void
6815fabc
UD
519check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
520 FLOAT max_ulp, int xfail, int exceptions,
521 FLOAT *curr_max_error)
8847214f
UD
522{
523 int ok = 0;
524 int print_diff = 0;
525 FLOAT diff = 0;
526 FLOAT ulp = 0;
527
528 test_exceptions (test_name, exceptions);
529 if (isnan (computed) && isnan (expected))
530 ok = 1;
531 else if (isinf (computed) && isinf (expected))
532 {
533 /* Test for sign of infinities. */
ba3752d5
UD
534 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
535 && signbit (computed) != signbit (expected))
8847214f
UD
536 {
537 ok = 0;
538 printf ("infinity has wrong sign.\n");
539 }
540 else
541 ok = 1;
542 }
543 /* Don't calc ulp for NaNs or infinities. */
544 else if (isinf (computed) || isnan (computed) || isinf (expected) || isnan (expected))
545 ok = 0;
546 else
547 {
548 diff = FUNC(fabs) (computed - expected);
e6b29af8
UD
549 switch (fpclassify (expected))
550 {
551 case FP_ZERO:
552 /* ilogb (0) isn't allowed. */
553 ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
554 break;
555 case FP_NORMAL:
556 ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
557 break;
558 case FP_SUBNORMAL:
6c23e11c
JM
559 /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
560 least normal value. */
561 ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
e6b29af8
UD
562 break;
563 default:
564 /* It should never happen. */
565 abort ();
566 break;
567 }
6815fabc 568 set_max_error (ulp, curr_max_error);
8847214f 569 print_diff = 1;
ba3752d5
UD
570 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
571 && computed == 0.0 && expected == 0.0
572 && signbit(computed) != signbit (expected))
3a8e65a0 573 ok = 0;
f964490f 574 else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
8847214f
UD
575 ok = 1;
576 else
577 {
578 ok = 0;
579 print_ulps (test_name, ulp);
580 }
581
582 }
583 if (print_screen (ok, xfail))
584 {
585 if (!ok)
586 printf ("Failure: ");
587 printf ("Test: %s\n", test_name);
588 printf ("Result:\n");
589 printf (" is: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
590 computed, computed);
591 printf (" should be: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
592 expected, expected);
593 if (print_diff)
594 {
595 printf (" difference: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR
596 "\n", diff, diff);
597 printf (" ulp : % .4" PRINTF_NEXPR "\n", ulp);
598 printf (" max.ulp : % .4" PRINTF_NEXPR "\n", max_ulp);
599 }
600 }
601 update_stats (ok, xfail);
602
603 fpstack_test (test_name);
604}
605
606
607static void
6815fabc
UD
608check_float (const char *test_name, FLOAT computed, FLOAT expected,
609 FLOAT max_ulp, int xfail, int exceptions)
610{
611 check_float_internal (test_name, computed, expected, max_ulp, xfail,
612 exceptions, &max_error);
613}
614
615
616static void
617check_complex (const char *test_name, __complex__ FLOAT computed,
618 __complex__ FLOAT expected,
619 __complex__ FLOAT max_ulp, __complex__ int xfail,
620 int exception)
8847214f 621{
6815fabc
UD
622 FLOAT part_comp, part_exp, part_max_ulp;
623 int part_xfail;
8847214f
UD
624 char str[200];
625
626 sprintf (str, "Real part of: %s", test_name);
627 part_comp = __real__ computed;
628 part_exp = __real__ expected;
6815fabc
UD
629 part_max_ulp = __real__ max_ulp;
630 part_xfail = __real__ xfail;
15daa639 631
6815fabc
UD
632 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
633 exception, &real_max_error);
8847214f 634
f30e0cd3 635 sprintf (str, "Imaginary part of: %s", test_name);
8847214f
UD
636 part_comp = __imag__ computed;
637 part_exp = __imag__ expected;
6815fabc
UD
638 part_max_ulp = __imag__ max_ulp;
639 part_xfail = __imag__ xfail;
15daa639 640
8847214f
UD
641 /* Don't check again for exceptions, just pass through the
642 zero/inf sign test. */
6815fabc
UD
643 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
644 exception & IGNORE_ZERO_INF_SIGN,
645 &imag_max_error);
8847214f
UD
646}
647
648
649/* Check that computed and expected values are equal (int values). */
650static void
651check_int (const char *test_name, int computed, int expected, int max_ulp,
652 int xfail, int exceptions)
653{
654 int diff = computed - expected;
655 int ok = 0;
656
657 test_exceptions (test_name, exceptions);
658 noTests++;
659 if (abs (diff) <= max_ulp)
660 ok = 1;
661
662 if (!ok)
663 print_ulps (test_name, diff);
664
665 if (print_screen (ok, xfail))
666 {
667 if (!ok)
668 printf ("Failure: ");
669 printf ("Test: %s\n", test_name);
670 printf ("Result:\n");
671 printf (" is: %d\n", computed);
672 printf (" should be: %d\n", expected);
673 }
674
675 update_stats (ok, xfail);
676 fpstack_test (test_name);
677}
678
679
680/* Check that computed and expected values are equal (long int values). */
681static void
682check_long (const char *test_name, long int computed, long int expected,
683 long int max_ulp, int xfail, int exceptions)
684{
685 long int diff = computed - expected;
686 int ok = 0;
687
688 test_exceptions (test_name, exceptions);
689 noTests++;
690 if (labs (diff) <= max_ulp)
691 ok = 1;
692
693 if (!ok)
694 print_ulps (test_name, diff);
695
696 if (print_screen (ok, xfail))
697 {
698 if (!ok)
699 printf ("Failure: ");
700 printf ("Test: %s\n", test_name);
701 printf ("Result:\n");
702 printf (" is: %ld\n", computed);
703 printf (" should be: %ld\n", expected);
704 }
705
706 update_stats (ok, xfail);
707 fpstack_test (test_name);
708}
709
710
711/* Check that computed value is true/false. */
712static void
713check_bool (const char *test_name, int computed, int expected,
714 long int max_ulp, int xfail, int exceptions)
715{
716 int ok = 0;
717
718 test_exceptions (test_name, exceptions);
719 noTests++;
720 if ((computed == 0) == (expected == 0))
721 ok = 1;
722
723 if (print_screen (ok, xfail))
724 {
725 if (!ok)
726 printf ("Failure: ");
727 printf ("Test: %s\n", test_name);
728 printf ("Result:\n");
729 printf (" is: %d\n", computed);
730 printf (" should be: %d\n", expected);
731 }
732
733 update_stats (ok, xfail);
734 fpstack_test (test_name);
735}
736
737
738/* check that computed and expected values are equal (long int values) */
739static void
740check_longlong (const char *test_name, long long int computed,
741 long long int expected,
742 long long int max_ulp, int xfail,
743 int exceptions)
744{
745 long long int diff = computed - expected;
746 int ok = 0;
747
748 test_exceptions (test_name, exceptions);
749 noTests++;
750 if (llabs (diff) <= max_ulp)
751 ok = 1;
752
753 if (!ok)
754 print_ulps (test_name, diff);
755
756 if (print_screen (ok, xfail))
757 {
758 if (!ok)
759 printf ("Failure:");
760 printf ("Test: %s\n", test_name);
761 printf ("Result:\n");
762 printf (" is: %lld\n", computed);
763 printf (" should be: %lld\n", expected);
764 }
765
766 update_stats (ok, xfail);
767 fpstack_test (test_name);
768}
769
770
771
772/* This is to prevent messages from the SVID libm emulation. */
773int
774matherr (struct exception *x __attribute__ ((unused)))
775{
776 return 1;
777}
778
779
780/****************************************************************************
781 Tests for single functions of libm.
782 Please keep them alphabetically sorted!
783****************************************************************************/
784
785static void
786acos_test (void)
787{
e6d3c4a7
AJ
788 errno = 0;
789 FUNC(acos) (0);
790 if (errno == ENOSYS)
791 /* Function not implemented. */
792 return;
793
8847214f
UD
794 START (acos);
795
796 TEST_f_f (acos, plus_infty, nan_value, INVALID_EXCEPTION);
797 TEST_f_f (acos, minus_infty, nan_value, INVALID_EXCEPTION);
798 TEST_f_f (acos, nan_value, nan_value);
799
800 /* |x| > 1: */
2550dfe9
AJ
801 TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
802 TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
41bf21a1
JM
803 TEST_f_f (acos, max_value, nan_value, INVALID_EXCEPTION);
804 TEST_f_f (acos, -max_value, nan_value, INVALID_EXCEPTION);
8847214f
UD
805
806 TEST_f_f (acos, 0, M_PI_2l);
807 TEST_f_f (acos, minus_zero, M_PI_2l);
808 TEST_f_f (acos, 1, 0);
809 TEST_f_f (acos, -1, M_PIl);
810 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
811 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
2550dfe9 812 TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
b6550497 813 TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
96d10bdf 814 TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
adfbc8ac
JM
815 TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
816 TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
817#ifndef TEST_FLOAT
818 TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
819 TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
820 TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
821 TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
822#endif
823#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
824 TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
825 TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
826#endif
8847214f
UD
827 END (acos);
828}
829
5ba3cc69
JM
830
831static void
832acos_test_tonearest (void)
833{
834 int save_round_mode;
835 errno = 0;
836 FUNC(acos) (0);
837 if (errno == ENOSYS)
838 /* Function not implemented. */
839 return;
840
841 START (acos_tonearest);
842
843 save_round_mode = fegetround ();
844
845 if (!fesetround (FE_TONEAREST))
846 {
847 TEST_f_f (acos, 0, M_PI_2l);
848 TEST_f_f (acos, minus_zero, M_PI_2l);
849 TEST_f_f (acos, 1, 0);
850 TEST_f_f (acos, -1, M_PIl);
851 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
852 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
853 }
854
855 fesetround (save_round_mode);
856
857 END (acos_tonearest);
858}
859
860
861static void
862acos_test_towardzero (void)
863{
864 int save_round_mode;
865 errno = 0;
866 FUNC(acos) (0);
867 if (errno == ENOSYS)
868 /* Function not implemented. */
869 return;
870
871 START (acos_towardzero);
872
873 save_round_mode = fegetround ();
874
875 if (!fesetround (FE_TOWARDZERO))
876 {
877 TEST_f_f (acos, 0, M_PI_2l);
878 TEST_f_f (acos, minus_zero, M_PI_2l);
879 TEST_f_f (acos, 1, 0);
880 TEST_f_f (acos, -1, M_PIl);
881 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
882 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
883 }
884
885 fesetround (save_round_mode);
886
887 END (acos_towardzero);
888}
889
890
891static void
892acos_test_downward (void)
893{
894 int save_round_mode;
895 errno = 0;
896 FUNC(acos) (0);
897 if (errno == ENOSYS)
898 /* Function not implemented. */
899 return;
900
901 START (acos_downward);
902
903 save_round_mode = fegetround ();
904
905 if (!fesetround (FE_DOWNWARD))
906 {
907 TEST_f_f (acos, 0, M_PI_2l);
908 TEST_f_f (acos, minus_zero, M_PI_2l);
909 TEST_f_f (acos, 1, 0);
910 TEST_f_f (acos, -1, M_PIl);
911 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
912 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
913 }
914
915 fesetround (save_round_mode);
916
917 END (acos_downward);
918}
919
920
921static void
922acos_test_upward (void)
923{
924 int save_round_mode;
925 errno = 0;
926 FUNC(acos) (0);
927 if (errno == ENOSYS)
928 /* Function not implemented. */
929 return;
930
931 START (acos_upward);
932
933 save_round_mode = fegetround ();
934
935 if (!fesetround (FE_UPWARD))
936 {
937 TEST_f_f (acos, 0, M_PI_2l);
938 TEST_f_f (acos, minus_zero, M_PI_2l);
939 TEST_f_f (acos, 1, 0);
940 TEST_f_f (acos, -1, M_PIl);
941 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
942 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
943 }
944
945 fesetround (save_round_mode);
946
947 END (acos_upward);
948}
949
8847214f
UD
950static void
951acosh_test (void)
952{
aaca11d8
UD
953 errno = 0;
954 FUNC(acosh) (7);
955 if (errno == ENOSYS)
956 /* Function not implemented. */
957 return;
958
8847214f
UD
959 START (acosh);
960
961 TEST_f_f (acosh, plus_infty, plus_infty);
962 TEST_f_f (acosh, minus_infty, nan_value, INVALID_EXCEPTION);
963
964 /* x < 1: */
2550dfe9 965 TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
41bf21a1 966 TEST_f_f (acosh, -max_value, nan_value, INVALID_EXCEPTION);
8847214f
UD
967
968 TEST_f_f (acosh, 1, 0);
2550dfe9 969 TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
8847214f
UD
970
971 END (acosh);
972}
973
974static void
975asin_test (void)
976{
e6d3c4a7
AJ
977 errno = 0;
978 FUNC(asin) (0);
979 if (errno == ENOSYS)
980 /* Function not implemented. */
981 return;
8847214f
UD
982
983 START (asin);
984
985 TEST_f_f (asin, plus_infty, nan_value, INVALID_EXCEPTION);
986 TEST_f_f (asin, minus_infty, nan_value, INVALID_EXCEPTION);
987 TEST_f_f (asin, nan_value, nan_value);
988
989 /* asin x == NaN plus invalid exception for |x| > 1. */
2550dfe9
AJ
990 TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
991 TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
41bf21a1
JM
992 TEST_f_f (asin, max_value, nan_value, INVALID_EXCEPTION);
993 TEST_f_f (asin, -max_value, nan_value, INVALID_EXCEPTION);
8847214f
UD
994
995 TEST_f_f (asin, 0, 0);
996 TEST_f_f (asin, minus_zero, minus_zero);
997 TEST_f_f (asin, 0.5, M_PI_6l);
998 TEST_f_f (asin, -0.5, -M_PI_6l);
999 TEST_f_f (asin, 1.0, M_PI_2l);
1000 TEST_f_f (asin, -1.0, -M_PI_2l);
2550dfe9 1001 TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
adfbc8ac
JM
1002 TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1003 TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1004#ifndef TEST_FLOAT
1005 TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1006 TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1007 TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1008 TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1009#endif
1010#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1011 TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1012 TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1013#endif
8847214f
UD
1014
1015 END (asin);
1016}
1017
5ba3cc69
JM
1018
1019static void
1020asin_test_tonearest (void)
1021{
1022 int save_round_mode;
1023 errno = 0;
1024 FUNC(asin) (0);
1025 if (errno == ENOSYS)
1026 /* Function not implemented. */
1027 return;
1028
1029 START (asin_tonearest);
1030
1031 save_round_mode = fegetround ();
1032
1033 if (!fesetround (FE_TONEAREST))
1034 {
1035 TEST_f_f (asin, 0, 0);
1036 TEST_f_f (asin, minus_zero, minus_zero);
1037 TEST_f_f (asin, 0.5, M_PI_6l);
1038 TEST_f_f (asin, -0.5, -M_PI_6l);
1039 TEST_f_f (asin, 1.0, M_PI_2l);
1040 TEST_f_f (asin, -1.0, -M_PI_2l);
1041 }
1042
1043 fesetround (save_round_mode);
1044
1045 END (asin_tonearest);
1046}
1047
1048
1049static void
1050asin_test_towardzero (void)
1051{
1052 int save_round_mode;
1053 errno = 0;
1054 FUNC(asin) (0);
1055 if (errno == ENOSYS)
1056 /* Function not implemented. */
1057 return;
1058
1059 START (asin_towardzero);
1060
1061 save_round_mode = fegetround ();
1062
1063 if (!fesetround (FE_TOWARDZERO))
1064 {
1065 TEST_f_f (asin, 0, 0);
1066 TEST_f_f (asin, minus_zero, minus_zero);
1067 TEST_f_f (asin, 0.5, M_PI_6l);
1068 TEST_f_f (asin, -0.5, -M_PI_6l);
1069 TEST_f_f (asin, 1.0, M_PI_2l);
1070 TEST_f_f (asin, -1.0, -M_PI_2l);
1071 }
1072
1073 fesetround (save_round_mode);
1074
1075 END (asin_towardzero);
1076}
1077
1078
1079static void
1080asin_test_downward (void)
1081{
1082 int save_round_mode;
1083 errno = 0;
1084 FUNC(asin) (0);
1085 if (errno == ENOSYS)
1086 /* Function not implemented. */
1087 return;
1088
1089 START (asin_downward);
1090
1091 save_round_mode = fegetround ();
1092
1093 if (!fesetround (FE_DOWNWARD))
1094 {
1095 TEST_f_f (asin, 0, 0);
1096 TEST_f_f (asin, minus_zero, minus_zero);
1097 TEST_f_f (asin, 0.5, M_PI_6l);
1098 TEST_f_f (asin, -0.5, -M_PI_6l);
1099 TEST_f_f (asin, 1.0, M_PI_2l);
1100 TEST_f_f (asin, -1.0, -M_PI_2l);
1101 }
1102
1103 fesetround (save_round_mode);
1104
1105 END (asin_downward);
1106}
1107
1108
1109static void
1110asin_test_upward (void)
1111{
1112 int save_round_mode;
1113 errno = 0;
1114 FUNC(asin) (0);
1115 if (errno == ENOSYS)
1116 /* Function not implemented. */
1117 return;
1118
1119 START (asin_upward);
1120
1121 save_round_mode = fegetround ();
1122
1123 if (!fesetround (FE_UPWARD))
1124 {
1125 TEST_f_f (asin, 0, 0);
1126 TEST_f_f (asin, minus_zero, minus_zero);
1127 TEST_f_f (asin, 0.5, M_PI_6l);
1128 TEST_f_f (asin, -0.5, -M_PI_6l);
1129 TEST_f_f (asin, 1.0, M_PI_2l);
1130 TEST_f_f (asin, -1.0, -M_PI_2l);
1131 }
1132
1133 fesetround (save_round_mode);
1134
1135 END (asin_upward);
1136}
1137
8847214f
UD
1138static void
1139asinh_test (void)
1140{
aaca11d8 1141 errno = 0;
3c6cad26 1142 FUNC(asinh) (0.7L);
aaca11d8
UD
1143 if (errno == ENOSYS)
1144 /* Function not implemented. */
1145 return;
1146
8847214f
UD
1147 START (asinh);
1148
1149 TEST_f_f (asinh, 0, 0);
1150 TEST_f_f (asinh, minus_zero, minus_zero);
15daa639 1151#ifndef TEST_INLINE
8847214f
UD
1152 TEST_f_f (asinh, plus_infty, plus_infty);
1153 TEST_f_f (asinh, minus_infty, minus_infty);
15daa639
UD
1154#endif
1155 TEST_f_f (asinh, nan_value, nan_value);
2550dfe9 1156 TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
8847214f
UD
1157
1158 END (asinh);
1159}
1160
1161static void
1162atan_test (void)
1163{
e6d3c4a7
AJ
1164 errno = 0;
1165 FUNC(atan) (0);
1166 if (errno == ENOSYS)
1167 /* Function not implemented. */
1168 return;
8847214f
UD
1169
1170 START (atan);
1171
1172 TEST_f_f (atan, 0, 0);
1173 TEST_f_f (atan, minus_zero, minus_zero);
1174
1175 TEST_f_f (atan, plus_infty, M_PI_2l);
1176 TEST_f_f (atan, minus_infty, -M_PI_2l);
15daa639 1177 TEST_f_f (atan, nan_value, nan_value);
8847214f
UD
1178
1179 TEST_f_f (atan, 1, M_PI_4l);
1180 TEST_f_f (atan, -1, -M_PI_4l);
1181
2550dfe9 1182 TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
8847214f
UD
1183
1184 END (atan);
1185}
1186
1187
1188
1189static void
1190atanh_test (void)
1191{
aaca11d8 1192 errno = 0;
3c6cad26 1193 FUNC(atanh) (0.7L);
aaca11d8
UD
1194 if (errno == ENOSYS)
1195 /* Function not implemented. */
1196 return;
8847214f
UD
1197
1198 START (atanh);
1199
1200
1201 TEST_f_f (atanh, 0, 0);
1202 TEST_f_f (atanh, minus_zero, minus_zero);
1203
1204 TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1205 TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
15daa639 1206 TEST_f_f (atanh, nan_value, nan_value);
8847214f
UD
1207
1208 /* atanh (x) == NaN plus invalid exception if |x| > 1. */
2550dfe9
AJ
1209 TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
1210 TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
41bf21a1
JM
1211 TEST_f_f (atanh, max_value, nan_value, INVALID_EXCEPTION);
1212 TEST_f_f (atanh, -max_value, nan_value, INVALID_EXCEPTION);
8847214f 1213
2550dfe9 1214 TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
8847214f
UD
1215
1216 END (atanh);
1217}
1218
1219static void
1220atan2_test (void)
1221{
aaca11d8
UD
1222 errno = 0;
1223 FUNC(atan2) (-0, 1);
1224 if (errno == ENOSYS)
1225 /* Function not implemented. */
1226 return;
1227
8847214f
UD
1228 START (atan2);
1229
1230 /* atan2 (0,x) == 0 for x > 0. */
1231 TEST_ff_f (atan2, 0, 1, 0);
1232
1233 /* atan2 (-0,x) == -0 for x > 0. */
1234 TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1235
1236 TEST_ff_f (atan2, 0, 0, 0);
1237 TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1238
1239 /* atan2 (+0,x) == +pi for x < 0. */
1240 TEST_ff_f (atan2, 0, -1, M_PIl);
1241
1242 /* atan2 (-0,x) == -pi for x < 0. */
1243 TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1244
1245 TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1246 TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1247
1248 /* atan2 (y,+0) == pi/2 for y > 0. */
1249 TEST_ff_f (atan2, 1, 0, M_PI_2l);
1250
1251 /* atan2 (y,-0) == pi/2 for y > 0. */
1252 TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1253
1254 /* atan2 (y,+0) == -pi/2 for y < 0. */
1255 TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1256
1257 /* atan2 (y,-0) == -pi/2 for y < 0. */
1258 TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1259
1260 /* atan2 (y,inf) == +0 for finite y > 0. */
1261 TEST_ff_f (atan2, 1, plus_infty, 0);
1262
1263 /* atan2 (y,inf) == -0 for finite y < 0. */
1264 TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1265
1266 /* atan2(+inf, x) == pi/2 for finite x. */
1267 TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1268
1269 /* atan2(-inf, x) == -pi/2 for finite x. */
1270 TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1271
1272 /* atan2 (y,-inf) == +pi for finite y > 0. */
1273 TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1274
1275 /* atan2 (y,-inf) == -pi for finite y < 0. */
1276 TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1277
1278 TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1279 TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1280 TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1281 TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
15daa639 1282 TEST_ff_f (atan2, nan_value, nan_value, nan_value);
8847214f 1283
7726d6a9
JM
1284 TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1285
2550dfe9
AJ
1286 TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1287 TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1288 TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1289 TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1290 TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1291 TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
8847214f 1292
3c8605c7 1293 TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
bb3f4825 1294
8847214f
UD
1295 END (atan2);
1296}
1297
8847214f
UD
1298static void
1299cabs_test (void)
1300{
aaca11d8 1301 errno = 0;
3c6cad26 1302 FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
aaca11d8
UD
1303 if (errno == ENOSYS)
1304 /* Function not implemented. */
1305 return;
1306
8847214f
UD
1307 START (cabs);
1308
1309 /* cabs (x + iy) is specified as hypot (x,y) */
1310
1311 /* cabs (+inf + i x) == +inf. */
1312 TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1313 /* cabs (-inf + i x) == +inf. */
1314 TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1315
1316 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
1317 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
1318
1319 TEST_c_f (cabs, nan_value, nan_value, nan_value);
1320
1321 /* cabs (x,y) == cabs (y,x). */
2550dfe9 1322 TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
8847214f 1323 /* cabs (x,y) == cabs (-x,y). */
2550dfe9 1324 TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
8847214f 1325 /* cabs (x,y) == cabs (-y,x). */
2550dfe9 1326 TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
8847214f 1327 /* cabs (x,y) == cabs (-x,-y). */
2550dfe9 1328 TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
8847214f 1329 /* cabs (x,y) == cabs (-y,-x). */
2550dfe9 1330 TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
8847214f 1331 /* cabs (x,0) == fabs (x). */
2550dfe9
AJ
1332 TEST_c_f (cabs, -0.75L, 0, 0.75L);
1333 TEST_c_f (cabs, 0.75L, 0, 0.75L);
8847214f
UD
1334 TEST_c_f (cabs, -1.0L, 0, 1.0L);
1335 TEST_c_f (cabs, 1.0L, 0, 1.0L);
1336 TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1337 TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1338
2550dfe9 1339 TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
8847214f
UD
1340
1341 END (cabs);
1342}
1343
2550dfe9 1344
8847214f
UD
1345static void
1346cacos_test (void)
1347{
aaca11d8 1348 errno = 0;
3c6cad26 1349 FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1350 if (errno == ENOSYS)
1351 /* Function not implemented. */
1352 return;
1353
8847214f
UD
1354 START (cacos);
1355
1356
1357 TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1358 TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1359 TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1360 TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1361
1362 TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1363 TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1364
1365 TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1366 TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1367
1368 TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1369 TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1370 TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1371 TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
3c6cad26
UD
1372 TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1373 TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
8847214f
UD
1374
1375 TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1376 TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1377 TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1378 TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1379
1380 TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1381 TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1382 TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1383 TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1384
1385 TEST_c_c (cacos, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1386 TEST_c_c (cacos, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1387
1388 TEST_c_c (cacos, 0, nan_value, M_PI_2l, nan_value);
1389 TEST_c_c (cacos, minus_zero, nan_value, M_PI_2l, nan_value);
1390
1391 TEST_c_c (cacos, nan_value, plus_infty, nan_value, minus_infty);
1392 TEST_c_c (cacos, nan_value, minus_infty, nan_value, plus_infty);
1393
1394 TEST_c_c (cacos, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1395 TEST_c_c (cacos, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1396
1397 TEST_c_c (cacos, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1398 TEST_c_c (cacos, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1399
1400 TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
1401
d1d3431a
JM
1402 TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1403 TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1404 TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1405 TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1406 TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1407 TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1408 TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1409 TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1410 TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1411 TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1412 TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1413 TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1414
1415 TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1416 TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1417 TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1418 TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1419 TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1420 TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1421 TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1422 TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1423 TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1424 TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1425 TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1426 TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1427
2550dfe9 1428 TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
33e885db 1429 TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
8847214f 1430
6815fabc 1431 END (cacos, complex);
8847214f
UD
1432}
1433
8847214f
UD
1434static void
1435cacosh_test (void)
1436{
aaca11d8 1437 errno = 0;
3c6cad26 1438 FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1439 if (errno == ENOSYS)
1440 /* Function not implemented. */
1441 return;
1442
8847214f
UD
1443 START (cacosh);
1444
1445
1446 TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
1447 TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
1448 TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
1449 TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
1450 TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
1451 TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1452
1453 TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1454 TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1455
1456 TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
1457 TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
1458 TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
1459 TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
3c6cad26
UD
1460 TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1461 TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
8847214f
UD
1462
1463 TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
1464 TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
1465 TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
1466 TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
1467
1468 TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
1469 TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
1470 TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
1471 TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
1472
1473 TEST_c_c (cacosh, plus_infty, nan_value, plus_infty, nan_value);
1474 TEST_c_c (cacosh, minus_infty, nan_value, plus_infty, nan_value);
1475
1476 TEST_c_c (cacosh, 0, nan_value, nan_value, nan_value);
1477 TEST_c_c (cacosh, minus_zero, nan_value, nan_value, nan_value);
1478
1479 TEST_c_c (cacosh, nan_value, plus_infty, plus_infty, nan_value);
1480 TEST_c_c (cacosh, nan_value, minus_infty, plus_infty, nan_value);
1481
1482 TEST_c_c (cacosh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1483 TEST_c_c (cacosh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1484
1485 TEST_c_c (cacosh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1486 TEST_c_c (cacosh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1487
1488 TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
1489
d1d3431a
JM
1490 TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1491 TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1492 TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1493 TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1494 TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1495 TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1496 TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1497 TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1498 TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1499 TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1500 TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1501 TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1502
1503 TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
1504 TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
1505 TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
1506 TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
1507 TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
1508 TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
1509 TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
1510 TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
1511 TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
1512 TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
1513 TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
1514 TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
1515
2550dfe9 1516 TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
4f7e7f8e 1517 TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
8847214f 1518
6815fabc 1519 END (cacosh, complex);
8847214f
UD
1520}
1521
2550dfe9 1522
8847214f
UD
1523static void
1524carg_test (void)
1525{
1526 START (carg);
1527
1528 /* carg (x + iy) is specified as atan2 (y, x) */
1529
1530 /* carg (x + i 0) == 0 for x > 0. */
1531 TEST_c_f (carg, 2.0, 0, 0);
1532 /* carg (x - i 0) == -0 for x > 0. */
1533 TEST_c_f (carg, 2.0, minus_zero, minus_zero);
1534
1535 TEST_c_f (carg, 0, 0, 0);
1536 TEST_c_f (carg, 0, minus_zero, minus_zero);
1537
1538 /* carg (x + i 0) == +pi for x < 0. */
1539 TEST_c_f (carg, -2.0, 0, M_PIl);
1540
1541 /* carg (x - i 0) == -pi for x < 0. */
1542 TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
1543
1544 TEST_c_f (carg, minus_zero, 0, M_PIl);
1545 TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
1546
1547 /* carg (+0 + i y) == pi/2 for y > 0. */
1548 TEST_c_f (carg, 0, 2.0, M_PI_2l);
1549
1550 /* carg (-0 + i y) == pi/2 for y > 0. */
1551 TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
1552
1553 /* carg (+0 + i y) == -pi/2 for y < 0. */
1554 TEST_c_f (carg, 0, -2.0, -M_PI_2l);
1555
1556 /* carg (-0 + i y) == -pi/2 for y < 0. */
1557 TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
1558
1559 /* carg (inf + i y) == +0 for finite y > 0. */
1560 TEST_c_f (carg, plus_infty, 2.0, 0);
1561
1562 /* carg (inf + i y) == -0 for finite y < 0. */
1563 TEST_c_f (carg, plus_infty, -2.0, minus_zero);
1564
1565 /* carg(x + i inf) == pi/2 for finite x. */
1566 TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
1567
1568 /* carg(x - i inf) == -pi/2 for finite x. */
1569 TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
1570
1571 /* carg (-inf + i y) == +pi for finite y > 0. */
1572 TEST_c_f (carg, minus_infty, 10.0, M_PIl);
1573
1574 /* carg (-inf + i y) == -pi for finite y < 0. */
1575 TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
1576
1577 TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
1578
1579 TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
1580
1581 TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
1582
1583 TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
1584
15daa639
UD
1585 TEST_c_f (carg, nan_value, nan_value, nan_value);
1586
8847214f
UD
1587 END (carg);
1588}
1589
1590static void
1591casin_test (void)
1592{
aaca11d8 1593 errno = 0;
3c6cad26 1594 FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1595 if (errno == ENOSYS)
1596 /* Function not implemented. */
1597 return;
1598
8847214f
UD
1599 START (casin);
1600
1601 TEST_c_c (casin, 0, 0, 0.0, 0.0);
1602 TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
1603 TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
1604 TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
1605
1606 TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
1607 TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
1608 TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
1609 TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
1610
1611 TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
1612 TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
1613 TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
1614 TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
1615 TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
1616 TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
3c6cad26
UD
1617 TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
1618 TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
8847214f
UD
1619
1620 TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
1621 TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
1622 TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
1623 TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
1624
1625 TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
1626 TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
1627 TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
1628 TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
1629
1630 TEST_c_c (casin, nan_value, plus_infty, nan_value, plus_infty);
1631 TEST_c_c (casin, nan_value, minus_infty, nan_value, minus_infty);
1632
1633 TEST_c_c (casin, 0.0, nan_value, 0.0, nan_value);
1634 TEST_c_c (casin, minus_zero, nan_value, minus_zero, nan_value);
1635
1636 TEST_c_c (casin, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1637 TEST_c_c (casin, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1638
1639 TEST_c_c (casin, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1640 TEST_c_c (casin, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1641
1642 TEST_c_c (casin, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1643 TEST_c_c (casin, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1644
1645 TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
1646
d1d3431a
JM
1647 TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
1648 TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
1649 TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
1650 TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
1651 TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
1652 TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
1653 TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
1654 TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
1655 TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
1656 TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
1657 TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
1658 TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
1659
1660 TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
1661 TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
1662 TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
1663 TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
1664 TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
1665 TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
1666 TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
1667 TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
1668 TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
1669 TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
1670 TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
1671 TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
1672
2550dfe9 1673 TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
33e885db 1674 TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
8847214f 1675
6815fabc 1676 END (casin, complex);
8847214f
UD
1677}
1678
1679
1680static void
1681casinh_test (void)
1682{
aaca11d8 1683 errno = 0;
3c6cad26 1684 FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1685 if (errno == ENOSYS)
1686 /* Function not implemented. */
1687 return;
1688
8847214f
UD
1689 START (casinh);
1690
1691 TEST_c_c (casinh, 0, 0, 0.0, 0.0);
1692 TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
1693 TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
1694 TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
1695
1696 TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1697 TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1698 TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
1699 TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
1700
1701 TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
1702 TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
1703 TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
1704 TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
1705 TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
1706 TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3c6cad26
UD
1707 TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1708 TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
8847214f
UD
1709
1710 TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
1711 TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
1712 TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
1713 TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
1714
1715 TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
1716 TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
1717 TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
1718 TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
1719
1720 TEST_c_c (casinh, plus_infty, nan_value, plus_infty, nan_value);
1721 TEST_c_c (casinh, minus_infty, nan_value, minus_infty, nan_value);
1722
1723 TEST_c_c (casinh, nan_value, 0, nan_value, 0.0);
1724 TEST_c_c (casinh, nan_value, minus_zero, nan_value, minus_zero);
1725
1726 TEST_c_c (casinh, nan_value, plus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1727 TEST_c_c (casinh, nan_value, minus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1728
1729 TEST_c_c (casinh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1730 TEST_c_c (casinh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1731
1732 TEST_c_c (casinh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1733 TEST_c_c (casinh, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1734
1735 TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
1736
d1d3431a
JM
1737 TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
1738 TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
1739 TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
1740 TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
1741 TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
1742 TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
1743 TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
1744 TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
1745 TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
1746 TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
1747 TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
1748 TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
1749
1750 TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
1751 TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
1752 TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
1753 TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
1754 TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
1755 TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
1756 TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
1757 TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
1758 TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
1759 TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
1760 TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
1761 TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
1762
2550dfe9 1763 TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
33e885db 1764 TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
8847214f 1765
6815fabc 1766 END (casinh, complex);
8847214f
UD
1767}
1768
1769
1770static void
1771catan_test (void)
1772{
aaca11d8 1773 errno = 0;
3c6cad26 1774 FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1775 if (errno == ENOSYS)
1776 /* Function not implemented. */
1777 return;
1778
8847214f
UD
1779 START (catan);
1780
1781 TEST_c_c (catan, 0, 0, 0, 0);
1782 TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
1783 TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
1784 TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
1785
1786 TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
1787 TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
1788 TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
1789 TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
1790
1791
1792 TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
1793 TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
1794 TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
1795 TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
1796 TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
1797 TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
3c6cad26
UD
1798 TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
1799 TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
8847214f
UD
1800
1801 TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
1802 TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
1803 TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
1804 TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
1805
1806 TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
1807 TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
1808 TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
1809 TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
1810
1811 TEST_c_c (catan, nan_value, 0.0, nan_value, 0);
1812 TEST_c_c (catan, nan_value, minus_zero, nan_value, minus_zero);
1813
1814 TEST_c_c (catan, nan_value, plus_infty, nan_value, 0);
1815 TEST_c_c (catan, nan_value, minus_infty, nan_value, minus_zero);
1816
1817 TEST_c_c (catan, 0.0, nan_value, nan_value, nan_value);
1818 TEST_c_c (catan, minus_zero, nan_value, nan_value, nan_value);
1819
1820 TEST_c_c (catan, plus_infty, nan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1821 TEST_c_c (catan, minus_infty, nan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1822
1823 TEST_c_c (catan, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1824 TEST_c_c (catan, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1825
1826 TEST_c_c (catan, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1827 TEST_c_c (catan, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1828
1829 TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value);
1830
2550dfe9 1831 TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
33e885db 1832 TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
8847214f 1833
6815fabc 1834 END (catan, complex);
8847214f
UD
1835}
1836
1837static void
1838catanh_test (void)
1839{
aaca11d8 1840 errno = 0;
3c6cad26 1841 FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1842 if (errno == ENOSYS)
1843 /* Function not implemented. */
1844 return;
1845
8847214f
UD
1846 START (catanh);
1847
1848 TEST_c_c (catanh, 0, 0, 0.0, 0.0);
1849 TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
1850 TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
1851 TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
1852
1853 TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
1854 TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
1855 TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
1856 TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
1857
1858 TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
1859 TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
1860 TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
1861 TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
1862 TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
1863 TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
3c6cad26
UD
1864 TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
1865 TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
8847214f
UD
1866
1867 TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
1868 TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
1869 TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
1870 TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
1871
1872 TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
1873 TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
1874 TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
1875 TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
1876
1877 TEST_c_c (catanh, 0, nan_value, 0.0, nan_value);
1878 TEST_c_c (catanh, minus_zero, nan_value, minus_zero, nan_value);
1879
1880 TEST_c_c (catanh, plus_infty, nan_value, 0.0, nan_value);
1881 TEST_c_c (catanh, minus_infty, nan_value, minus_zero, nan_value);
1882
1883 TEST_c_c (catanh, nan_value, 0, nan_value, nan_value);
1884 TEST_c_c (catanh, nan_value, minus_zero, nan_value, nan_value);
1885
1886 TEST_c_c (catanh, nan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
1887 TEST_c_c (catanh, nan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
1888
1889 TEST_c_c (catanh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1890 TEST_c_c (catanh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1891
1892 TEST_c_c (catanh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1893 TEST_c_c (catanh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1894
1895 TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value);
1896
2550dfe9 1897 TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
33e885db 1898 TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
8847214f 1899
6815fabc 1900 END (catanh, complex);
8847214f
UD
1901}
1902
1903static void
1904cbrt_test (void)
1905{
42be70d4
UD
1906 errno = 0;
1907 FUNC(cbrt) (8);
1908 if (errno == ENOSYS)
1909 /* Function not implemented. */
1910 return;
1911
8847214f
UD
1912 START (cbrt);
1913
1914 TEST_f_f (cbrt, 0.0, 0.0);
1915 TEST_f_f (cbrt, minus_zero, minus_zero);
1916
1917 TEST_f_f (cbrt, plus_infty, plus_infty);
1918 TEST_f_f (cbrt, minus_infty, minus_infty);
1919 TEST_f_f (cbrt, nan_value, nan_value);
1920
3c6cad26 1921 TEST_f_f (cbrt, -0.001L, -0.1L);
8847214f
UD
1922 TEST_f_f (cbrt, 8, 2);
1923 TEST_f_f (cbrt, -27.0, -3.0);
2550dfe9
AJ
1924 TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
1925 TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
8847214f
UD
1926
1927 END (cbrt);
1928}
1929
2550dfe9 1930
8847214f
UD
1931static void
1932ccos_test (void)
1933{
aaca11d8
UD
1934 errno = 0;
1935 FUNC(ccos) (BUILD_COMPLEX (0, 0));
1936 if (errno == ENOSYS)
1937 /* Function not implemented. */
1938 return;
8847214f
UD
1939
1940 START (ccos);
1941
1942 TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
1943 TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
1944 TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
1945 TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
1946
1947 TEST_c_c (ccos, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1948 TEST_c_c (ccos, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1949 TEST_c_c (ccos, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1950 TEST_c_c (ccos, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1951
1952 TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
1953 TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
1954 TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
1955 TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
1956
1957 TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1958 TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1959 TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1960 TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1961
1962 TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
1963 TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
1964 TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
1965 TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
1966
1967 TEST_c_c (ccos, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1968 TEST_c_c (ccos, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1969 TEST_c_c (ccos, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1970 TEST_c_c (ccos, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1971
1972 TEST_c_c (ccos, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1973 TEST_c_c (ccos, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1974
1975 TEST_c_c (ccos, nan_value, plus_infty, plus_infty, nan_value);
1976 TEST_c_c (ccos, nan_value, minus_infty, plus_infty, nan_value);
1977
1978 TEST_c_c (ccos, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1979 TEST_c_c (ccos, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1980
1981 TEST_c_c (ccos, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1982 TEST_c_c (ccos, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1983
1984 TEST_c_c (ccos, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1985 TEST_c_c (ccos, -10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1986
1987 TEST_c_c (ccos, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1988 TEST_c_c (ccos, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1989
1990 TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
1991
2550dfe9 1992 TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
79df8ce5 1993 TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
8847214f 1994
e0b16cc2
JM
1995 TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
1996 TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
1997 TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
1998 TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
1999
2000#ifndef TEST_FLOAT
2001 TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
2002 TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
2003 TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
2004 TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
2005#endif
2006
2007#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2008 TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
2009 TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
2010 TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
2011 TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
2012#endif
2013
2014#ifdef TEST_FLOAT
2015 TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
2016#endif
2017
2018#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
2019 TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
2020#endif
2021
2022#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2023 TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
2024#endif
2025
6815fabc 2026 END (ccos, complex);
8847214f
UD
2027}
2028
2029
2030static void
2031ccosh_test (void)
2032{
aaca11d8 2033 errno = 0;
3c6cad26 2034 FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
2035 if (errno == ENOSYS)
2036 /* Function not implemented. */
2037 return;
8847214f
UD
2038
2039 START (ccosh);
2040
2041 TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
2042 TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
2043 TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
2044 TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
2045
2046 TEST_c_c (ccosh, 0.0, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2047 TEST_c_c (ccosh, minus_zero, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2048 TEST_c_c (ccosh, 0.0, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2049 TEST_c_c (ccosh, minus_zero, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2050
2051 TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
2052 TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
2053 TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
2054 TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
2055
2056 TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2057 TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2058 TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2059 TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2060
2061 TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
2062 TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
2063 TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
2064 TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
2065
2066 TEST_c_c (ccosh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2067 TEST_c_c (ccosh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2068 TEST_c_c (ccosh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2069 TEST_c_c (ccosh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2070
2071 TEST_c_c (ccosh, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2072 TEST_c_c (ccosh, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2073
2074 TEST_c_c (ccosh, plus_infty, nan_value, plus_infty, nan_value);
2075 TEST_c_c (ccosh, minus_infty, nan_value, plus_infty, nan_value);
2076
2077 TEST_c_c (ccosh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2078 TEST_c_c (ccosh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2079
2080 TEST_c_c (ccosh, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2081 TEST_c_c (ccosh, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2082
2083 TEST_c_c (ccosh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2084 TEST_c_c (ccosh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2085
2086 TEST_c_c (ccosh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2087 TEST_c_c (ccosh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2088
2089 TEST_c_c (ccosh, nan_value, nan_value, nan_value, nan_value);
2090
2550dfe9 2091 TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
8847214f 2092
79df8ce5 2093 TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
8847214f 2094
e0b16cc2
JM
2095 TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
2096 TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
2097 TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
2098 TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
2099
2100#ifndef TEST_FLOAT
2101 TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
2102 TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
2103 TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
2104 TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
2105#endif
2106
2107#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2108 TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
2109 TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
2110 TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
2111 TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
2112#endif
2113
2114#ifdef TEST_FLOAT
2115 TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
2116#endif
2117
2118#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
2119 TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
2120#endif
2121
2122#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2123 TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
2124#endif
2125
6815fabc 2126 END (ccosh, complex);
8847214f
UD
2127}
2128
2129
2130static void
2131ceil_test (void)
2132{
2133 START (ceil);
2134
2135 TEST_f_f (ceil, 0.0, 0.0);
2136 TEST_f_f (ceil, minus_zero, minus_zero);
2137 TEST_f_f (ceil, plus_infty, plus_infty);
2138 TEST_f_f (ceil, minus_infty, minus_infty);
15daa639 2139 TEST_f_f (ceil, nan_value, nan_value);
8847214f
UD
2140
2141 TEST_f_f (ceil, M_PIl, 4.0);
2142 TEST_f_f (ceil, -M_PIl, -3.0);
5c68d401 2143 TEST_f_f (ceil, 0.1, 1.0);
45740f46 2144 TEST_f_f (ceil, 0.25, 1.0);
5c68d401
RM
2145 TEST_f_f (ceil, 0.625, 1.0);
2146 TEST_f_f (ceil, -0.1, minus_zero);
97fd3a30 2147 TEST_f_f (ceil, -0.25, minus_zero);
5c68d401 2148 TEST_f_f (ceil, -0.625, minus_zero);
8847214f 2149
f964490f
RM
2150#ifdef TEST_LDOUBLE
2151 /* The result can only be represented in long double. */
2152 TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
2153 TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
2154 TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
2155 TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
2156 TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
2157
2158 TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
2159 TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
2160 TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
2161 TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
2162 TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
2163
5c68d401
RM
2164# if LDBL_MANT_DIG > 100
2165 TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
2166 TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
2167 TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
2168 TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
2169 TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
2170 TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
2171# endif
2172
f964490f
RM
2173 TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
2174 TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
2175 TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
2176 TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
2177 TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
2178
2179 TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
2180 TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
2181 TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
2182 TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
2183 TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
2184
5c68d401
RM
2185# if LDBL_MANT_DIG > 100
2186 TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
2187 TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
2188 TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
2189 TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
2190 TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
2191 TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
2192
2193 TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
2194 TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
2195 TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
2196 TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
2197 TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
2198 TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
2199# endif
2200
f964490f
RM
2201 TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
2202 TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
2203 TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
2204 TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
2205 TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
2206
2207 TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
2208 TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
2209 TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
2210 TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
2211 TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
2212
2213 TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
2214 TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
2215 TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
2216 TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
2217 TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
2218#endif
2219
8847214f
UD
2220 END (ceil);
2221}
2222
2223
2224static void
2225cexp_test (void)
2226{
aaca11d8
UD
2227 errno = 0;
2228 FUNC(cexp) (BUILD_COMPLEX (0, 0));
2229 if (errno == ENOSYS)
2230 /* Function not implemented. */
2231 return;
2232
8847214f
UD
2233 START (cexp);
2234
2235 TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
2236 TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
2237 TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
2238 TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
2239
2240 TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
2241 TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
2242
2243 TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
2244 TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
2245
2246 TEST_c_c (cexp, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2247 TEST_c_c (cexp, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2248
2249 TEST_c_c (cexp, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2250 TEST_c_c (cexp, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2251
2252 TEST_c_c (cexp, 100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2253 TEST_c_c (cexp, -100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2254
2255 TEST_c_c (cexp, 100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2256 TEST_c_c (cexp, -100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2257
2258 TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
2259 TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
2260 TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
2261 TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
2262
2263 TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2264 TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2265
2266 TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
2267 TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
2268
2269 TEST_c_c (cexp, minus_infty, nan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
2270
2271 TEST_c_c (cexp, plus_infty, nan_value, plus_infty, nan_value);
2272
2273 TEST_c_c (cexp, nan_value, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2274 TEST_c_c (cexp, nan_value, 1.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2275
2276 TEST_c_c (cexp, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2277 TEST_c_c (cexp, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2278 TEST_c_c (cexp, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2279 TEST_c_c (cexp, nan_value, nan_value, nan_value, nan_value);
2280
9d0c92b2 2281 TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
d8337213 2282 TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
8847214f 2283
1a4ac776
JM
2284 TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
2285 TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
2286 TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
2287
2288#ifndef TEST_FLOAT
2289 TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
2290 TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
2291 TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
2292#endif
2293
2294#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2295 TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
2296 TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
2297#endif
2298
7c69cd14 2299 TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
80bad0cc 2300 TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
7c69cd14
JM
2301
2302#ifndef TEST_FLOAT
2303 TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
80bad0cc 2304 TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
7c69cd14
JM
2305#endif
2306
2307#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2308 TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
80bad0cc 2309 TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
7c69cd14
JM
2310#endif
2311
2312#ifdef TEST_FLOAT
2313 TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
2314#endif
2315
2316#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
2317 TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
2318#endif
2319
2320#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2321 TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
2322#endif
2323
2324 TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
2325 TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
2326 TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
2327
6815fabc 2328 END (cexp, complex);
8847214f
UD
2329}
2330
2550dfe9 2331
0cdc8e6f
UD
2332static void
2333cimag_test (void)
2334{
2335 START (cimag);
2336 TEST_c_f (cimag, 1.0, 0.0, 0.0);
2337 TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
2338 TEST_c_f (cimag, 1.0, nan_value, nan_value);
2339 TEST_c_f (cimag, nan_value, nan_value, nan_value);
2340 TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
2341 TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
2342 TEST_c_f (cimag, 2.0, 3.0, 3.0);
2343
2344 END (cimag);
2345}
2346
8847214f
UD
2347static void
2348clog_test (void)
2349{
aaca11d8
UD
2350 errno = 0;
2351 FUNC(clog) (BUILD_COMPLEX (-2, -3));
2352 if (errno == ENOSYS)
2353 /* Function not implemented. */
2354 return;
2355
8847214f
UD
2356 START (clog);
2357
2358 TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
2359 TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
2360
2361 TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
2362 TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
2363
2364 TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
2365 TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2366
2367 TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
2368 TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2369
2370 TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
2371 TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
2372 TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
2373 TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
2374 TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
2375 TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
2376 TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
2377 TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
2378
2379 TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
2380 TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
2381 TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
2382 TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
2383
2384 TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
2385 TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
2386 TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
2387 TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
2388
2389 TEST_c_c (clog, plus_infty, nan_value, plus_infty, nan_value);
2390 TEST_c_c (clog, minus_infty, nan_value, plus_infty, nan_value);
2391
2392 TEST_c_c (clog, nan_value, plus_infty, plus_infty, nan_value);
2393 TEST_c_c (clog, nan_value, minus_infty, plus_infty, nan_value);
2394
2395 TEST_c_c (clog, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2396 TEST_c_c (clog, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2397 TEST_c_c (clog, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2398 TEST_c_c (clog, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2399
2400 TEST_c_c (clog, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2401 TEST_c_c (clog, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2402 TEST_c_c (clog, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2403 TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2404
2405 TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value);
2550dfe9
AJ
2406
2407 TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
33e885db 2408 TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
8847214f 2409
1897ad44 2410 TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
80bad0cc 2411 TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1897ad44
JM
2412 TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
2413 TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
2414
2415#ifndef TEST_FLOAT
2416 TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
2417 TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
2418 TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
2419 TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
2420#endif
2421
2422#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2423 TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
2424 TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
2425 TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
2426#endif
2427
638a572e
JM
2428 TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
2429 TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
2430 TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
2431 TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
2432 TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
2433 TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
2434#ifdef TEST_FLOAT
2435 TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
2436 TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
2437#endif
2438
2439#ifndef TEST_FLOAT
2440 TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
2441 TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
2442 TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
2443 TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
2444 TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
2445 TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
2446#endif
2447#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
2448 TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
2449 TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
2450#endif
2451
2452#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2453 TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
2454 TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
2455 TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
2456 TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
2457 TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
2458 TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
2459 TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
2460 TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
2461# if LDBL_MANT_DIG >= 113
2462 TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
2463 TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
2464 TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
2465 TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
2466 TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
2467 TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
2468 TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
2469 TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
2470# endif
2471#endif
2472
da865e95
JM
2473 TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
2474 TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
2475 TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
2476 TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
2477 TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
2478 TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
2479 TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
2480 TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
2481 TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
2482#ifndef TEST_FLOAT
2483 TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2484 TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2485 TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2486#endif
2487#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2488 TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
2489 TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2490 TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2491#endif
2492
d0419dbf
JM
2493 TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
2494 TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
2495#ifndef TEST_FLOAT
2496 TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
2497 TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
2498#endif
2499#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2500 TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
2501 TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L);
2502#endif
2503
d032e0d2
JM
2504 TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
2505#ifndef TEST_FLOAT
2506 TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L);
2507#endif
2508#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2509 TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
2510#endif
2511
2512 TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
2513 TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
2514 TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
2515 TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
2516 TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
2517 TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
2518 TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
2519 TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
2520 TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
2521 TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
2522#ifndef TEST_FLOAT
2523 TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
2524 TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
2525 TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
2526 TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
2527 TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
2528 TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
2529 TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
2530 TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
2531 TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
2532 TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
2533 TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
2534 TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
2535#endif
2536#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2537 TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
2538 TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
2539 TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
2540 TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
2541 TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
2542#endif
2543#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2544 TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
2545 TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
2546 TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
2547 TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
2548 TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
2549 TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
2550 TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
2551 TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
2552 TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
2553 TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
2554#endif
2555#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2556 TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
2557 TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
2558 TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
2559 TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
2560 TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
2561 TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
2562#endif
2563
6815fabc 2564 END (clog, complex);
8847214f
UD
2565}
2566
2567
2568static void
2569clog10_test (void)
2570{
aaca11d8 2571 errno = 0;
3c6cad26 2572 FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
2573 if (errno == ENOSYS)
2574 /* Function not implemented. */
2575 return;
2576
8847214f
UD
2577 START (clog10);
2578
2579 TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
2580 TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
2581
2582 TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
2583 TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
2584
2585 TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
2586
2587 TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
2588 TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
2589
2590 TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
2591 TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
2592 TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
2593 TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
2594 TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
2595 TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
2596 TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
2597 TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
2598
2599 TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
2600 TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
2601 TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
2602 TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
2603
2604 TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
2605 TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
2606 TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
2607 TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
2608
2609 TEST_c_c (clog10, plus_infty, nan_value, plus_infty, nan_value);
2610 TEST_c_c (clog10, minus_infty, nan_value, plus_infty, nan_value);
2611
2612 TEST_c_c (clog10, nan_value, plus_infty, plus_infty, nan_value);
2613 TEST_c_c (clog10, nan_value, minus_infty, plus_infty, nan_value);
2614
2615 TEST_c_c (clog10, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2616 TEST_c_c (clog10, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2617 TEST_c_c (clog10, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2618 TEST_c_c (clog10, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2619
2620 TEST_c_c (clog10, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2621 TEST_c_c (clog10, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2622 TEST_c_c (clog10, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2623 TEST_c_c (clog10, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2624
2625 TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
2626
2550dfe9 2627 TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
79df8ce5 2628 TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
8847214f 2629
1897ad44 2630 TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
80bad0cc 2631 TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1897ad44
JM
2632 TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
2633 TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
2634
2635#ifndef TEST_FLOAT
2636 TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
2637 TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
2638 TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
2639 TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
2640#endif
2641
2642#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2643 TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
2644 TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
2645 TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
2646#endif
2647
638a572e
JM
2648 TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
2649 TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
2650 TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
2651 TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
2652 TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
2653 TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
2654#ifdef TEST_FLOAT
2655 TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
2656 TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
2657#endif
2658
2659#ifndef TEST_FLOAT
2660 TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
2661 TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
2662 TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
2663 TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
2664 TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
2665 TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
2666#endif
2667#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
2668 TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
2669 TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
2670#endif
2671
2672#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2673 TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
2674 TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
2675 TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
2676 TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
2677 TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
2678 TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
2679 TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
2680 TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
2681# if LDBL_MANT_DIG >= 113
2682 TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
2683 TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
2684 TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
2685 TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
2686 TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
2687 TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
2688 TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
2689 TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
2690# endif
2691#endif
2692
da865e95
JM
2693 TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
2694 TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
2695 TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
2696 TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
2697 TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
2698 TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
2699 TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
2700 TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2701 TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2702#ifndef TEST_FLOAT
2703 TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2704 TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2705 TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2706#endif
2707#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2708 TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
2709 TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
2710 TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
2711#endif
2712
d0419dbf
JM
2713 TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
2714 TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
2715#ifndef TEST_FLOAT
2716 TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
2717 TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
2718#endif
2719#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2720 TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
2721 TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L);
2722#endif
2723
d032e0d2
JM
2724 TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
2725#ifndef TEST_FLOAT
2726 TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L);
2727#endif
2728#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2729 TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
2730#endif
2731
2732 TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
2733 TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
2734 TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
2735 TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
2736 TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
2737 TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
2738 TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
2739 TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
2740 TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
2741 TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
2742#ifndef TEST_FLOAT
2743 TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
2744 TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
2745 TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
2746 TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
2747 TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
2748 TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
2749 TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
2750 TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
2751 TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
2752 TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
2753 TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
2754 TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
2755#endif
2756#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2757 TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
2758 TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
2759 TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
2760 TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
2761 TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
2762#endif
2763#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2764 TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
2765 TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
2766 TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
2767 TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
2768 TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
2769 TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
2770 TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
2771 TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
2772 TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
2773 TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
2774#endif
2775#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2776 TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
2777 TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
2778 TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
2779 TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
2780 TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
2781 TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
2782#endif
2783
6815fabc 2784 END (clog10, complex);
8847214f
UD
2785}
2786
2550dfe9 2787
0cdc8e6f
UD
2788static void
2789conj_test (void)
2790{
2791 START (conj);
2792 TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
2793 TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
2794 TEST_c_c (conj, nan_value, nan_value, nan_value, nan_value);
2795 TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
2796 TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
2797 TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
2798 TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
2799
2800 END (conj, complex);
2801}
2802
2803
8847214f
UD
2804static void
2805copysign_test (void)
2806{
2807 START (copysign);
2808
2809 TEST_ff_f (copysign, 0, 4, 0);
2810 TEST_ff_f (copysign, 0, -4, minus_zero);
2811 TEST_ff_f (copysign, minus_zero, 4, 0);
2812 TEST_ff_f (copysign, minus_zero, -4, minus_zero);
2813
2814 TEST_ff_f (copysign, plus_infty, 0, plus_infty);
2815 TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
2816 TEST_ff_f (copysign, minus_infty, 0, plus_infty);
2817 TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
2818
2819 TEST_ff_f (copysign, 0, plus_infty, 0);
2820 TEST_ff_f (copysign, 0, minus_zero, minus_zero);
2821 TEST_ff_f (copysign, minus_zero, plus_infty, 0);
2822 TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
2823
2824 /* XXX More correctly we would have to check the sign of the NaN. */
2825 TEST_ff_f (copysign, nan_value, 0, nan_value);
2826 TEST_ff_f (copysign, nan_value, minus_zero, nan_value);
2827 TEST_ff_f (copysign, -nan_value, 0, nan_value);
2828 TEST_ff_f (copysign, -nan_value, minus_zero, nan_value);
2829
2830 END (copysign);
2831}
2832
2550dfe9 2833
8847214f
UD
2834static void
2835cos_test (void)
2836{
e6d3c4a7
AJ
2837 errno = 0;
2838 FUNC(cos) (0);
2839 if (errno == ENOSYS)
2840 /* Function not implemented. */
2841 return;
2842
8847214f
UD
2843 START (cos);
2844
2845 TEST_f_f (cos, 0, 1);
2846 TEST_f_f (cos, minus_zero, 1);
0c59a196 2847 errno = 0;
8847214f 2848 TEST_f_f (cos, plus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
2849 check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
2850 errno = 0;
8847214f 2851 TEST_f_f (cos, minus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
2852 check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
2853 errno = 0;
15daa639 2854 TEST_f_f (cos, nan_value, nan_value);
0c59a196 2855 check_int ("errno for cos(NaN) unchanged", errno, 0, 0, 0, 0);
8847214f
UD
2856
2857 TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
2858 TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
2859 TEST_f_f (cos, M_PI_2l, 0);
2860
2550dfe9 2861 TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
8847214f 2862
ea40808a
AJ
2863 TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
2864 TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
8c0247db 2865
d32e4346
RM
2866#ifdef TEST_DOUBLE
2867 TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
8848d99d
JM
2868#endif
2869
7a845b2c
JM
2870 TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
2871
8848d99d
JM
2872#ifndef TEST_FLOAT
2873 TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
2874 TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
2875#endif
2876
2877#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2878 TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
d32e4346
RM
2879#endif
2880
4ffffbd2
LD
2881 TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
2882 TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
2883 TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
2884 TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
2885 TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
2886 TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
2887
8847214f
UD
2888 END (cos);
2889}
2890
2550dfe9 2891
804360ed
JM
2892static void
2893cos_test_tonearest (void)
2894{
2895 int save_round_mode;
2896 errno = 0;
2897 FUNC(cos) (0);
2898 if (errno == ENOSYS)
2899 /* Function not implemented. */
2900 return;
2901
2902 START (cos_tonearest);
2903
2904 save_round_mode = fegetround ();
2905
2906 if (!fesetround (FE_TONEAREST))
2907 {
2908 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2909 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2910 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2911 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2912 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2913 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2914 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2915 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2916 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2917 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2918 }
2919
2920 fesetround (save_round_mode);
2921
2922 END (cos_tonearest);
2923}
2924
2925
2926static void
2927cos_test_towardzero (void)
2928{
2929 int save_round_mode;
2930 errno = 0;
2931 FUNC(cos) (0);
2932 if (errno == ENOSYS)
2933 /* Function not implemented. */
2934 return;
2935
2936 START (cos_towardzero);
2937
2938 save_round_mode = fegetround ();
2939
2940 if (!fesetround (FE_TOWARDZERO))
2941 {
2942 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2943 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2944 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2945 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2946 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2947 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2948 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2949 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2950 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2951 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2952 }
2953
2954 fesetround (save_round_mode);
2955
2956 END (cos_towardzero);
2957}
2958
2959
2960static void
2961cos_test_downward (void)
2962{
2963 int save_round_mode;
2964 errno = 0;
2965 FUNC(cos) (0);
2966 if (errno == ENOSYS)
2967 /* Function not implemented. */
2968 return;
2969
2970 START (cos_downward);
2971
2972 save_round_mode = fegetround ();
2973
2974 if (!fesetround (FE_DOWNWARD))
2975 {
2976 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2977 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2978 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2979 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2980 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2981 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2982 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2983 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2984 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2985 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2986 }
2987
2988 fesetround (save_round_mode);
2989
2990 END (cos_downward);
2991}
2992
2993
2994static void
2995cos_test_upward (void)
2996{
2997 int save_round_mode;
2998 errno = 0;
2999 FUNC(cos) (0);
3000 if (errno == ENOSYS)
3001 /* Function not implemented. */
3002 return;
3003
3004 START (cos_upward);
3005
3006 save_round_mode = fegetround ();
3007
3008 if (!fesetround (FE_UPWARD))
3009 {
3010 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
3011 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
3012 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
3013 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
3014 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
3015 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
3016 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
3017 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
3018 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
3019 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
3020 }
3021
3022 fesetround (save_round_mode);
3023
3024 END (cos_upward);
3025}
3026
3027
8847214f
UD
3028static void
3029cosh_test (void)
3030{
aaca11d8 3031 errno = 0;
3c6cad26 3032 FUNC(cosh) (0.7L);
aaca11d8
UD
3033 if (errno == ENOSYS)
3034 /* Function not implemented. */
3035 return;
3036
8847214f
UD
3037 START (cosh);
3038 TEST_f_f (cosh, 0, 1);
3039 TEST_f_f (cosh, minus_zero, 1);
3040
15daa639 3041#ifndef TEST_INLINE
8847214f
UD
3042 TEST_f_f (cosh, plus_infty, plus_infty);
3043 TEST_f_f (cosh, minus_infty, plus_infty);
15daa639
UD
3044#endif
3045 TEST_f_f (cosh, nan_value, nan_value);
8847214f 3046
2550dfe9
AJ
3047 TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
3048
e2283f38
JM
3049#ifndef TEST_FLOAT
3050 TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
3051 TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
3052#endif
3053
8847214f
UD
3054 END (cosh);
3055}
3056
3057
ca811b22
JM
3058static void
3059cosh_test_tonearest (void)
3060{
3061 int save_round_mode;
3062 errno = 0;
3063 FUNC(cosh) (0);
3064 if (errno == ENOSYS)
3065 /* Function not implemented. */
3066 return;
3067
3068 START (cosh_tonearest);
3069
3070 save_round_mode = fegetround ();
3071
3072 if (!fesetround (FE_TONEAREST))
3073 {
3074 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
3075 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
3076 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
3077 }
3078
3079 fesetround (save_round_mode);
3080
3081 END (cosh_tonearest);
3082}
3083
3084
3085static void
3086cosh_test_towardzero (void)
3087{
3088 int save_round_mode;
3089 errno = 0;
3090 FUNC(cosh) (0);
3091 if (errno == ENOSYS)
3092 /* Function not implemented. */
3093 return;
3094
3095 START (cosh_towardzero);
3096
3097 save_round_mode = fegetround ();
3098
3099 if (!fesetround (FE_TOWARDZERO))
3100 {
3101 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
3102 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
3103 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
3104 }
3105
3106 fesetround (save_round_mode);
3107
3108 END (cosh_towardzero);
3109}
3110
3111
3112static void
3113cosh_test_downward (void)
3114{
3115 int save_round_mode;
3116 errno = 0;
3117 FUNC(cosh) (0);
3118 if (errno == ENOSYS)
3119 /* Function not implemented. */
3120 return;
3121
3122 START (cosh_downward);
3123
3124 save_round_mode = fegetround ();
3125
3126 if (!fesetround (FE_DOWNWARD))
3127 {
3128 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
3129 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
3130 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
3131 }
3132
3133 fesetround (save_round_mode);
3134
3135 END (cosh_downward);
3136}
3137
3138
3139static void
3140cosh_test_upward (void)
3141{
3142 int save_round_mode;
3143 errno = 0;
3144 FUNC(cosh) (0);
3145 if (errno == ENOSYS)
3146 /* Function not implemented. */
3147 return;
3148
3149 START (cosh_upward);
3150
3151 save_round_mode = fegetround ();
3152
3153 if (!fesetround (FE_UPWARD))
3154 {
3155 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
3156 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
3157 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
3158 }
3159
3160 fesetround (save_round_mode);
3161
3162 END (cosh_upward);
3163}
3164
3165
8847214f
UD
3166static void
3167cpow_test (void)
3168{
aaca11d8
UD
3169 errno = 0;
3170 FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
3171 if (errno == ENOSYS)
3172 /* Function not implemented. */
3173 return;
3174
8847214f
UD
3175 START (cpow);
3176
3177 TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
3178 TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
3179
3180 TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
3181 TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
3182
15daa639
UD
3183 TEST_cc_c (cpow, nan_value, nan_value, nan_value, nan_value, nan_value, nan_value);
3184
96d10bdf
AJ
3185 TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
3186 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
2550dfe9 3187 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
96d10bdf 3188 TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
2550dfe9 3189
6815fabc 3190 END (cpow, complex);
8847214f
UD
3191}
3192
2550dfe9 3193
8847214f
UD
3194static void
3195cproj_test (void)
3196{
3197 START (cproj);
3198 TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
3199 TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
3200 TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
3201 TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
3202
3203 TEST_c_c (cproj, nan_value, nan_value, nan_value, nan_value);
3204
3205 TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
3206 TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
3207 TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
3208 TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
3209
3210 TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
88e236a6 3211 TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
8847214f 3212
6815fabc 3213 END (cproj, complex);
8847214f
UD
3214}
3215
2550dfe9 3216
0cdc8e6f
UD
3217static void
3218creal_test (void)
3219{
3220 START (creal);
3221 TEST_c_f (creal, 0.0, 1.0, 0.0);
3222 TEST_c_f (creal, minus_zero, 1.0, minus_zero);
3223 TEST_c_f (creal, nan_value, 1.0, nan_value);
3224 TEST_c_f (creal, nan_value, nan_value, nan_value);
3225 TEST_c_f (creal, plus_infty, 1.0, plus_infty);
3226 TEST_c_f (creal, minus_infty, 1.0, minus_infty);
3227 TEST_c_f (creal, 2.0, 3.0, 2.0);
3228
3229 END (creal);
3230}
8847214f
UD
3231
3232static void
3233csin_test (void)
3234{
aaca11d8 3235 errno = 0;
3c6cad26 3236 FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
3237 if (errno == ENOSYS)
3238 /* Function not implemented. */
3239 return;
8847214f
UD
3240
3241 START (csin);
3242
3243 TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
3244 TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
3245 TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
3246 TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
3247
3248 TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
3249 TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
3250 TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
3251 TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
3252
3253 TEST_c_c (csin, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3254 TEST_c_c (csin, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3255 TEST_c_c (csin, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3256 TEST_c_c (csin, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3257
3258 TEST_c_c (csin, plus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3259 TEST_c_c (csin, minus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3260 TEST_c_c (csin, plus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3261 TEST_c_c (csin, minus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3262
3263 TEST_c_c (csin, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
3264 TEST_c_c (csin, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
3265 TEST_c_c (csin, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
3266 TEST_c_c (csin, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
3267
3268 TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
3269 TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
3270 TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
3271 TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
3272
3273 TEST_c_c (csin, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3274 TEST_c_c (csin, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3275
3276 TEST_c_c (csin, nan_value, plus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
3277 TEST_c_c (csin, nan_value, minus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
3278
3279 TEST_c_c (csin, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3280 TEST_c_c (csin, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3281
3282 TEST_c_c (csin, 0.0, nan_value, 0.0, nan_value);
3283 TEST_c_c (csin, minus_zero, nan_value, minus_zero, nan_value);
3284
3285 TEST_c_c (csin, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3286 TEST_c_c (csin, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3287
3288 TEST_c_c (csin, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3289 TEST_c_c (csin, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3290
3291 TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
3292
2550dfe9 3293 TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
79df8ce5 3294 TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
8847214f 3295
e0b16cc2
JM
3296 TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
3297 TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
3298 TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
3299 TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
3300
3301#ifndef TEST_FLOAT
3302 TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
3303 TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
3304 TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
3305 TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
3306#endif
3307
3308#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3309 TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
3310 TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
3311 TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
3312 TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
3313#endif
3314
3315#ifdef TEST_FLOAT
3316 TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
3317#endif
3318
3319#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
3320 TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
3321#endif
3322
3323#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3324 TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
3325#endif
3326
6815fabc 3327 END (csin, complex);
8847214f
UD
3328}
3329
3330
3331static void
3332csinh_test (void)
3333{
aaca11d8 3334 errno = 0;
3c6cad26 3335 FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
3336 if (errno == ENOSYS)
3337 /* Function not implemented. */
3338 return;
8847214f
UD
3339
3340 START (csinh);
3341
3342 TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
3343 TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
3344 TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
3345 TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
3346
3347 TEST_c_c (csinh, 0.0, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3348 TEST_c_c (csinh, minus_zero, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3349 TEST_c_c (csinh, 0.0, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3350 TEST_c_c (csinh, minus_zero, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3351
3352 TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
3353 TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
3354 TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
3355 TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
3356
3357 TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3358 TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3359 TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3360 TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3361
3362 TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
3363 TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
3364 TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
3365 TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
3366
3367 TEST_c_c (csinh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3368 TEST_c_c (csinh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3369 TEST_c_c (csinh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3370 TEST_c_c (csinh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3371
3372 TEST_c_c (csinh, 0.0, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
3373 TEST_c_c (csinh, minus_zero, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
3374
3375 TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
3376 TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
3377
a16956f3
UD
3378 TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3379 TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
8847214f
UD
3380
3381 TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
3382 TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
3383
3384 TEST_c_c (csinh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3385 TEST_c_c (csinh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3386
3387 TEST_c_c (csinh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3388 TEST_c_c (csinh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3389
3390 TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
3391
2550dfe9 3392 TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
79df8ce5 3393 TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
8847214f 3394
e0b16cc2
JM
3395 TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
3396 TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
3397 TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
3398 TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
3399
3400#ifndef TEST_FLOAT
3401 TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
3402 TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
3403 TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
3404 TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
3405#endif
3406
3407#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3408 TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
3409 TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
3410 TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
3411 TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
3412#endif
3413
3414#ifdef TEST_FLOAT
3415 TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
3416#endif
3417
3418#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
3419 TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
3420#endif
3421
3422#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3423 TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
3424#endif
3425
6815fabc 3426 END (csinh, complex);
8847214f
UD
3427}
3428
2550dfe9 3429
8847214f
UD
3430static void
3431csqrt_test (void)
3432{
aaca11d8
UD
3433 errno = 0;
3434 FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
3435 if (errno == ENOSYS)
3436 /* Function not implemented. */
3437 return;
3438
8847214f
UD
3439 START (csqrt);
3440
3441 TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
3442 TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
3443 TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
3444 TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
3445
3446 TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
3447 TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
3448 TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
3449 TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
3450
3451 TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
3452 TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
3453 TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
3454 TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
3455
3456 TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
3457 TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
3458 TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
3459 TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
3460 TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
3461 TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
3462 TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
3463 TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
3464 TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
3465 TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
3466 TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
3467 TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
3468
3469 TEST_c_c (csqrt, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
3470
3471 TEST_c_c (csqrt, plus_infty, nan_value, plus_infty, nan_value);
3472
3473 TEST_c_c (csqrt, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3474 TEST_c_c (csqrt, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3475 TEST_c_c (csqrt, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3476 TEST_c_c (csqrt, -1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3477
3478 TEST_c_c (csqrt, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3479 TEST_c_c (csqrt, nan_value, 8, nan_value, nan_value, INVALID_EXCEPTION_OK);
3480 TEST_c_c (csqrt, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
3481 TEST_c_c (csqrt, nan_value, -8, nan_value, nan_value, INVALID_EXCEPTION_OK);
3482
3483 TEST_c_c (csqrt, nan_value, nan_value, nan_value, nan_value);
3484
3485 TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
3486 TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
3487 TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
3488 TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
2550dfe9 3489 TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
d8337213
UD
3490 TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
3491 TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
72c7a71d
UD
3492 /* Principal square root should be returned (i.e., non-negative real
3493 part). */
3494 TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
8847214f 3495
e456826d
JM
3496 TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
3497 TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
3498 TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
3499 TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
3500
cdfe2c5e
JM
3501 TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
3502 TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
3503#ifdef TEST_FLOAT
3504 TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
3505#endif
3506 TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
3507 TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
3508 TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
3509
e456826d
JM
3510#ifndef TEST_FLOAT
3511 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
3512 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
cdfe2c5e
JM
3513 TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
3514 TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
3515
3516 TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
3517 TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
3518#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
3519 TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
3520#endif
3521 TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
3522 TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
3523 TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
e456826d
JM
3524#endif
3525
3526#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3527 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
3528 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
3529 TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L, 8.297059146828716918029689466551384219370e-2476L);
cdfe2c5e
JM
3530
3531 TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
3532 TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
3533 TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
3534 TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
3535 TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
3536 TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
3537
3538# if LDBL_MANT_DIG >= 113
3539 TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
3540 TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
3541 TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
3542 TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
3543 TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
3544 TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
3545# endif
e456826d
JM
3546#endif
3547
6815fabc 3548 END (csqrt, complex);
8847214f
UD
3549}
3550
3551static void
3552ctan_test (void)
3553{
aaca11d8 3554 errno = 0;
3c6cad26 3555 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
3556 if (errno == ENOSYS)
3557 /* Function not implemented. */
3558 return;
3559
8847214f
UD
3560 START (ctan);
3561
3562 TEST_c_c (ctan, 0, 0, 0.0, 0.0);
3563 TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
3564 TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
3565 TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
3566
3567 TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
3568 TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
3569 TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
3570 TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
3571
3572 TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
3573 TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
3574 TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
3575 TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
3576
3577 TEST_c_c (ctan, plus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
3578 TEST_c_c (ctan, plus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
3579 TEST_c_c (ctan, minus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
3580 TEST_c_c (ctan, minus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
3581 TEST_c_c (ctan, plus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
3582 TEST_c_c (ctan, plus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
3583 TEST_c_c (ctan, minus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
3584 TEST_c_c (ctan, minus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
3585
3586 TEST_c_c (ctan, nan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
3587 TEST_c_c (ctan, nan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
3588
3589 TEST_c_c (ctan, 0, nan_value, 0.0, nan_value);
3590 TEST_c_c (ctan, minus_zero, nan_value, minus_zero, nan_value);
3591
3592 TEST_c_c (ctan, 0.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3593 TEST_c_c (ctan, -4.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3594
3595 TEST_c_c (ctan, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3596 TEST_c_c (ctan, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
3597 TEST_c_c (ctan, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
3598 TEST_c_c (ctan, nan_value, -0.25, nan_value, nan_value, INVALID_EXCEPTION_OK);
3599
3600 TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
3601
2550dfe9 3602 TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
79df8ce5 3603 TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
8847214f 3604
80bad0cc
JM
3605 TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
3606 TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
bcc8d661
JM
3607
3608#ifndef TEST_FLOAT
80bad0cc
JM
3609 TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
3610 TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
bcc8d661
JM
3611#endif
3612
3613#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
80bad0cc
JM
3614 TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
3615 TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
bcc8d661
JM
3616#endif
3617
3618 TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
3619
3620 TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
3621
3622#ifndef TEST_FLOAT
3623 TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
3624#endif
3625
3626#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3627 TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
3628#endif
3629
80bad0cc
JM
3630 TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
3631 TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
3632 TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
3633 TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
bcc8d661 3634
6815fabc 3635 END (ctan, complex);
8847214f
UD
3636}
3637
3638
ca61cf32
JM
3639static void
3640ctan_test_tonearest (void)
3641{
3642 int save_round_mode;
3643 errno = 0;
3644 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
3645 if (errno == ENOSYS)
3646 /* Function not implemented. */
3647 return;
3648
3649 START (ctan_tonearest);
3650
3651 save_round_mode = fegetround ();
3652
3653 if (!fesetround (FE_TONEAREST))
3654 {
3655 TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
3656
3657#ifndef TEST_FLOAT
3658 TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
3659#endif
3660
3661#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3662 TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
3663#endif
3664 }
3665
3666 fesetround (save_round_mode);
3667
3668 END (ctan_tonearest, complex);
3669}
3670
3671
3672static void
3673ctan_test_towardzero (void)
3674{
3675 int save_round_mode;
3676 errno = 0;
3677 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
3678 if (errno == ENOSYS)
3679 /* Function not implemented. */
3680 return;
3681
3682 START (ctan_towardzero);
3683
3684 save_round_mode = fegetround ();
3685
3686 if (!fesetround (FE_TOWARDZERO))
3687 {
3688 TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
3689
3690#ifndef TEST_FLOAT
3691 TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
3692#endif
3693
3694#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3695 TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
3696#endif
3697 }
3698
3699 fesetround (save_round_mode);
3700
3701 END (ctan_towardzero, complex);
3702}
3703
3704
3705static void
3706ctan_test_downward (void)
3707{
3708 int save_round_mode;
3709 errno = 0;
3710 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
3711 if (errno == ENOSYS)
3712 /* Function not implemented. */
3713 return;
3714
3715 START (ctan_downward);
3716
3717 save_round_mode = fegetround ();
3718
3719 if (!fesetround (FE_DOWNWARD))
3720 {
3721 TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
3722
3723#ifndef TEST_FLOAT
3724 TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
3725#endif
3726
3727#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3728 TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
3729#endif
3730 }
3731
3732 fesetround (save_round_mode);
3733
3734 END (ctan_downward, complex);
3735}
3736
3737
3738static void
3739ctan_test_upward (void)
3740{
3741 int save_round_mode;
3742 errno = 0;
3743 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
3744 if (errno == ENOSYS)
3745 /* Function not implemented. */
3746 return;
3747
3748 START (ctan_upward);
3749
3750 save_round_mode = fegetround ();
3751
3752 if (!fesetround (FE_UPWARD))
3753 {
3754 TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
3755
3756#ifndef TEST_FLOAT
3757 TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
3758#endif
3759
3760#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3761 TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
3762#endif
3763 }
3764
3765 fesetround (save_round_mode);
3766
3767 END (ctan_upward, complex);
3768}
3769
3770
8847214f
UD
3771static void
3772ctanh_test (void)
3773{
aaca11d8
UD
3774 errno = 0;
3775 FUNC(ctanh) (BUILD_COMPLEX (0, 0));
3776 if (errno == ENOSYS)
3777 /* Function not implemented. */
3778 return;
3779
8847214f
UD
3780 START (ctanh);
3781
3782 TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
3783 TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
3784 TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
3785 TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
3786
3787 TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
3788 TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
3789 TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
3790 TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
3791 TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
3792 TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
3793 TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
3794 TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
3795
3796 TEST_c_c (ctanh, 0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3797 TEST_c_c (ctanh, 2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3798 TEST_c_c (ctanh, 0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3799 TEST_c_c (ctanh, 2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3800 TEST_c_c (ctanh, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3801 TEST_c_c (ctanh, -2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3802 TEST_c_c (ctanh, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3803 TEST_c_c (ctanh, -2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
3804
3805 TEST_c_c (ctanh, plus_infty, nan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
3806 TEST_c_c (ctanh, minus_infty, nan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
3807
3808 TEST_c_c (ctanh, nan_value, 0, nan_value, 0.0);
3809 TEST_c_c (ctanh, nan_value, minus_zero, nan_value, minus_zero);
3810
3811 TEST_c_c (ctanh, nan_value, 0.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
3812 TEST_c_c (ctanh, nan_value, -4.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
3813
3814 TEST_c_c (ctanh, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3815 TEST_c_c (ctanh, 5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3816 TEST_c_c (ctanh, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3817 TEST_c_c (ctanh, -0.25, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
3818
3819 TEST_c_c (ctanh, nan_value, nan_value, nan_value, nan_value);
3820
3821 TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
3822
2550dfe9 3823 TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
79df8ce5 3824 TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
8847214f 3825
80bad0cc
JM
3826 TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3827 TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
bcc8d661
JM
3828
3829#ifndef TEST_FLOAT
80bad0cc
JM
3830 TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3831 TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
bcc8d661
JM
3832#endif
3833
3834#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
80bad0cc
JM
3835 TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
3836 TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
bcc8d661
JM
3837#endif
3838
3839 TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
3840
3841 TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
3842
3843#ifndef TEST_FLOAT
3844 TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
3845#endif
3846
3847#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3848 TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
3849#endif
3850
80bad0cc
JM
3851 TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
3852 TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
3853 TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
3854 TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
bcc8d661 3855
6815fabc 3856 END (ctanh, complex);
8847214f
UD
3857}
3858
2550dfe9 3859
ca61cf32
JM
3860static void
3861ctanh_test_tonearest (void)
3862{
3863 int save_round_mode;
3864 errno = 0;
3865 FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
3866 if (errno == ENOSYS)
3867 /* Function not implemented. */
3868 return;
3869
3870 START (ctanh_tonearest);
3871
3872 save_round_mode = fegetround ();
3873
3874 if (!fesetround (FE_TONEAREST))
3875 {
3876 TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
3877
3878#ifndef TEST_FLOAT
3879 TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
3880#endif
3881
3882#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3883 TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
3884#endif
3885 }
3886
3887 fesetround (save_round_mode);
3888
3889 END (ctanh_tonearest, complex);
3890}
3891
3892
3893static void
3894ctanh_test_towardzero (void)
3895{
3896 int save_round_mode;
3897 errno = 0;
3898 FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
3899 if (errno == ENOSYS)
3900 /* Function not implemented. */
3901 return;
3902
3903 START (ctanh_towardzero);
3904
3905 save_round_mode = fegetround ();
3906
3907 if (!fesetround (FE_TOWARDZERO))
3908 {
3909 TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
3910
3911#ifndef TEST_FLOAT
3912 TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
3913#endif
3914
3915#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3916 TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
3917#endif
3918 }
3919
3920 fesetround (save_round_mode);
3921
3922 END (ctanh_towardzero, complex);
3923}
3924
3925
3926static void
3927ctanh_test_downward (void)
3928{
3929 int save_round_mode;
3930 errno = 0;
3931 FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
3932 if (errno == ENOSYS)
3933 /* Function not implemented. */
3934 return;
3935
3936 START (ctanh_downward);
3937
3938 save_round_mode = fegetround ();
3939
3940 if (!fesetround (FE_DOWNWARD))
3941 {
3942 TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
3943
3944#ifndef TEST_FLOAT
3945 TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
3946#endif
3947
3948#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3949 TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
3950#endif
3951 }
3952
3953 fesetround (save_round_mode);
3954
3955 END (ctanh_downward, complex);
3956}
3957
3958
3959static void
3960ctanh_test_upward (void)
3961{
3962 int save_round_mode;
3963 errno = 0;
3964 FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
3965 if (errno == ENOSYS)
3966 /* Function not implemented. */
3967 return;
3968
3969 START (ctanh_upward);
3970
3971 save_round_mode = fegetround ();
3972
3973 if (!fesetround (FE_UPWARD))
3974 {
3975 TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
3976
3977#ifndef TEST_FLOAT
3978 TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
3979#endif
3980
3981#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3982 TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
3983#endif
3984 }
3985
3986 fesetround (save_round_mode);
3987
3988 END (ctanh_upward, complex);
3989}
3990
3991
8847214f
UD
3992static void
3993erf_test (void)
3994{
3995 errno = 0;
3996 FUNC(erf) (0);
3997 if (errno == ENOSYS)
3998 /* Function not implemented. */
3999 return;
4000
4001 START (erf);
4002
4003 TEST_f_f (erf, 0, 0);
4004 TEST_f_f (erf, minus_zero, minus_zero);
4005 TEST_f_f (erf, plus_infty, 1);
4006 TEST_f_f (erf, minus_infty, -1);
15daa639 4007 TEST_f_f (erf, nan_value, nan_value);
8847214f 4008
2550dfe9
AJ
4009 TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
4010 TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
4011 TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
4012 TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
4013 TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
4014 TEST_f_f (erf, 27.0L, 1.0L);
8847214f
UD
4015
4016 END (erf);
4017}
4018
4019
4020static void
4021erfc_test (void)
4022{
4023 errno = 0;
4024 FUNC(erfc) (0);
4025 if (errno == ENOSYS)
4026 /* Function not implemented. */
4027 return;
4028
4029 START (erfc);
4030
4031 TEST_f_f (erfc, plus_infty, 0.0);
4032 TEST_f_f (erfc, minus_infty, 2.0);
4033 TEST_f_f (erfc, 0.0, 1.0);
4034 TEST_f_f (erfc, minus_zero, 1.0);
15daa639 4035 TEST_f_f (erfc, nan_value, nan_value);
8847214f 4036
2550dfe9
AJ
4037 TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
4038 TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
4039 TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
4040 TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
7b1902cb 4041 TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
2550dfe9 4042 TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
7b1902cb
JM
4043 TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
4044 TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
2550dfe9
AJ
4045#ifdef TEST_LDOUBLE
4046 /* The result can only be represented in long double. */
f964490f 4047# if LDBL_MIN_10_EXP < -319
2550dfe9 4048 TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
f964490f 4049# endif
7b1902cb
JM
4050# if LDBL_MANT_DIG >= 106
4051 TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
4052# endif
2550dfe9 4053#endif
8847214f
UD
4054
4055 END (erfc);
4056}
4057
2550dfe9 4058
8847214f
UD
4059static void
4060exp_test (void)
4061{
e6d3c4a7
AJ
4062 errno = 0;
4063 FUNC(exp) (0);
4064 if (errno == ENOSYS)
4065 /* Function not implemented. */
4066 return;
4067
8847214f
UD
4068 START (exp);
4069
4070 TEST_f_f (exp, 0, 1);
4071 TEST_f_f (exp, minus_zero, 1);
4072
15daa639 4073#ifndef TEST_INLINE
8847214f
UD
4074 TEST_f_f (exp, plus_infty, plus_infty);
4075 TEST_f_f (exp, minus_infty, 0);
15daa639
UD
4076#endif
4077 TEST_f_f (exp, nan_value, nan_value);
8847214f
UD
4078 TEST_f_f (exp, 1, M_El);
4079
4080 TEST_f_f (exp, 2, M_E2l);
4081 TEST_f_f (exp, 3, M_E3l);
2550dfe9 4082 TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
4c95adde 4083 TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
a7eb802f 4084 TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
8fb0af98
UD
4085#if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
4086 /* The result can only be represented in sane long double. */
4c95adde
AJ
4087 TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
4088#endif
2550dfe9 4089
41498f4d
JM
4090#if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
4091 TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
7a25eb06 4092 TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
41498f4d
JM
4093#endif
4094 TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
4095 TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 4096 TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
41bf21a1 4097
8847214f
UD
4098 END (exp);
4099}
4100
4101
28afd92d
JM
4102static void
4103exp_test_tonearest (void)
4104{
4105 int save_round_mode;
4106 errno = 0;
4107 FUNC(exp) (0);
4108 if (errno == ENOSYS)
4109 /* Function not implemented. */
4110 return;
4111
4112 START (exp_tonearest);
4113
4114 save_round_mode = fegetround ();
4115
4116 if (!fesetround (FE_TONEAREST))
4117 {
4118 TEST_f_f (exp, 1, M_El);
4119 TEST_f_f (exp, 2, M_E2l);
4120 TEST_f_f (exp, 3, M_E3l);
4121 }
4122
4123 fesetround (save_round_mode);
4124
4125 END (exp_tonearest);
4126}
4127
4128
4129static void
4130exp_test_towardzero (void)
4131{
4132 int save_round_mode;
4133 errno = 0;
4134 FUNC(exp) (0);
4135 if (errno == ENOSYS)
4136 /* Function not implemented. */
4137 return;
4138
4139 START (exp_towardzero);
4140
4141 save_round_mode = fegetround ();
4142
4143 if (!fesetround (FE_TOWARDZERO))
4144 {
4145 TEST_f_f (exp, 1, M_El);
4146 TEST_f_f (exp, 2, M_E2l);
4147 TEST_f_f (exp, 3, M_E3l);
4148 }
4149
4150 fesetround (save_round_mode);
4151
4152 END (exp_towardzero);
4153}
4154
4155
4156static void
4157exp_test_downward (void)
4158{
4159 int save_round_mode;
4160 errno = 0;
4161 FUNC(exp) (0);
4162 if (errno == ENOSYS)
4163 /* Function not implemented. */
4164 return;
4165
4166 START (exp_downward);
4167
4168 save_round_mode = fegetround ();
4169
4170 if (!fesetround (FE_DOWNWARD))
4171 {
4172 TEST_f_f (exp, 1, M_El);
4173 TEST_f_f (exp, 2, M_E2l);
4174 TEST_f_f (exp, 3, M_E3l);
4175 }
4176
4177 fesetround (save_round_mode);
4178
4179 END (exp_downward);
4180}
4181
4182
4183static void
4184exp_test_upward (void)
4185{
4186 int save_round_mode;
4187 errno = 0;
4188 FUNC(exp) (0);
4189 if (errno == ENOSYS)
4190 /* Function not implemented. */
4191 return;
4192
4193 START (exp_upward);
4194
4195 save_round_mode = fegetround ();
4196
4197 if (!fesetround (FE_UPWARD))
4198 {
4199 TEST_f_f (exp, 1, M_El);
4200 TEST_f_f (exp, 2, M_E2l);
4201 TEST_f_f (exp, 3, M_E3l);
4202 }
4203
4204 fesetround (save_round_mode);
4205
4206 END (exp_upward);
4207}
4208
4209
8847214f
UD
4210static void
4211exp10_test (void)
4212{
4213 errno = 0;
4214 FUNC(exp10) (0);
4215 if (errno == ENOSYS)
4216 /* Function not implemented. */
4217 return;
4218
4219 START (exp10);
4220
4221 TEST_f_f (exp10, 0, 1);
4222 TEST_f_f (exp10, minus_zero, 1);
4223
4224 TEST_f_f (exp10, plus_infty, plus_infty);
4225 TEST_f_f (exp10, minus_infty, 0);
15daa639 4226 TEST_f_f (exp10, nan_value, nan_value);
8847214f 4227 TEST_f_f (exp10, 3, 1000);
42be70d4 4228 TEST_f_f (exp10, -1, 0.1L);
9568c0c2 4229 TEST_f_f (exp10, 36, 1.0e36L);
d8b82cad
JM
4230 TEST_f_f (exp10, -36, 1.0e-36L);
4231#ifndef TEST_FLOAT
4232 TEST_f_f (exp10, 305, 1.0e305L);
80bad0cc 4233 TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
d8b82cad
JM
4234#endif
4235#if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
4236 TEST_f_f (exp10, 4932, 1.0e4932L);
80bad0cc 4237 TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
9568c0c2 4238#endif
c135cc1b 4239 TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 4240 TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
41bf21a1 4241 TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 4242 TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
2550dfe9 4243 TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
8847214f
UD
4244
4245 END (exp10);
4246}
4247
2550dfe9 4248
8847214f
UD
4249static void
4250exp2_test (void)
4251{
4252 errno = 0;
4253 FUNC(exp2) (0);
4254 if (errno == ENOSYS)
4255 /* Function not implemented. */
4256 return;
4257
4258 START (exp2);
4259
4260 TEST_f_f (exp2, 0, 1);
4261 TEST_f_f (exp2, minus_zero, 1);
4262 TEST_f_f (exp2, plus_infty, plus_infty);
4263 TEST_f_f (exp2, minus_infty, 0);
15daa639
UD
4264 TEST_f_f (exp2, nan_value, nan_value);
4265
8847214f
UD
4266 TEST_f_f (exp2, 10, 1024);
4267 TEST_f_f (exp2, -1, 0.5);
0cb7efc5 4268 TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 4269 TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
41bf21a1 4270 TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 4271 TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
2550dfe9 4272 TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
8847214f 4273
48e44791
JM
4274 TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
4275 TEST_f_f (exp2, 127, 0x1p127);
4276 TEST_f_f (exp2, -149, 0x1p-149);
4277
4278#ifndef TEST_FLOAT
4279 TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
4280 TEST_f_f (exp2, 1023, 0x1p1023);
4281 TEST_f_f (exp2, -1074, 0x1p-1074);
4282#endif
4283
4284#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4285 TEST_f_f (exp2, 16383, 0x1p16383L);
4286 TEST_f_f (exp2, -16400, 0x1p-16400L);
4287#endif
4288
8847214f
UD
4289 END (exp2);
4290}
4291
2550dfe9 4292
8847214f
UD
4293static void
4294expm1_test (void)
4295{
e6d3c4a7
AJ
4296 errno = 0;
4297 FUNC(expm1) (0);
4298 if (errno == ENOSYS)
4299 /* Function not implemented. */
4300 return;
4301
8847214f
UD
4302 START (expm1);
4303
4304 TEST_f_f (expm1, 0, 0);
4305 TEST_f_f (expm1, minus_zero, minus_zero);
4306
15daa639 4307#ifndef TEST_INLINE
8847214f
UD
4308 TEST_f_f (expm1, plus_infty, plus_infty);
4309 TEST_f_f (expm1, minus_infty, -1);
15daa639
UD
4310#endif
4311 TEST_f_f (expm1, nan_value, nan_value);
8847214f
UD
4312
4313 TEST_f_f (expm1, 1, M_El - 1.0);
2550dfe9 4314 TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
8847214f 4315
495fd99f
JM
4316 TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
4317
4318#ifndef TEST_FLOAT
4319 TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
4320 TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
4321#endif
4322
0fcad3e2
JM
4323#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4324 TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
4325#endif
4326
f17ac40d
JM
4327 TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
4328 TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
4329 TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
4330 TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
4331 TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
4332 TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
4333 TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
4334 TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
4335 TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
4336 TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
4337 TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
4338 TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
4339 TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
4340 TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
4341 TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
4342 TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
4343 TEST_f_f (expm1, -100.0, -1.0);
4344 TEST_f_f (expm1, -1000.0, -1.0);
4345 TEST_f_f (expm1, -10000.0, -1.0);
4346 TEST_f_f (expm1, -100000.0, -1.0);
4347
bbc5d74d 4348 errno = 0;
41498f4d 4349 TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION);
bbc5d74d 4350 check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
41498f4d 4351 TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
f17ac40d 4352 TEST_f_f (expm1, -max_value, -1);
bbc5d74d 4353
8847214f
UD
4354 END (expm1);
4355}
4356
2550dfe9 4357
8847214f
UD
4358static void
4359fabs_test (void)
4360{
4361 START (fabs);
4362
4363 TEST_f_f (fabs, 0, 0);
4364 TEST_f_f (fabs, minus_zero, 0);
4365
4366 TEST_f_f (fabs, plus_infty, plus_infty);
4367 TEST_f_f (fabs, minus_infty, plus_infty);
15daa639 4368 TEST_f_f (fabs, nan_value, nan_value);
8847214f
UD
4369
4370 TEST_f_f (fabs, 38.0, 38.0);
4371 TEST_f_f (fabs, -M_El, M_El);
4372
4373 END (fabs);
4374}
4375
2550dfe9 4376
8847214f
UD
4377static void
4378fdim_test (void)
4379{
4380 START (fdim);
4381
4382 TEST_ff_f (fdim, 0, 0, 0);
4383 TEST_ff_f (fdim, 9, 0, 9);
4384 TEST_ff_f (fdim, 0, 9, 0);
4385 TEST_ff_f (fdim, -9, 0, 0);
4386 TEST_ff_f (fdim, 0, -9, 9);
4387
4388 TEST_ff_f (fdim, plus_infty, 9, plus_infty);
4389 TEST_ff_f (fdim, plus_infty, -9, plus_infty);
4390 TEST_ff_f (fdim, minus_infty, 9, 0);
4391 TEST_ff_f (fdim, minus_infty, -9, 0);
4392 TEST_ff_f (fdim, 9, minus_infty, plus_infty);
4393 TEST_ff_f (fdim, -9, minus_infty, plus_infty);
4394 TEST_ff_f (fdim, 9, plus_infty, 0);
4395 TEST_ff_f (fdim, -9, plus_infty, 0);
4396
4397 TEST_ff_f (fdim, 0, nan_value, nan_value);
4398 TEST_ff_f (fdim, 9, nan_value, nan_value);
4399 TEST_ff_f (fdim, -9, nan_value, nan_value);
4400 TEST_ff_f (fdim, nan_value, 9, nan_value);
4401 TEST_ff_f (fdim, nan_value, -9, nan_value);
4402 TEST_ff_f (fdim, plus_infty, nan_value, nan_value);
4403 TEST_ff_f (fdim, minus_infty, nan_value, nan_value);
4404 TEST_ff_f (fdim, nan_value, plus_infty, nan_value);
4405 TEST_ff_f (fdim, nan_value, minus_infty, nan_value);
4406 TEST_ff_f (fdim, nan_value, nan_value, nan_value);
4407
6497a1d0
UD
4408 TEST_ff_f (fdim, plus_infty, plus_infty, 0);
4409
8847214f
UD
4410 END (fdim);
4411}
4412
2550dfe9 4413
ef1bb361
JM
4414static void
4415finite_test (void)
4416{
4417 START (finite);
4418
4419 TEST_f_b (finite, 0, 1);
4420 TEST_f_b (finite, minus_zero, 1);
4421 TEST_f_b (finite, 10, 1);
4422 TEST_f_b (finite, min_subnorm_value, 1);
4423 TEST_f_b (finite, plus_infty, 0);
4424 TEST_f_b (finite, minus_infty, 0);
4425 TEST_f_b (finite, nan_value, 0);
4426
4427 END (finite);
4428}
4429
4430
8847214f
UD
4431static void
4432floor_test (void)
4433{
4434 START (floor);
4435
4436 TEST_f_f (floor, 0.0, 0.0);
4437 TEST_f_f (floor, minus_zero, minus_zero);
4438 TEST_f_f (floor, plus_infty, plus_infty);
4439 TEST_f_f (floor, minus_infty, minus_infty);
15daa639 4440 TEST_f_f (floor, nan_value, nan_value);
8847214f
UD
4441
4442 TEST_f_f (floor, M_PIl, 3.0);
4443 TEST_f_f (floor, -M_PIl, -4.0);
4444
5c68d401 4445 TEST_f_f (floor, 0.1, 0.0);
97fd3a30 4446 TEST_f_f (floor, 0.25, 0.0);
5c68d401
RM
4447 TEST_f_f (floor, 0.625, 0.0);
4448 TEST_f_f (floor, -0.1, -1.0);
97fd3a30 4449 TEST_f_f (floor, -0.25, -1.0);
5c68d401 4450 TEST_f_f (floor, -0.625, -1.0);
f964490f
RM
4451
4452#ifdef TEST_LDOUBLE
4453 /* The result can only be represented in long double. */
4454 TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
4455 TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
4456 TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
4457 TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
4458 TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
5c68d401
RM
4459# if LDBL_MANT_DIG > 100
4460 TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
4461 TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
4462 TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
4463# endif
f964490f
RM
4464
4465 TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
4466 TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
4467 TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
4468 TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
4469 TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
5c68d401
RM
4470# if LDBL_MANT_DIG > 100
4471 TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
4472 TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
4473 TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
4474# endif
f964490f
RM
4475
4476 TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
4477 TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
4478 TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
4479 TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
4480 TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
4481
5c68d401
RM
4482# if LDBL_MANT_DIG > 100
4483 TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
4484 TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
4485 TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
4486 TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
4487 TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
4488 TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
4489# endif
4490
f964490f
RM
4491 TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
4492 TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
4493 TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
4494 TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
4495 TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
4496
5c68d401
RM
4497# if LDBL_MANT_DIG > 100
4498 TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
4499 TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
4500 TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
4501 TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
4502 TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
4503 TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
4504# endif
4505
f964490f
RM
4506 TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
4507 TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
4508 TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
4509 TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
4510 TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
4511
4512 TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
4513 TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
4514 TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
4515 TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
4516 TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
4517
4518 TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
4519 TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
4520 TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
4521 TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
4522 TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
94e02fc4
AZ
4523
4524 TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
4525 TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
f964490f
RM
4526#endif
4527
8847214f
UD
4528 END (floor);
4529}
4530
2550dfe9 4531
8847214f
UD
4532static void
4533fma_test (void)
4534{
4535 START (fma);
4536
4537 TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
4538 TEST_fff_f (fma, nan_value, 2.0, 3.0, nan_value);
4539 TEST_fff_f (fma, 1.0, nan_value, 3.0, nan_value);
4540 TEST_fff_f (fma, 1.0, 2.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
4541 TEST_fff_f (fma, plus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
4542 TEST_fff_f (fma, minus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
4543 TEST_fff_f (fma, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
4544 TEST_fff_f (fma, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
4545 TEST_fff_f (fma, plus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
4546 TEST_fff_f (fma, minus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
4547 TEST_fff_f (fma, 0.0, plus_infty, 1.0, nan_value, INVALID_EXCEPTION);
4548 TEST_fff_f (fma, 0.0, minus_infty, 1.0, nan_value, INVALID_EXCEPTION);
4549
4550 TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
4551 TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
4552 TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
4553 TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3e692e05
JJ
4554 TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, nan_value, INVALID_EXCEPTION);
4555 TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, nan_value, INVALID_EXCEPTION);
4556 TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
4557 TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, nan_value, INVALID_EXCEPTION);
8847214f 4558
2550dfe9 4559 TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
3e692e05
JJ
4560
4561 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
4562 LDBL_MAX, DBL_MAX, FLT_MAX);
4563 TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
4564 TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
4565 TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
4566 TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
4567 TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
4568 TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
4569 TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
4570 TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
4571
8ec5b013
JM
4572 TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
4573 TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
4574 TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
4575 TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
4576 TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
4577 TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
4578 TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
4579 TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
4580 TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
4581 TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
4582 TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
4583 TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
4584 TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
4585 TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
4586 TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
4587 TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
4588 TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
4589 TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
4590 TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
4591 TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
4592 TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
4593 TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
4594 TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
4595 TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
4596
4597 TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
4598 TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
4599 TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
4600 TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
4601
bec749fd
JM
4602 TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4603 TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4604 TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4605 TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4606 TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4607 TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4608 TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4609 TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4610
5e908464 4611#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
9ff8d36f
JJ
4612 TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
4613 TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
5e908464
JJ
4614 TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
4615 TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
4616 TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
4617 TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
4618 TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
8627a232
JM
4619 TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
4620 TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
5e908464
JJ
4621#endif
4622#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
4623 TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
4624 TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
4625 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
4626 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
4627 TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
4628 TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
4629 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
4630 TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
4631 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
80bad0cc
JM
4632 TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
4633 TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
4634 TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
4635 TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
4636 TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
4637 TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
4638 TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
4639 TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
8627a232 4640 TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
80bad0cc 4641 TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
3e692e05 4642 TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
8627a232
JM
4643 TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
4644 TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
3e692e05
JJ
4645#endif
4646#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
4647 TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
4648 TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
4649 TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
4650 TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
4651 TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
8627a232
JM
4652 TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
4653 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
4654 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
9ff8d36f 4655#endif
7c08a05c
JJ
4656#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
4657 TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
80bad0cc
JM
4658 TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
4659 TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
7c08a05c
JJ
4660 TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
4661 TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
4662 TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
4663 TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
4664 TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
4665 TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
4666 TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
4667 TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
4668 TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
4669 TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
8627a232
JM
4670 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
4671 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7c08a05c 4672#endif
2550dfe9 4673
8847214f
UD
4674 END (fma);
4675}
4676
4677
8ec5b013
JM
4678static void
4679fma_test_towardzero (void)
4680{
4681 int save_round_mode;
4682 START (fma_towardzero);
4683
4684 save_round_mode = fegetround ();
4685
4686 if (!fesetround (FE_TOWARDZERO))
4687 {
4688 TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
4689 TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
4690 TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
4691 TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
4692 TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
4693 TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
4694 TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
4695 TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
4696 TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
4697 TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
4698 TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
4699 TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
4700 TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
4701 TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
4702 TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
4703 TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
4704 TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
4705 TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
4706 TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
4707 TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
4708 TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
4709 TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
4710 TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
4711 TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
4712
4713 TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
4714 TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
4715 TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
4716 TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
bec749fd
JM
4717
4718 TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4719 TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4720 TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4721 TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4722 TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4723 TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4724 TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4725 TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8627a232
JM
4726
4727#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
4728 TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
4729 TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
4730#endif
4731#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
4732 TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
4733 TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
4734#endif
4735#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
4736 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
4737 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
4738#endif
4739#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
4740 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
4741 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
4742#endif
8ec5b013
JM
4743 }
4744
4745 fesetround (save_round_mode);
4746
4747 END (fma_towardzero);
4748}
4749
4750
4751static void
4752fma_test_downward (void)
4753{
4754 int save_round_mode;
4755 START (fma_downward);
4756
4757 save_round_mode = fegetround ();
4758
4759 if (!fesetround (FE_DOWNWARD))
4760 {
4761 TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
4762 TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
4763 TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
4764 TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
4765 TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
4766 TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
4767 TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
4768 TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
4769 TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
4770 TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
4771 TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
4772 TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
4773 TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
4774 TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
4775 TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
4776 TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
4777 TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
4778 TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
4779 TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
4780 TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
4781 TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
4782 TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
4783 TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
4784 TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
4785
4786 TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
4787 TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
4788 TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
4789 TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
bec749fd
JM
4790
4791 TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4792 TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4793 TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4794 TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4795 TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4796 TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4797 TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
4798 TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8627a232
JM
4799
4800#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
4801 TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
4802 TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
4803#endif
4804#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
4805 TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
4806 TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
4807#endif
4808#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
4809 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
4810 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
4811#endif
4812#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
4813 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
4814 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
4815#endif
8ec5b013
JM
4816 }
4817
4818 fesetround (save_round_mode);
4819
4820 END (fma_downward);
4821}
4822
4823
4824static void
4825fma_test_upward (void)
4826{
4827 int save_round_mode;
4828 START (fma_upward);
4829
4830 save_round_mode = fegetround ();
4831
4832 if (!fesetround (FE_UPWARD))
4833 {
4834 TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
4835 TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
4836 TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
4837 TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
4838 TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
4839 TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
4840 TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
4841 TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
4842 TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
4843 TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
4844 TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
4845 TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
4846 TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
4847 TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
4848 TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
4849 TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
4850 TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
4851 TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
4852 TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
4853 TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
4854 TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
4855 TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
4856 TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
4857 TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
4858
4859 TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
4860 TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
4861 TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
4862 TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
bec749fd
JM
4863
4864 TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
4865 TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
4866 TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4867 TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4868 TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4869 TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
4870 TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
4871 TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8627a232
JM
4872
4873#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
4874 TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
4875 TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
4876#endif
4877#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
4878 TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
4879 TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
4880#endif
4881#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
4882 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
4883 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
4884#endif
4885#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
4886 TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
4887 TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
4888#endif
8ec5b013
JM
4889 }
4890
4891 fesetround (save_round_mode);
4892
4893 END (fma_upward);
4894}
4895
4896
8847214f
UD
4897static void
4898fmax_test (void)
4899{
4900 START (fmax);
4901
4902 TEST_ff_f (fmax, 0, 0, 0);
4903 TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
4904 TEST_ff_f (fmax, 9, 0, 9);
4905 TEST_ff_f (fmax, 0, 9, 9);
4906 TEST_ff_f (fmax, -9, 0, 0);
4907 TEST_ff_f (fmax, 0, -9, 0);
4908
4909 TEST_ff_f (fmax, plus_infty, 9, plus_infty);
4910 TEST_ff_f (fmax, 0, plus_infty, plus_infty);
4911 TEST_ff_f (fmax, -9, plus_infty, plus_infty);
4912 TEST_ff_f (fmax, plus_infty, -9, plus_infty);
4913
4914 TEST_ff_f (fmax, minus_infty, 9, 9);
4915 TEST_ff_f (fmax, minus_infty, -9, -9);
4916 TEST_ff_f (fmax, 9, minus_infty, 9);
4917 TEST_ff_f (fmax, -9, minus_infty, -9);
4918
4919 TEST_ff_f (fmax, 0, nan_value, 0);
4920 TEST_ff_f (fmax, 9, nan_value, 9);
4921 TEST_ff_f (fmax, -9, nan_value, -9);
4922 TEST_ff_f (fmax, nan_value, 0, 0);
4923 TEST_ff_f (fmax, nan_value, 9, 9);
4924 TEST_ff_f (fmax, nan_value, -9, -9);
4925 TEST_ff_f (fmax, plus_infty, nan_value, plus_infty);
4926 TEST_ff_f (fmax, minus_infty, nan_value, minus_infty);
4927 TEST_ff_f (fmax, nan_value, plus_infty, plus_infty);
4928 TEST_ff_f (fmax, nan_value, minus_infty, minus_infty);
4929 TEST_ff_f (fmax, nan_value, nan_value, nan_value);
4930
4931 END (fmax);
4932}
4933
4934
4935static void
4936fmin_test (void)
4937{
4938 START (fmin);
4939
4940 TEST_ff_f (fmin, 0, 0, 0);
4941 TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
4942 TEST_ff_f (fmin, 9, 0, 0);
4943 TEST_ff_f (fmin, 0, 9, 0);
4944 TEST_ff_f (fmin, -9, 0, -9);
4945 TEST_ff_f (fmin, 0, -9, -9);
4946
4947 TEST_ff_f (fmin, plus_infty, 9, 9);
4948 TEST_ff_f (fmin, 9, plus_infty, 9);
4949 TEST_ff_f (fmin, plus_infty, -9, -9);
4950 TEST_ff_f (fmin, -9, plus_infty, -9);
4951 TEST_ff_f (fmin, minus_infty, 9, minus_infty);
4952 TEST_ff_f (fmin, minus_infty, -9, minus_infty);
4953 TEST_ff_f (fmin, 9, minus_infty, minus_infty);
4954 TEST_ff_f (fmin, -9, minus_infty, minus_infty);
4955
4956 TEST_ff_f (fmin, 0, nan_value, 0);
4957 TEST_ff_f (fmin, 9, nan_value, 9);
4958 TEST_ff_f (fmin, -9, nan_value, -9);
4959 TEST_ff_f (fmin, nan_value, 0, 0);
4960 TEST_ff_f (fmin, nan_value, 9, 9);
4961 TEST_ff_f (fmin, nan_value, -9, -9);
4962 TEST_ff_f (fmin, plus_infty, nan_value, plus_infty);
4963 TEST_ff_f (fmin, minus_infty, nan_value, minus_infty);
4964 TEST_ff_f (fmin, nan_value, plus_infty, plus_infty);
4965 TEST_ff_f (fmin, nan_value, minus_infty, minus_infty);
4966 TEST_ff_f (fmin, nan_value, nan_value, nan_value);
4967
4968 END (fmin);
4969}
4970
4971
4972static void
4973fmod_test (void)
4974{
aaca11d8 4975 errno = 0;
3c6cad26 4976 FUNC(fmod) (6.5, 2.3L);
aaca11d8
UD
4977 if (errno == ENOSYS)
4978 /* Function not implemented. */
4979 return;
4980
8847214f
UD
4981 START (fmod);
4982
4983 /* fmod (+0, y) == +0 for y != 0. */
4984 TEST_ff_f (fmod, 0, 3, 0);
4985
4986 /* fmod (-0, y) == -0 for y != 0. */
4987 TEST_ff_f (fmod, minus_zero, 3, minus_zero);
4988
4989 /* fmod (+inf, y) == NaN plus invalid exception. */
7095366d 4990 errno = 0;
8847214f 4991 TEST_ff_f (fmod, plus_infty, 3, nan_value, INVALID_EXCEPTION);
7095366d 4992 check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8847214f 4993 /* fmod (-inf, y) == NaN plus invalid exception. */
7095366d 4994 errno = 0;
8847214f 4995 TEST_ff_f (fmod, minus_infty, 3, nan_value, INVALID_EXCEPTION);
7095366d 4996 check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8847214f 4997 /* fmod (x, +0) == NaN plus invalid exception. */
7095366d 4998 errno = 0;
8847214f 4999 TEST_ff_f (fmod, 3, 0, nan_value, INVALID_EXCEPTION);
7095366d 5000 check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
8847214f
UD
5001 /* fmod (x, -0) == NaN plus invalid exception. */
5002 TEST_ff_f (fmod, 3, minus_zero, nan_value, INVALID_EXCEPTION);
5003
5004 /* fmod (x, +inf) == x for x not infinite. */
5005 TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
5006 /* fmod (x, -inf) == x for x not infinite. */
5007 TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
5008
15daa639
UD
5009 TEST_ff_f (fmod, nan_value, nan_value, nan_value);
5010
2550dfe9
AJ
5011 TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
5012 TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
5013 TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
5014 TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
8847214f 5015
c5bfe3d5
JM
5016 TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
5017#ifndef TEST_FLOAT
5018 TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
5019#endif
5020#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5021 TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
5022#endif
5023
8847214f
UD
5024 END (fmod);
5025}
5026
2550dfe9 5027
8847214f
UD
5028static void
5029fpclassify_test (void)
5030{
5031 START (fpclassify);
5032
5033 TEST_f_i (fpclassify, nan_value, FP_NAN);
5034 TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
5035 TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
5036 TEST_f_i (fpclassify, plus_zero, FP_ZERO);
5037 TEST_f_i (fpclassify, minus_zero, FP_ZERO);
5038 TEST_f_i (fpclassify, 1000, FP_NORMAL);
ef1bb361 5039 TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
8847214f
UD
5040
5041 END (fpclassify);
5042}
5043
5044
5045static void
5046frexp_test (void)
5047{
5048 int x;
5049
5050 START (frexp);
5051
5052 TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
5053 TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
5054 TEST_fI_f1 (frexp, nan_value, nan_value, IGNORE);
5055
5056 TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
5057 TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
5058
b15cb495
UD
5059 TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
5060 TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
8847214f
UD
5061
5062 END (frexp);
5063}
5064
5065
5066static void
5067gamma_test (void)
5068{
5069 errno = 0;
5070 FUNC(gamma) (1);
5071
5072 if (errno == ENOSYS)
5073 /* Function not implemented. */
5074 return;
8847214f
UD
5075
5076 START (gamma);
5077
5078 TEST_f_f (gamma, plus_infty, plus_infty);
5079 TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5080 TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
f30e0cd3 5081 TEST_f_f (gamma, minus_infty, plus_infty);
15daa639 5082 TEST_f_f (gamma, nan_value, nan_value);
8847214f
UD
5083
5084 TEST_f_f1 (gamma, 1, 0, 1);
5085 TEST_f_f1 (gamma, 3, M_LN2l, 1);
5086
5087 TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
f30e0cd3 5088 TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
8847214f
UD
5089
5090 END (gamma);
5091}
5092
5093static void
5094hypot_test (void)
5095{
aaca11d8 5096 errno = 0;
3c6cad26 5097 FUNC(hypot) (0.7L, 12.4L);
aaca11d8
UD
5098 if (errno == ENOSYS)
5099 /* Function not implemented. */
5100 return;
5101
8847214f
UD
5102 START (hypot);
5103
5104 TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
5105 TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
5106
15daa639 5107#ifndef TEST_INLINE
8847214f
UD
5108 TEST_ff_f (hypot, plus_infty, nan_value, plus_infty);
5109 TEST_ff_f (hypot, minus_infty, nan_value, plus_infty);
5110 TEST_ff_f (hypot, nan_value, plus_infty, plus_infty);
5111 TEST_ff_f (hypot, nan_value, minus_infty, plus_infty);
15daa639 5112#endif
8847214f
UD
5113
5114 TEST_ff_f (hypot, nan_value, nan_value, nan_value);
5115
5116 /* hypot (x,y) == hypot (+-x, +-y) */
d8337213
UD
5117 TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
5118 TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
5119 TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
5120 TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
5121 TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
5122 TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
5123 TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
5124 TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
8847214f
UD
5125
5126 /* hypot (x,0) == fabs (x) */
2550dfe9
AJ
5127 TEST_ff_f (hypot, 0.75L, 0, 0.75L);
5128 TEST_ff_f (hypot, -0.75L, 0, 0.75L);
3c6cad26 5129 TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
8847214f 5130
2550dfe9 5131 TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
8847214f 5132
aa4a2ae1
JM
5133#if !(defined TEST_FLOAT && defined TEST_INLINE)
5134 TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
5135 TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
5136#endif
5137
5779f134 5138#if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
aa4a2ae1
JM
5139 TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
5140#endif
5141
5142#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
5143 TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
5144#endif
5145
8847214f
UD
5146 END (hypot);
5147}
5148
5149
5150static void
5151ilogb_test (void)
5152{
5153 START (ilogb);
5154
5155 TEST_f_i (ilogb, 1, 0);
5156 TEST_f_i (ilogb, M_El, 1);
5157 TEST_f_i (ilogb, 1024, 10);
5158 TEST_f_i (ilogb, -2000, 10);
5159
76da7265
AZ
5160 /* ilogb (0.0) == FP_ILOGB0 plus invalid exception */
5161 errno = 0;
5162 TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION);
5163 check_int ("errno for ilogb(0.0) unchanged", errno, EDOM, 0, 0, 0);
5164 /* ilogb (NaN) == FP_ILOGBNAN plus invalid exception */
5165 errno = 0;
5166 TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, INVALID_EXCEPTION);
5167 check_int ("errno for ilogb(NaN) unchanged", errno, EDOM, 0, 0, 0);
5168 /* ilogb (inf) == INT_MAX plus invalid exception */
5169 errno = 0;
5170 TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION);
5171 check_int ("errno for ilogb(Inf) unchanged", errno, EDOM, 0, 0, 0);
5172 /* ilogb (-inf) == INT_MAX plus invalid exception */
5173 errno = 0;
5174 TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION);
5175 check_int ("errno for ilogb(-Inf) unchanged", errno, EDOM, 0, 0, 0);
8847214f
UD
5176
5177 END (ilogb);
5178}
5179
5180static void
5181isfinite_test (void)
5182{
5183 START (isfinite);
5184
5185 TEST_f_b (isfinite, 0, 1);
5186 TEST_f_b (isfinite, minus_zero, 1);
5187 TEST_f_b (isfinite, 10, 1);
ef1bb361 5188 TEST_f_b (isfinite, min_subnorm_value, 1);
8847214f
UD
5189 TEST_f_b (isfinite, plus_infty, 0);
5190 TEST_f_b (isfinite, minus_infty, 0);
5191 TEST_f_b (isfinite, nan_value, 0);
5192
5193 END (isfinite);
5194}
5195
0e8e0c1c
JM
5196static void
5197isgreater_test (void)
5198{
5199 START (isgreater);
5200
5201 TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
5202 TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
5203 TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
5204 TEST_ff_i (isgreater, minus_zero, nan_value, 0);
5205 TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
5206 TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
5207 TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
5208 TEST_ff_i (isgreater, plus_zero, nan_value, 0);
5209 TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
5210 TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
5211 TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
5212 TEST_ff_i (isgreater, (FLOAT) 1, nan_value, 0);
5213 TEST_ff_i (isgreater, nan_value, minus_zero, 0);
5214 TEST_ff_i (isgreater, nan_value, plus_zero, 0);
5215 TEST_ff_i (isgreater, nan_value, (FLOAT) 1, 0);
5216 TEST_ff_i (isgreater, nan_value, nan_value, 0);
5217
5218 END (isgreater);
5219}
5220
5221static void
5222isgreaterequal_test (void)
5223{
5224 START (isgreaterequal);
5225
5226 TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
5227 TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
5228 TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
5229 TEST_ff_i (isgreaterequal, minus_zero, nan_value, 0);
5230 TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
5231 TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
5232 TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
5233 TEST_ff_i (isgreaterequal, plus_zero, nan_value, 0);
5234 TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
5235 TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
5236 TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
5237 TEST_ff_i (isgreaterequal, (FLOAT) 1, nan_value, 0);
5238 TEST_ff_i (isgreaterequal, nan_value, minus_zero, 0);
5239 TEST_ff_i (isgreaterequal, nan_value, plus_zero, 0);
5240 TEST_ff_i (isgreaterequal, nan_value, (FLOAT) 1, 0);
5241 TEST_ff_i (isgreaterequal, nan_value, nan_value, 0);
5242
5243 END (isgreaterequal);
5244}
5245
ef1bb361
JM
5246static void
5247isinf_test (void)
5248{
5249 START (isinf);
5250
5251 TEST_f_b (isinf, 0, 0);
5252 TEST_f_b (isinf, minus_zero, 0);
5253 TEST_f_b (isinf, 10, 0);
5254 TEST_f_b (isinf, min_subnorm_value, 0);
5255 TEST_f_b (isinf, plus_infty, 1);
5256 TEST_f_b (isinf, minus_infty, 1);
5257 TEST_f_b (isinf, nan_value, 0);
5258
5259 END (isinf);
5260}
5261
0e8e0c1c
JM
5262static void
5263isless_test (void)
5264{
5265 START (isless);
5266
5267 TEST_ff_i (isless, minus_zero, minus_zero, 0);
5268 TEST_ff_i (isless, minus_zero, plus_zero, 0);
5269 TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
5270 TEST_ff_i (isless, minus_zero, nan_value, 0);
5271 TEST_ff_i (isless, plus_zero, minus_zero, 0);
5272 TEST_ff_i (isless, plus_zero, plus_zero, 0);
5273 TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
5274 TEST_ff_i (isless, plus_zero, nan_value, 0);
5275 TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
5276 TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
5277 TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
5278 TEST_ff_i (isless, (FLOAT) 1, nan_value, 0);
5279 TEST_ff_i (isless, nan_value, minus_zero, 0);
5280 TEST_ff_i (isless, nan_value, plus_zero, 0);
5281 TEST_ff_i (isless, nan_value, (FLOAT) 1, 0);
5282 TEST_ff_i (isless, nan_value, nan_value, 0);
5283
5284 END (isless);
5285}
5286
5287static void
5288islessequal_test (void)
5289{
5290 START (islessequal);
5291
5292 TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
5293 TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
5294 TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
5295 TEST_ff_i (islessequal, minus_zero, nan_value, 0);
5296 TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
5297 TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
5298 TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
5299 TEST_ff_i (islessequal, plus_zero, nan_value, 0);
5300 TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
5301 TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
5302 TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
5303 TEST_ff_i (islessequal, (FLOAT) 1, nan_value, 0);
5304 TEST_ff_i (islessequal, nan_value, minus_zero, 0);
5305 TEST_ff_i (islessequal, nan_value, plus_zero, 0);
5306 TEST_ff_i (islessequal, nan_value, (FLOAT) 1, 0);
5307 TEST_ff_i (islessequal, nan_value, nan_value, 0);
5308
5309 END (islessequal);
5310}
5311
5312static void
5313islessgreater_test (void)
5314{
5315 START (islessgreater);
5316
5317 TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
5318 TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
5319 TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
5320 TEST_ff_i (islessgreater, minus_zero, nan_value, 0);
5321 TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
5322 TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
5323 TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
5324 TEST_ff_i (islessgreater, plus_zero, nan_value, 0);
5325 TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
5326 TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
5327 TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
5328 TEST_ff_i (islessgreater, (FLOAT) 1, nan_value, 0);
5329 TEST_ff_i (islessgreater, nan_value, minus_zero, 0);
5330 TEST_ff_i (islessgreater, nan_value, plus_zero, 0);
5331 TEST_ff_i (islessgreater, nan_value, (FLOAT) 1, 0);
5332 TEST_ff_i (islessgreater, nan_value, nan_value, 0);
5333
5334 END (islessgreater);
5335}
5336
ef1bb361
JM
5337static void
5338isnan_test (void)
5339{
5340 START (isnan);
5341
5342 TEST_f_b (isnan, 0, 0);
5343 TEST_f_b (isnan, minus_zero, 0);
5344 TEST_f_b (isnan, 10, 0);
5345 TEST_f_b (isnan, min_subnorm_value, 0);
5346 TEST_f_b (isnan, plus_infty, 0);
5347 TEST_f_b (isnan, minus_infty, 0);
5348 TEST_f_b (isnan, nan_value, 1);
5349
5350 END (isnan);
5351}
5352
8847214f
UD
5353static void
5354isnormal_test (void)
5355{
5356 START (isnormal);
5357
5358 TEST_f_b (isnormal, 0, 0);
5359 TEST_f_b (isnormal, minus_zero, 0);
5360 TEST_f_b (isnormal, 10, 1);
ef1bb361 5361 TEST_f_b (isnormal, min_subnorm_value, 0);
8847214f
UD
5362 TEST_f_b (isnormal, plus_infty, 0);
5363 TEST_f_b (isnormal, minus_infty, 0);
5364 TEST_f_b (isnormal, nan_value, 0);
5365
5366 END (isnormal);
5367}
5368
0e8e0c1c
JM
5369static void
5370isunordered_test (void)
5371{
5372 START (isunordered);
5373
5374 TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
5375 TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
5376 TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
5377 TEST_ff_i (isunordered, minus_zero, nan_value, 1);
5378 TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
5379 TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
5380 TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
5381 TEST_ff_i (isunordered, plus_zero, nan_value, 1);
5382 TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
5383 TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
5384 TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
5385 TEST_ff_i (isunordered, (FLOAT) 1, nan_value, 1);
5386 TEST_ff_i (isunordered, nan_value, minus_zero, 1);
5387 TEST_ff_i (isunordered, nan_value, plus_zero, 1);
5388 TEST_ff_i (isunordered, nan_value, (FLOAT) 1, 1);
5389 TEST_ff_i (isunordered, nan_value, nan_value, 1);
5390
5391 END (isunordered);
5392}
5393
8847214f
UD
5394static void
5395j0_test (void)
5396{
cd53c157 5397 FLOAT s, c;
8847214f 5398 errno = 0;
cd53c157
UD
5399 FUNC (sincos) (0, &s, &c);
5400 if (errno == ENOSYS)
5401 /* Required function not implemented. */
5402 return;
8847214f
UD
5403 FUNC(j0) (0);
5404 if (errno == ENOSYS)
5405 /* Function not implemented. */
5406 return;
5407
5408 START (j0);
5409
5410 /* j0 is the Bessel function of the first kind of order 0 */
5411 TEST_f_f (j0, nan_value, nan_value);
5412 TEST_f_f (j0, plus_infty, 0);
2550dfe9 5413 TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
8847214f 5414 TEST_f_f (j0, 0.0, 1.0);
2550dfe9
AJ
5415 TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
5416 TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
5417 TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
5418 TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
5419 TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
5420 TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
5421 TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
fa9ced58
AJ
5422 TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
5423 TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8847214f 5424
80bad0cc
JM
5425 /* Bug 14155: spurious exception may occur. */
5426 TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L, UNDERFLOW_EXCEPTION_OK);
c36e1d23
JM
5427
5428#ifndef TEST_FLOAT
75fa1921
JM
5429 /* Bug 14155: spurious exception may occur. */
5430 TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L, UNDERFLOW_EXCEPTION_OK);
c36e1d23
JM
5431#endif
5432
8847214f
UD
5433 END (j0);
5434}
5435
5436
5437static void
5438j1_test (void)
5439{
8a216c1b 5440 FLOAT s, c;
8847214f 5441 errno = 0;
cd53c157
UD
5442 FUNC (sincos) (0, &s, &c);
5443 if (errno == ENOSYS)
5444 /* Required function not implemented. */
5445 return;
8847214f
UD
5446 FUNC(j1) (0);
5447 if (errno == ENOSYS)
5448 /* Function not implemented. */
5449 return;
5450
5451 /* j1 is the Bessel function of the first kind of order 1 */
5452
5453 START (j1);
5454
5455 TEST_f_f (j1, nan_value, nan_value);
5456 TEST_f_f (j1, plus_infty, 0);
5457
2550dfe9 5458 TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
8847214f 5459 TEST_f_f (j1, 0.0, 0.0);
2550dfe9
AJ
5460 TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
5461 TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
5462 TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
5463 TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
5464 TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
5465 TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
5466 TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
8847214f 5467
c36e1d23
JM
5468 TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
5469
5470#ifndef TEST_FLOAT
75fa1921
JM
5471 /* Bug 14155: spurious exception may occur. */
5472 TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L, UNDERFLOW_EXCEPTION_OK);
c36e1d23
JM
5473#endif
5474
8847214f
UD
5475 END (j1);
5476}
5477
5478static void
5479jn_test (void)
5480{
8a216c1b 5481 FLOAT s, c;
8847214f 5482 errno = 0;
cd53c157
UD
5483 FUNC (sincos) (0, &s, &c);
5484 if (errno == ENOSYS)
5485 /* Required function not implemented. */
5486 return;
8847214f
UD
5487 FUNC(jn) (1, 1);
5488 if (errno == ENOSYS)
5489 /* Function not implemented. */
5490 return;
5491
5492 /* jn is the Bessel function of the first kind of order n. */
5493 START (jn);
5494
5495 /* jn (0, x) == j0 (x) */
5496 TEST_ff_f (jn, 0, nan_value, nan_value);
5497 TEST_ff_f (jn, 0, plus_infty, 0);
2550dfe9 5498 TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
8847214f 5499 TEST_ff_f (jn, 0, 0.0, 1.0);
2550dfe9
AJ
5500 TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
5501 TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
5502 TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
5503 TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
5504 TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
5505 TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
5506 TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
5507 TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
5508 TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8847214f
UD
5509
5510 /* jn (1, x) == j1 (x) */
5511 TEST_ff_f (jn, 1, nan_value, nan_value);
5512 TEST_ff_f (jn, 1, plus_infty, 0);
2550dfe9 5513 TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
8847214f 5514 TEST_ff_f (jn, 1, 0.0, 0.0);
2550dfe9
AJ
5515 TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
5516 TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
5517 TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
5518 TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
5519 TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
5520 TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
5521 TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
8847214f
UD
5522
5523 /* jn (3, x) */
5524 TEST_ff_f (jn, 3, nan_value, nan_value);
5525 TEST_ff_f (jn, 3, plus_infty, 0);
5526
2550dfe9 5527 TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
8847214f 5528 TEST_ff_f (jn, 3, 0.0, 0.0);
2550dfe9
AJ
5529 TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
5530 TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
5531 TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
5532 TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
5533 TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
8847214f
UD
5534
5535 /* jn (10, x) */
5536 TEST_ff_f (jn, 10, nan_value, nan_value);
5537 TEST_ff_f (jn, 10, plus_infty, 0);
5538
2550dfe9 5539 TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
8847214f 5540 TEST_ff_f (jn, 10, 0.0, 0.0);
2550dfe9
AJ
5541 TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
5542 TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
5543 TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
5544 TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
5545 TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
8847214f 5546
1248c1c4 5547 /* BZ #11589 .*/
cfdc0dd7
AS
5548 TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
5549 TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
5550 TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
5551 TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
5552 TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
5553 TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
5554 TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
c36e1d23
JM
5555 TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
5556
80bad0cc
JM
5557 /* Bug 14155: spurious exception may occur. */
5558 TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
1248c1c4 5559
8847214f
UD
5560 END (jn);
5561}
5562
5563
5564static void
5565ldexp_test (void)
5566{
5567 TEST_ff_f (ldexp, 0, 0, 0);
5568 TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
5569
5570 TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
5571 TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
5572 TEST_ff_f (ldexp, nan_value, 1, nan_value);
5573
5574 TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
5575 TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
5576
5577 /* ldexp (x, 0) == x. */
5578 TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
5579}
5580
2550dfe9 5581
8847214f
UD
5582static void
5583lgamma_test (void)
5584{
5585 errno = 0;
5586 FUNC(lgamma) (0);
5587 if (errno == ENOSYS)
5588 /* Function not implemented. */
5589 return;
8847214f
UD
5590
5591 START (lgamma);
5592
5593 TEST_f_f (lgamma, plus_infty, plus_infty);
5594 TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
c039eedd
UD
5595 check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
5596 TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5597 check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
15daa639 5598 TEST_f_f (lgamma, nan_value, nan_value);
8847214f
UD
5599
5600 /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0. */
e971e76d 5601 errno = 0;
8847214f 5602 TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
e971e76d 5603 check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
8847214f 5604 TEST_f_f (lgamma, minus_infty, plus_infty);
41bf21a1
JM
5605 TEST_f_f (lgamma, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5606 TEST_f_f (lgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
8847214f
UD
5607
5608 TEST_f_f1 (lgamma, 1, 0, 1);
5609
5610 TEST_f_f1 (lgamma, 3, M_LN2l, 1);
5611
5612 TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
5613 TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
79df8ce5
AJ
5614 TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
5615 TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
8847214f
UD
5616
5617 END (lgamma);
5618}
5619
2550dfe9 5620
8847214f
UD
5621static void
5622lrint_test (void)
5623{
5624 /* XXX this test is incomplete. We need to have a way to specifiy
5625 the rounding method and test the critical cases. So far, only
5626 unproblematic numbers are tested. */
5627
5628 START (lrint);
5629
5630 TEST_f_l (lrint, 0.0, 0);
5631 TEST_f_l (lrint, minus_zero, 0);
3c6cad26
UD
5632 TEST_f_l (lrint, 0.2L, 0);
5633 TEST_f_l (lrint, -0.2L, 0);
8847214f 5634
3c6cad26
UD
5635 TEST_f_l (lrint, 1.4L, 1);
5636 TEST_f_l (lrint, -1.4L, -1);
8847214f 5637
3c6cad26
UD
5638 TEST_f_l (lrint, 8388600.3L, 8388600);
5639 TEST_f_l (lrint, -8388600.3L, -8388600);
8847214f 5640
3eb61415
UD
5641 TEST_f_l (lrint, 1071930.0008, 1071930);
5642#ifndef TEST_FLOAT
5643 TEST_f_l (lrint, 1073741824.01, 1073741824);
39007ae3
UD
5644# if LONG_MAX > 281474976710656
5645 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
5646# endif
3eb61415
UD
5647#endif
5648
8847214f
UD
5649 END (lrint);
5650}
5651
2550dfe9 5652
6624dbc0
UD
5653static void
5654lrint_test_tonearest (void)
5655{
5656 int save_round_mode;
5657 START (lrint_tonearest);
5658
5659 save_round_mode = fegetround ();
5660
5661 if (!fesetround (FE_TONEAREST))
5662 {
5663 TEST_f_l (lrint, 0.0, 0);
5664 TEST_f_l (lrint, minus_zero, 0);
5665 TEST_f_l (lrint, 0.2L, 0);
5666 TEST_f_l (lrint, -0.2L, 0);
5667 TEST_f_l (lrint, 0.5L, 0);
5668 TEST_f_l (lrint, -0.5L, 0);
5669 TEST_f_l (lrint, 0.8L, 1);
5670 TEST_f_l (lrint, -0.8L, -1);
5671
5672 TEST_f_l (lrint, 1.4L, 1);
5673 TEST_f_l (lrint, -1.4L, -1);
5674
5675 TEST_f_l (lrint, 8388600.3L, 8388600);
5676 TEST_f_l (lrint, -8388600.3L, -8388600);
5677
5678 TEST_f_l (lrint, 1071930.0008, 1071930);
5679#ifndef TEST_FLOAT
5680 TEST_f_l (lrint, 1073741824.01, 1073741824);
5681# if LONG_MAX > 281474976710656
5682 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
5683# endif
5684#endif
5685 }
5686
5687 fesetround (save_round_mode);
5688
5689 END (lrint_tonearest);
5690}
5691
5692
5693static void
5694lrint_test_towardzero (void)
5695{
5696 int save_round_mode;
5697 START (lrint_towardzero);
5698
5699 save_round_mode = fegetround ();
5700
5701 if (!fesetround (FE_TOWARDZERO))
5702 {
5703 TEST_f_l (lrint, 0.0, 0);
5704 TEST_f_l (lrint, minus_zero, 0);
5705 TEST_f_l (lrint, 0.2L, 0);
5706 TEST_f_l (lrint, -0.2L, 0);
5707 TEST_f_l (lrint, 0.5L, 0);
5708 TEST_f_l (lrint, -0.5L, 0);
5709 TEST_f_l (lrint, 0.8L, 0);
5710 TEST_f_l (lrint, -0.8L, 0);
5711
5712 TEST_f_l (lrint, 1.4L, 1);
5713 TEST_f_l (lrint, -1.4L, -1);
5714
5715 TEST_f_l (lrint, 8388600.3L, 8388600);
5716 TEST_f_l (lrint, -8388600.3L, -8388600);
5717
5718 TEST_f_l (lrint, 1071930.0008, 1071930);
5719#ifndef TEST_FLOAT
5720 TEST_f_l (lrint, 1073741824.01, 1073741824);
5721# if LONG_MAX > 281474976710656
5722 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
5723# endif
5724#endif
5725 }
5726
5727 fesetround (save_round_mode);
5728
5729 END (lrint_towardzero);
5730}
5731
5732
5733static void
5734lrint_test_downward (void)
5735{
5736 int save_round_mode;
5737 START (lrint_downward);
5738
5739 save_round_mode = fegetround ();
5740
5741 if (!fesetround (FE_DOWNWARD))
5742 {
5743 TEST_f_l (lrint, 0.0, 0);
5744 TEST_f_l (lrint, minus_zero, 0);
5745 TEST_f_l (lrint, 0.2L, 0);
5746 TEST_f_l (lrint, -0.2L, -1);
5747 TEST_f_l (lrint, 0.5L, 0);
5748 TEST_f_l (lrint, -0.5L, -1);
5749 TEST_f_l (lrint, 0.8L, 0);
5750 TEST_f_l (lrint, -0.8L, -1);
5751
5752 TEST_f_l (lrint, 1.4L, 1);
5753 TEST_f_l (lrint, -1.4L, -2);
5754
5755 TEST_f_l (lrint, 8388600.3L, 8388600);
5756 TEST_f_l (lrint, -8388600.3L, -8388601);
5757
5758 TEST_f_l (lrint, 1071930.0008, 1071930);
5759#ifndef TEST_FLOAT
5760 TEST_f_l (lrint, 1073741824.01, 1073741824);
5761# if LONG_MAX > 281474976710656
5762 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
5763# endif
5764#endif
5765 }
5766
5767 fesetround (save_round_mode);
5768
5769 END (lrint_downward);
5770}
5771
5772
5773static void
5774lrint_test_upward (void)
5775{
5776 int save_round_mode;
5777 START (lrint_upward);
5778
5779 save_round_mode = fegetround ();
5780
5781 if (!fesetround (FE_UPWARD))
5782 {
5783 TEST_f_l (lrint, 0.0, 0);
5784 TEST_f_l (lrint, minus_zero, 0);
5785 TEST_f_l (lrint, 0.2L, 1);
5786 TEST_f_l (lrint, -0.2L, 0);
5787 TEST_f_l (lrint, 0.5L, 1);
5788 TEST_f_l (lrint, -0.5L, 0);
5789 TEST_f_l (lrint, 0.8L, 1);
5790 TEST_f_l (lrint, -0.8L, 0);
5791
5792 TEST_f_l (lrint, 1.4L, 2);
5793 TEST_f_l (lrint, -1.4L, -1);
5794
5795 TEST_f_l (lrint, 8388600.3L, 8388601);
5796 TEST_f_l (lrint, -8388600.3L, -8388600);
5797
5798#ifndef TEST_FLOAT
5799 TEST_f_l (lrint, 1071930.0008, 1071931);
5800 TEST_f_l (lrint, 1073741824.01, 1073741825);
5801# if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
89210b4c 5802 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
6624dbc0
UD
5803# endif
5804#endif
5805 }
5806
5807 fesetround (save_round_mode);
5808
5809 END (lrint_upward);
5810}
5811
5812
8847214f
UD
5813static void
5814llrint_test (void)
5815{
5816 /* XXX this test is incomplete. We need to have a way to specifiy
5817 the rounding method and test the critical cases. So far, only
5818 unproblematic numbers are tested. */
5819
5820 START (llrint);
5821
5822 TEST_f_L (llrint, 0.0, 0);
5823 TEST_f_L (llrint, minus_zero, 0);
3c6cad26
UD
5824 TEST_f_L (llrint, 0.2L, 0);
5825 TEST_f_L (llrint, -0.2L, 0);
8847214f 5826
3c6cad26
UD
5827 TEST_f_L (llrint, 1.4L, 1);
5828 TEST_f_L (llrint, -1.4L, -1);
8847214f 5829
3c6cad26
UD
5830 TEST_f_L (llrint, 8388600.3L, 8388600);
5831 TEST_f_L (llrint, -8388600.3L, -8388600);
8847214f 5832
3eb61415
UD
5833 TEST_f_l (llrint, 1071930.0008, 1071930);
5834
8847214f
UD
5835 /* Test boundary conditions. */
5836 /* 0x1FFFFF */
5837 TEST_f_L (llrint, 2097151.0,2097151LL);
5838 /* 0x800000 */
5839 TEST_f_L (llrint, 8388608.0, 8388608LL);
5840 /* 0x1000000 */
5841 TEST_f_L (llrint, 16777216.0, 16777216LL);
5842 /* 0x20000000000 */
5843 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
5844 /* 0x40000000000 */
5845 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
39007ae3
UD
5846 /* 0x1000000000000 */
5847 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8847214f
UD
5848 /* 0x10000000000000 */
5849 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
5850 /* 0x10000080000000 */
5851 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
5852 /* 0x20000000000000 */
5853 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
5854 /* 0x80000000000000 */
5855 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
5856 /* 0x100000000000000 */
5857 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
f964490f
RM
5858#ifdef TEST_LDOUBLE
5859 /* The input can only be represented in long double. */
5860 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
5861 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
5862 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
5863 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
5864 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
5865
5866 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
5867 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
5868 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
5869 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
5870 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
5871
830fce04
RM
5872# if LDBL_MANT_DIG > 100
5873 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
5874 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
5875 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
5876 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
5877 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
5878 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
5879
5880 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
5881 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
5882 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
5883 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
5884 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
5885 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
5886#endif
5887
f964490f
RM
5888 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
5889 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
5890 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
5891 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
5892 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
5893
5894 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
5895 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
5896 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
5897 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
5898 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
5899
830fce04
RM
5900# if LDBL_MANT_DIG > 100
5901 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
5902 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
5903 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
5904 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
5905 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
5906 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
5907
5908 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
5909 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
5910 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
5911 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
5912 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
5913 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
5914#endif
5915
f964490f
RM
5916 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
5917 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
5918 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
5919 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
5920 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
5921
5922 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
5923 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
5924 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
5925 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
5926 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
830fce04
RM
5927
5928# if LDBL_MANT_DIG > 100
5929 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
5930 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
5931 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
5932 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
5933 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
5934 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
5935 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
5936 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
5937 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
5938 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
5939 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
5940 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
5941# endif
f964490f 5942#endif
8847214f
UD
5943
5944 END (llrint);
5945}
5946
830fce04
RM
5947static void
5948llrint_test_tonearest (void)
5949{
5950 int save_round_mode;
5951 START (llrint_tonearest);
5952
5953 save_round_mode = fegetround ();
5954
5955 if (!fesetround (FE_TONEAREST))
5956 {
5957 TEST_f_L (llrint, 0.0, 0);
5958 TEST_f_L (llrint, minus_zero, 0);
5959 TEST_f_L (llrint, 0.2L, 0);
5960 TEST_f_L (llrint, -0.2L, 0);
5961
5962 TEST_f_L (llrint, 1.4L, 1);
5963 TEST_f_L (llrint, -1.4L, -1);
5964
5965 TEST_f_L (llrint, 8388600.3L, 8388600);
5966 TEST_f_L (llrint, -8388600.3L, -8388600);
5967
5968 TEST_f_l (llrint, 1071930.0008, 1071930);
5969
5970 /* Test boundary conditions. */
5971 /* 0x1FFFFF */
5972 TEST_f_L (llrint, 2097151.0,2097151LL);
5973 /* 0x800000 */
5974 TEST_f_L (llrint, 8388608.0, 8388608LL);
5975 /* 0x1000000 */
5976 TEST_f_L (llrint, 16777216.0, 16777216LL);
5977 /* 0x20000000000 */
5978 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
5979 /* 0x40000000000 */
5980 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
5981 /* 0x1000000000000 */
5982 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
5983 /* 0x10000000000000 */
5984 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
5985 /* 0x10000080000000 */
5986 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
5987 /* 0x20000000000000 */
5988 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
5989 /* 0x80000000000000 */
5990 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
5991 /* 0x100000000000000 */
5992 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
5993#ifdef TEST_LDOUBLE
5994 /* The input can only be represented in long double. */
5995 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
5996 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
5997 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
5998 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
5999 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
6000
6001 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
6002 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
6003 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
6004 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
6005 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
6006
6007# if LDBL_MANT_DIG > 100
6008 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
6009 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
6010 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
6011 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
6012 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
6013 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
6014
6015 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
6016 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
6017 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
6018 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
6019 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
6020 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
6021#endif
6022
6023 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
6024 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
6025 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
6026 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
6027 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
6028
6029 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
6030 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
6031 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
6032 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
6033 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
6034
6035# if LDBL_MANT_DIG > 100
6036 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
6037 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
6038 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
6039 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
6040 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
6041 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
6042
6043 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
6044 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
6045 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
6046 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
6047 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
6048 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
6049#endif
6050
6051 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
6052 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
6053 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
6054 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
6055 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
6056
6057 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
6058 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
6059 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
6060 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
6061 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
6062
6063# if LDBL_MANT_DIG > 100
6064 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
6065 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
6066 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
6067 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
6068 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
6069 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
6070 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
6071 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
6072 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
6073 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
6074 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
6075 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
6076# endif
6077#endif
6078 }
6079
6080 fesetround (save_round_mode);
6081
6082 END (llrint_tonearest);
6083}
6084
6085static void
6086llrint_test_towardzero (void)
6087{
6088 int save_round_mode;
6089 START (llrint_towardzero);
6090
6091 save_round_mode = fegetround ();
6092
6093 if (!fesetround (FE_TOWARDZERO))
6094 {
6095 TEST_f_L (llrint, 0.0, 0);
6096 TEST_f_L (llrint, minus_zero, 0);
6097 TEST_f_L (llrint, 0.2L, 0);
6098 TEST_f_L (llrint, -0.2L, 0);
6099
6100 TEST_f_L (llrint, 1.4L, 1);
6101 TEST_f_L (llrint, -1.4L, -1);
6102
6103 TEST_f_L (llrint, 8388600.3L, 8388600);
6104 TEST_f_L (llrint, -8388600.3L, -8388600);
6105
6106 TEST_f_l (llrint, 1071930.0008, 1071930);
6107
6108 /* Test boundary conditions. */
6109 /* 0x1FFFFF */
6110 TEST_f_L (llrint, 2097151.0,2097151LL);
6111 /* 0x800000 */
6112 TEST_f_L (llrint, 8388608.0, 8388608LL);
6113 /* 0x1000000 */
6114 TEST_f_L (llrint, 16777216.0, 16777216LL);
6115 /* 0x20000000000 */
6116 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
6117 /* 0x40000000000 */
6118 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
6119 /* 0x1000000000000 */
6120 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
6121 /* 0x10000000000000 */
6122 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
6123 /* 0x10000080000000 */
6124 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
6125 /* 0x20000000000000 */
6126 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
6127 /* 0x80000000000000 */
6128 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
6129 /* 0x100000000000000 */
6130 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
6131#ifdef TEST_LDOUBLE
6132 /* The input can only be represented in long double. */
6133 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
6134 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
6135 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
6136 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
6137 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
6138
6139 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
6140 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
6141 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
6142 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
6143 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
6144
6145# if LDBL_MANT_DIG > 100
6146 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
6147 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
6148 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
6149 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
6150 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
6151 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
6152
6153 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
6154 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
6155 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
6156 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
6157 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
6158 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
6159#endif
6160
6161 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
6162 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
6163 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
6164 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
6165 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
6166
6167 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
6168 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
6169 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
6170 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
6171 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
6172
6173# if LDBL_MANT_DIG > 100
6174 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
6175 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
6176 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
6177 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
6178 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
6179 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
6180
6181 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
6182 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
6183 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
6184 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
6185 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
6186 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
6187#endif
6188
6189 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
6190 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
6191 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
6192 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
6193 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
6194
6195 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
6196 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
6197 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
6198 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
6199 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
6200
6201# if LDBL_MANT_DIG > 100
6202 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
6203 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
6204 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
6205 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
6206 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
6207 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
6208 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
6209 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
6210 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
6211 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
6212 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
6213 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
6214# endif
6215#endif
6216 }
6217
6218 fesetround (save_round_mode);
6219
6220 END (llrint_towardzero);
6221}
6222
6223static void
6224llrint_test_downward (void)
6225{
6226 int save_round_mode;
6227 START (llrint_downward);
6228
6229 save_round_mode = fegetround ();
6230
6231 if (!fesetround (FE_DOWNWARD))
6232 {
6233 TEST_f_L (llrint, 0.0, 0);
6234 TEST_f_L (llrint, minus_zero, 0);
6235 TEST_f_L (llrint, 0.2L, 0);
6236 TEST_f_L (llrint, -0.2L, -1);
6237
6238 TEST_f_L (llrint, 1.4L, 1);
6239 TEST_f_L (llrint, -1.4L, -2);
6240
6241 TEST_f_L (llrint, 8388600.3L, 8388600);
6242 TEST_f_L (llrint, -8388600.3L, -8388601);
6243
6244 TEST_f_l (llrint, 1071930.0008, 1071930);
6245
6246 /* Test boundary conditions. */
6247 /* 0x1FFFFF */
6248 TEST_f_L (llrint, 2097151.0,2097151LL);
6249 /* 0x800000 */
6250 TEST_f_L (llrint, 8388608.0, 8388608LL);
6251 /* 0x1000000 */
6252 TEST_f_L (llrint, 16777216.0, 16777216LL);
6253 /* 0x20000000000 */
6254 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
6255 /* 0x40000000000 */
6256 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
6257 /* 0x1000000000000 */
6258 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
6259 /* 0x10000000000000 */
6260 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
6261 /* 0x10000080000000 */
6262 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
6263 /* 0x20000000000000 */
6264 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
6265 /* 0x80000000000000 */
6266 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
6267 /* 0x100000000000000 */
6268 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
6269#ifdef TEST_LDOUBLE
6270 /* The input can only be represented in long double. */
6271 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
6272 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
6273 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
6274 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
6275 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
6276
6277 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
6278 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
6279 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
6280 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
6281 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
6282 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
6283
6284 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
6285 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
6286 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
6287 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
6288 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
6289
6290 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
6291 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
6292 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
6293 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
6294 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
6295 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
6296
6297 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
6298 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
6299 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
6300 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
6301 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
6302
6303 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
6304 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
6305 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
6306 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
6307 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
6308 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
6309
6310 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
6311 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
6312 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
6313 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
6314 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
6315
6316 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
6317 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
6318 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
6319 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
6320 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
6321 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
6322
6323 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
6324 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
6325 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
6326 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
6327 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
6328
6329 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
6330 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
6331 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
6332 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
6333 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
6334
6335# if LDBL_MANT_DIG > 100
6336 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
6337 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
6338 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
6339 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
6340 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
6341 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
6342 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
6343 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
6344 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
6345 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
6346 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
6347 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
6348# endif
6349#endif
6350 }
6351
6352 fesetround (save_round_mode);
6353
6354 END (llrint_downward);
6355}
6356
6357static void
6358llrint_test_upward (void)
6359{
6360 int save_round_mode;
6361 START (llrint_upward);
6362
6363 save_round_mode = fegetround ();
6364
6365 if (!fesetround (FE_UPWARD))
6366 {
6367 TEST_f_L (llrint, 0.0, 0);
6368 TEST_f_L (llrint, minus_zero, 0);
6369 TEST_f_L (llrint, 0.2L, 1);
6370 TEST_f_L (llrint, -0.2L, 0);
6371
6372 TEST_f_L (llrint, 1.4L, 2);
6373 TEST_f_L (llrint, -1.4L, -1);
6374
6375 TEST_f_L (llrint, 8388600.3L, 8388601);
6376 TEST_f_L (llrint, -8388600.3L, -8388600);
6377#ifndef TEST_FLOAT
6378 TEST_f_l (llrint, 1071930.0008, 1071931);
6379#endif
6380 /* Test boundary conditions. */
6381 /* 0x1FFFFF */
6382 TEST_f_L (llrint, 2097151.0,2097151LL);
6383 /* 0x800000 */
6384 TEST_f_L (llrint, 8388608.0, 8388608LL);
6385 /* 0x1000000 */
6386 TEST_f_L (llrint, 16777216.0, 16777216LL);
6387 /* 0x20000000000 */
6388 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
6389 /* 0x40000000000 */
6390 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
6391 /* 0x1000000000000 */
6392 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
6393 /* 0x10000000000000 */
6394 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
6395 /* 0x10000080000000 */
6396 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
6397 /* 0x20000000000000 */
6398 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
6399 /* 0x80000000000000 */
6400 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
6401 /* 0x100000000000000 */
6402 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
6403#ifdef TEST_LDOUBLE
6404 /* The input can only be represented in long double. */
6405 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
6406 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
6407 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
6408 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
6409 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
6410
6411 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
6412 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
6413 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
6414 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
6415 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
6416 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
6417
6418 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
6419 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
6420 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
6421 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
6422 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
6423
6424 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
6425 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
6426 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
6427 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
6428 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
6429 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
6430
6431 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
6432 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
6433 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
6434 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
6435 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
6436
6437 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
6438 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
6439 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
6440 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
6441 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
6442 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
6443
6444 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
6445 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
6446 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
6447 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
6448 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
6449
6450 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
6451 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
6452 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
6453 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
6454 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
6455 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
6456
6457 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
6458 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
6459 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
6460 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
6461 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
6462
6463 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
6464 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
6465 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
6466 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
6467 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
6468
6469# if LDBL_MANT_DIG > 100
6470 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
6471 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
6472 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
6473 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
6474 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
6475 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
6476 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
6477 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
6478 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
6479 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
6480 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
6481 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
6482# endif
6483#endif
6484 }
6485
6486 fesetround (save_round_mode);
6487
6488 END (llrint_upward);
6489}
6490
2550dfe9 6491
8847214f
UD
6492static void
6493log_test (void)
6494{
e6d3c4a7
AJ
6495 errno = 0;
6496 FUNC(log) (1);
6497 if (errno == ENOSYS)
6498 /* Function not implemented. */
6499 return;
8847214f
UD
6500 START (log);
6501
6502 TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6503 TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6504
6505 TEST_f_f (log, 1, 0);
6506
6507 TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
41bf21a1 6508 TEST_f_f (log, -max_value, nan_value, INVALID_EXCEPTION);
6b2665f5 6509 TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f 6510 TEST_f_f (log, plus_infty, plus_infty);
6b2665f5 6511 TEST_f_f (log, nan_value, nan_value);
8847214f
UD
6512
6513 TEST_f_f (log, M_El, 1);
6514 TEST_f_f (log, 1.0 / M_El, -1);
6515 TEST_f_f (log, 2, M_LN2l);
6516 TEST_f_f (log, 10, M_LN10l);
2550dfe9 6517 TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
8847214f
UD
6518
6519 END (log);
6520}
6521
6522
6523static void
6524log10_test (void)
6525{
e6d3c4a7
AJ
6526 errno = 0;
6527 FUNC(log10) (1);
6528 if (errno == ENOSYS)
6529 /* Function not implemented. */
6530 return;
6531
8847214f
UD
6532 START (log10);
6533
6534 TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6535 TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6536
6537 TEST_f_f (log10, 1, 0);
6538
6539 /* log10 (x) == NaN plus invalid exception if x < 0. */
6540 TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
41bf21a1 6541 TEST_f_f (log10, -max_value, nan_value, INVALID_EXCEPTION);
6b2665f5 6542 TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
6543
6544 TEST_f_f (log10, plus_infty, plus_infty);
15daa639 6545 TEST_f_f (log10, nan_value, nan_value);
8847214f
UD
6546
6547 TEST_f_f (log10, 0.1L, -1);
6548 TEST_f_f (log10, 10.0, 1);
6549 TEST_f_f (log10, 100.0, 2);
6550 TEST_f_f (log10, 10000.0, 4);
6551 TEST_f_f (log10, M_El, M_LOG10El);
2550dfe9 6552 TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
8847214f
UD
6553
6554 END (log10);
6555}
6556
6557
6558static void
6559log1p_test (void)
6560{
e6d3c4a7
AJ
6561 errno = 0;
6562 FUNC(log1p) (0);
6563 if (errno == ENOSYS)
6564 /* Function not implemented. */
6565 return;
6566
8847214f
UD
6567 START (log1p);
6568
6569 TEST_f_f (log1p, 0, 0);
6570 TEST_f_f (log1p, minus_zero, minus_zero);
6571
6572 TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6573 TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
41bf21a1 6574 TEST_f_f (log1p, -max_value, nan_value, INVALID_EXCEPTION);
6b2665f5 6575 TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
6576
6577 TEST_f_f (log1p, plus_infty, plus_infty);
15daa639 6578 TEST_f_f (log1p, nan_value, nan_value);
8847214f
UD
6579
6580 TEST_f_f (log1p, M_El - 1.0, 1);
6581
2550dfe9
AJ
6582 TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
6583 TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
8847214f
UD
6584
6585 END (log1p);
6586}
6587
6588
6589static void
6590log2_test (void)
6591{
e6d3c4a7
AJ
6592 errno = 0;
6593 FUNC(log2) (1);
6594 if (errno == ENOSYS)
6595 /* Function not implemented. */
6596 return;
6597
8847214f
UD
6598 START (log2);
6599
6600 TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6601 TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6602
6603 TEST_f_f (log2, 1, 0);
6604
6605 TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
41bf21a1 6606 TEST_f_f (log2, -max_value, nan_value, INVALID_EXCEPTION);
6b2665f5 6607 TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
6608
6609 TEST_f_f (log2, plus_infty, plus_infty);
15daa639 6610 TEST_f_f (log2, nan_value, nan_value);
8847214f
UD
6611
6612 TEST_f_f (log2, M_El, M_LOG2El);
6613 TEST_f_f (log2, 2.0, 1);
6614 TEST_f_f (log2, 16.0, 4);
6615 TEST_f_f (log2, 256.0, 8);
2550dfe9 6616 TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
8847214f
UD
6617
6618 END (log2);
6619}
6620
6621
6622static void
6623logb_test (void)
6624{
6625 START (logb);
6626
6627 TEST_f_f (logb, plus_infty, plus_infty);
6628 TEST_f_f (logb, minus_infty, plus_infty);
6629
6630 TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
6631
6632 TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
15daa639 6633 TEST_f_f (logb, nan_value, nan_value);
8847214f
UD
6634
6635 TEST_f_f (logb, 1, 0);
6636 TEST_f_f (logb, M_El, 1);
6637 TEST_f_f (logb, 1024, 10);
6638 TEST_f_f (logb, -2000, 10);
6639
89c9aa49
AZ
6640 TEST_f_f (logb, 0x0.1p-127, -131);
6641 TEST_f_f (logb, 0x0.01p-127, -135);
6642 TEST_f_f (logb, 0x0.011p-127, -135);
6643#ifndef TEST_FLOAT
6644 TEST_f_f (logb, 0x0.8p-1022, -1023);
6645 TEST_f_f (logb, 0x0.1p-1022, -1026);
6646 TEST_f_f (logb, 0x0.00111p-1022, -1034);
6647 TEST_f_f (logb, 0x0.00001p-1022, -1042);
6648 TEST_f_f (logb, 0x0.000011p-1022, -1042);
6649 TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
6650#endif
6651#if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
6652 TEST_f_f (logb, 0x1p-16400L, -16400);
6653 TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
6654#endif
6655
8847214f
UD
6656 END (logb);
6657}
6658
a462cb63
RA
6659static void
6660logb_test_downward (void)
6661{
6662 int save_round_mode;
6663 errno = 0;
6664
6665 FUNC(logb) (0);
6666 if (errno == ENOSYS)
6667 /* Function not implemented. */
6668 return;
6669
6670 START (logb_downward);
6671
6672 save_round_mode = fegetround ();
6673
6674 if (!fesetround (FE_DOWNWARD))
6675 {
6676
6677 /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.". Libm
6678 should not return -0 from logb in any rounding mode. PowerPC32 has
6679 failed with this test for power4 logb (and logbl on all PowerPC
6680 platforms) in the past due to instruction selection. GCC PR 52775
6681 provides the availability of the fcfid insn in 32-bit mode which
6682 eliminates the use of fsub in this instance and prevents the negative
6683 signed 0.0. */
6684
60c8fca7 6685 /* BZ #887 */
a462cb63
RA
6686 TEST_f_f (logb, 1.000e+0, plus_zero);
6687 }
6688
6689 fesetround (save_round_mode);
6690
6691 END (logb_downward);
6692}
2550dfe9 6693
8847214f
UD
6694static void
6695lround_test (void)
6696{
6697 START (lround);
6698
6699 TEST_f_l (lround, 0, 0);
6700 TEST_f_l (lround, minus_zero, 0);
3c6cad26
UD
6701 TEST_f_l (lround, 0.2L, 0.0);
6702 TEST_f_l (lround, -0.2L, 0);
8847214f
UD
6703 TEST_f_l (lround, 0.5, 1);
6704 TEST_f_l (lround, -0.5, -1);
3c6cad26
UD
6705 TEST_f_l (lround, 0.8L, 1);
6706 TEST_f_l (lround, -0.8L, -1);
8847214f
UD
6707 TEST_f_l (lround, 1.5, 2);
6708 TEST_f_l (lround, -1.5, -2);
6709 TEST_f_l (lround, 22514.5, 22515);
6710 TEST_f_l (lround, -22514.5, -22515);
3eb61415 6711 TEST_f_l (lround, 1071930.0008, 1071930);
8847214f 6712#ifndef TEST_FLOAT
3eb61415 6713 TEST_f_l (lround, 1073741824.01, 1073741824);
39007ae3
UD
6714# if LONG_MAX > 281474976710656
6715 TEST_f_l (lround, 281474976710656.025, 281474976710656);
169d7f11 6716 TEST_f_l (lround, 18014398509481974, 18014398509481974);
39007ae3 6717# endif
8847214f
UD
6718 TEST_f_l (lround, 2097152.5, 2097153);
6719 TEST_f_l (lround, -2097152.5, -2097153);
c1e6b459
UD
6720 /* nextafter(0.5,-1) */
6721 TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
6722 /* nextafter(-0.5,1) */
6723 TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
6724#else
6725 /* nextafter(0.5,-1) */
6726 TEST_f_l (lround, 0x1.fffffp-2, 0);
6727 /* nextafter(-0.5,1) */
6728 TEST_f_l (lround, -0x1.fffffp-2, 0);
6729 TEST_f_l (lround, 0x1.fffffep+23, 16777215);
6730 TEST_f_l (lround, -0x1.fffffep+23, -16777215);
8847214f
UD
6731#endif
6732 END (lround);
6733}
6734
6735
6736static void
6737llround_test (void)
6738{
6739 START (llround);
6740
6741 TEST_f_L (llround, 0, 0);
6742 TEST_f_L (llround, minus_zero, 0);
3c6cad26
UD
6743 TEST_f_L (llround, 0.2L, 0.0);
6744 TEST_f_L (llround, -0.2L, 0);
8847214f
UD
6745 TEST_f_L (llround, 0.5, 1);
6746 TEST_f_L (llround, -0.5, -1);
3c6cad26
UD
6747 TEST_f_L (llround, 0.8L, 1);
6748 TEST_f_L (llround, -0.8L, -1);
8847214f
UD
6749 TEST_f_L (llround, 1.5, 2);
6750 TEST_f_L (llround, -1.5, -2);
6751 TEST_f_L (llround, 22514.5, 22515);
6752 TEST_f_L (llround, -22514.5, -22515);
3eb61415 6753 TEST_f_l (llround, 1071930.0008, 1071930);
8847214f
UD
6754#ifndef TEST_FLOAT
6755 TEST_f_L (llround, 2097152.5, 2097153);
6756 TEST_f_L (llround, -2097152.5, -2097153);
6757 TEST_f_L (llround, 34359738368.5, 34359738369ll);
6758 TEST_f_L (llround, -34359738368.5, -34359738369ll);
169d7f11 6759 TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
8847214f
UD
6760#endif
6761
6762 /* Test boundary conditions. */
6763 /* 0x1FFFFF */
6764 TEST_f_L (llround, 2097151.0, 2097151LL);
6765 /* 0x800000 */
6766 TEST_f_L (llround, 8388608.0, 8388608LL);
6767 /* 0x1000000 */
6768 TEST_f_L (llround, 16777216.0, 16777216LL);
6769 /* 0x20000000000 */
6770 TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
6771 /* 0x40000000000 */
6772 TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
39007ae3
UD
6773 /* 0x1000000000000 */
6774 TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
8847214f
UD
6775 /* 0x10000000000000 */
6776 TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
6777 /* 0x10000080000000 */
3eb61415 6778 TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
8847214f
UD
6779 /* 0x20000000000000 */
6780 TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
6781 /* 0x80000000000000 */
6782 TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
6783 /* 0x100000000000000 */
6784 TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
6785
601d2942
UD
6786#ifndef TEST_FLOAT
6787 /* 0x100000000 */
6788 TEST_f_L (llround, 4294967295.5, 4294967296LL);
6789 /* 0x200000000 */
6790 TEST_f_L (llround, 8589934591.5, 8589934592LL);
c1e6b459
UD
6791
6792 /* nextafter(0.5,-1) */
6793 TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
6794 /* nextafter(-0.5,1) */
6795 TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
6796 /* On PowerPC an exponent of '52' is the largest incrementally
6797 * representable sequence of whole-numbers in the 'double' range. We test
6798 * lround to make sure that a guard bit set during the lround operation
6799 * hasn't forced an erroneous shift giving us an incorrect result. The odd
6800 * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
6801 * rightmost bit set. */
6802 /* +-(2^52+1) */
6803 TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
6804 TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
6805 /* +-(2^53-1): Input is the last (positive and negative) incrementally
6806 * representable whole-number in the 'double' range that might round
6807 * erroneously. */
6808 TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
6809 TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
6810#else
6811 /* nextafter(0.5,-1) */
6812 TEST_f_L (llround, 0x1.fffffep-2, 0);
6813 /* nextafter(-0.5,1) */
6814 TEST_f_L (llround, -0x1.fffffep-2, 0);
6815 /* As above, on PowerPC an exponent of '23' is the largest incrementally
6816 * representable sequence of whole-numbers in the 'float' range.
6817 * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected. */
6818 TEST_f_L (llround, 0x1.000002p+23,8388609);
6819 TEST_f_L (llround, -0x1.000002p+23,-8388609);
6820 TEST_f_L (llround, 0x1.fffffep+23, 16777215);
6821 TEST_f_L (llround, -0x1.fffffep+23, -16777215);
601d2942
UD
6822#endif
6823
c1e6b459 6824
f964490f
RM
6825#ifdef TEST_LDOUBLE
6826 /* The input can only be represented in long double. */
6827 TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
6828 TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
6829 TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
6830 TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
6831 TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
6832
830fce04
RM
6833# if LDBL_MANT_DIG > 100
6834 TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
6835 TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
6836 TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
6837 TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
6838 TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
6839 TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
6840
6841 TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
6842 TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
6843 TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
6844 TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
6845 TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
6846 TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
6847# endif
6848
f964490f
RM
6849 TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
6850 TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
6851 TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
6852 TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
6853 TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
6854
6855 TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
6856 TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
6857 TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
6858 TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
6859 TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
6860
830fce04
RM
6861# if LDBL_MANT_DIG > 100
6862 TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
6863 TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
6864 TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
6865 TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
6866 TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
6867 TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
6868
6869 TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
6870 TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
6871 TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
6872 TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
6873 TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
6874 TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
6875# endif
6876
f964490f
RM
6877 TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
6878 TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
6879 TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
6880 TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
6881 TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
6882
6883 TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
6884 TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
6885 TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
6886 TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
6887 TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
6888
6889 TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
6890 TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
6891 TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
6892 TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
6893 TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
1e832e37
RM
6894
6895 TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
6896 TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
6897 TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
6898 TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
6899 TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
6900 TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
f964490f
RM
6901#endif
6902
8847214f
UD
6903 END (llround);
6904}
6905
6906static void
6907modf_test (void)
6908{
6909 FLOAT x;
6910
6911 START (modf);
6912
6913 TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
6914 TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
6915 TEST_fF_f1 (modf, nan_value, nan_value, nan_value);
6916 TEST_fF_f1 (modf, 0, 0, 0);
6917 TEST_fF_f1 (modf, 1.5, 0.5, 1);
6918 TEST_fF_f1 (modf, 2.5, 0.5, 2);
6919 TEST_fF_f1 (modf, -2.5, -0.5, -2);
6920 TEST_fF_f1 (modf, 20, 0, 20);
6921 TEST_fF_f1 (modf, 21, 0, 21);
6922 TEST_fF_f1 (modf, 89.5, 0.5, 89);
6923
6924 END (modf);
6925}
6926
6927
6928static void
6929nearbyint_test (void)
6930{
6931 START (nearbyint);
6932
6933 TEST_f_f (nearbyint, 0.0, 0.0);
6934 TEST_f_f (nearbyint, minus_zero, minus_zero);
6935 TEST_f_f (nearbyint, plus_infty, plus_infty);
6936 TEST_f_f (nearbyint, minus_infty, minus_infty);
15daa639 6937 TEST_f_f (nearbyint, nan_value, nan_value);
8847214f 6938
a1267ba1
AZ
6939 /* Subnormal values */
6940 TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
6941 TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
6942
1dc23588
UD
6943 /* Default rounding mode is round to nearest. */
6944 TEST_f_f (nearbyint, 0.5, 0.0);
6945 TEST_f_f (nearbyint, 1.5, 2.0);
6946 TEST_f_f (nearbyint, -0.5, minus_zero);
6947 TEST_f_f (nearbyint, -1.5, -2.0);
bdf09fab 6948
af0498dc
UD
6949 TEST_f_f (nearbyint, 262144.75, 262145.0);
6950 TEST_f_f (nearbyint, 262142.75, 262143.0);
6951 TEST_f_f (nearbyint, 524286.75, 524287.0);
6952 TEST_f_f (nearbyint, 524288.75, 524289.0);
6953
6cbeae47
JM
6954 TEST_f_f (nearbyint, 1048576.75, 1048577.0);
6955 TEST_f_f (nearbyint, 2097152.75, 2097153.0);
6956 TEST_f_f (nearbyint, 2492472.75, 2492473.0);
6957 TEST_f_f (nearbyint, 2886220.75, 2886221.0);
6958 TEST_f_f (nearbyint, 3058792.75, 3058793.0);
6959 TEST_f_f (nearbyint, -1048576.75, -1048577.0);
6960 TEST_f_f (nearbyint, -2097152.75, -2097153.0);
6961 TEST_f_f (nearbyint, -2492472.75, -2492473.0);
6962 TEST_f_f (nearbyint, -2886220.75, -2886221.0);
6963 TEST_f_f (nearbyint, -3058792.75, -3058793.0);
6964#ifndef TEST_FLOAT
6965 TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
6966 TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
6967 TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
6968 TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
6969 TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
6970 TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
6971 TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
6972 TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
6973 TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
6974 TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
6975#endif
6976
8847214f
UD
6977 END (nearbyint);
6978}
6979
6980static void
6981nextafter_test (void)
6982{
6983
6984 START (nextafter);
6985
6986 TEST_ff_f (nextafter, 0, 0, 0);
6987 TEST_ff_f (nextafter, minus_zero, 0, 0);
6988 TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
6989 TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
6990
6991 TEST_ff_f (nextafter, 9, 9, 9);
6992 TEST_ff_f (nextafter, -9, -9, -9);
6993 TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
6994 TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
6995
3c6cad26
UD
6996 TEST_ff_f (nextafter, nan_value, 1.1L, nan_value);
6997 TEST_ff_f (nextafter, 1.1L, nan_value, nan_value);
8847214f
UD
6998 TEST_ff_f (nextafter, nan_value, nan_value, nan_value);
6999
64b02fd2
UD
7000 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
7001 LDBL_MAX, DBL_MAX, FLT_MAX);
c135cc1b
JM
7002 TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
7003 TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
64b02fd2 7004
757de559
UD
7005#ifdef TEST_LDOUBLE
7006 // XXX Enable once gcc is fixed.
7007 //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
7008#endif
7009
8847214f
UD
7010 /* XXX We need the hexadecimal FP number representation here for further
7011 tests. */
7012
7013 END (nextafter);
7014}
7015
fe559c5e 7016
8847214f
UD
7017static void
7018nexttoward_test (void)
7019{
7020 START (nexttoward);
7021 TEST_ff_f (nexttoward, 0, 0, 0);
7022 TEST_ff_f (nexttoward, minus_zero, 0, 0);
7023 TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
7024 TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
7025
7026 TEST_ff_f (nexttoward, 9, 9, 9);
7027 TEST_ff_f (nexttoward, -9, -9, -9);
7028 TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
7029 TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
7030
3c6cad26
UD
7031 TEST_ff_f (nexttoward, nan_value, 1.1L, nan_value);
7032 TEST_ff_f (nexttoward, 1.1L, nan_value, nan_value);
8847214f
UD
7033 TEST_ff_f (nexttoward, nan_value, nan_value, nan_value);
7034
7cb029ee
JM
7035#ifdef TEST_FLOAT
7036 TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
7037 TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
7038 TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
7039 TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
7040 TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
7041 TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
7042 TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
7043 TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
7044 TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
7045 TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
7046 TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
7047 TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
80bad0cc 7048 TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
7cb029ee
JM
7049# if LDBL_MANT_DIG >= 64
7050 TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
7051 TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
7052 TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
7053 TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
7054# endif
7055# if LDBL_MANT_DIG >= 106
7056 TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
7057 TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
7058 TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
7059 TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
7060# endif
7061# if LDBL_MANT_DIG >= 113
7062 TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
7063 TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
7064 TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
7065 TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
7066# endif
7067#endif
7068#ifdef TEST_DOUBLE
7069 TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
7070 TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
7071 TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
7072 TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
7073 TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
7074 TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
7075 TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
7076 TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
7077 TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
7078 TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
7079 TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
7080 TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
7081 TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
80bad0cc 7082 TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
7cb029ee
JM
7083# if LDBL_MANT_DIG >= 64
7084 TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
7085 TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
7086 TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
7087 TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
7088# endif
7089# if LDBL_MANT_DIG >= 106
7090 TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
7091 TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
7092 TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
7093 TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
7094# endif
7095# if LDBL_MANT_DIG >= 113
7096 TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
7097 TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
7098 TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
7099 TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
7100# endif
7101#endif
8847214f
UD
7102
7103 END (nexttoward);
7104}
8847214f
UD
7105
7106
7107static void
7108pow_test (void)
7109{
7110
e6d3c4a7
AJ
7111 errno = 0;
7112 FUNC(pow) (0, 0);
7113 if (errno == ENOSYS)
7114 /* Function not implemented. */
7115 return;
7116
8847214f
UD
7117 START (pow);
7118
7119 TEST_ff_f (pow, 0, 0, 1);
7120 TEST_ff_f (pow, 0, minus_zero, 1);
7121 TEST_ff_f (pow, minus_zero, 0, 1);
7122 TEST_ff_f (pow, minus_zero, minus_zero, 1);
7123
7124 TEST_ff_f (pow, 10, 0, 1);
7125 TEST_ff_f (pow, 10, minus_zero, 1);
7126 TEST_ff_f (pow, -10, 0, 1);
7127 TEST_ff_f (pow, -10, minus_zero, 1);
7128
7129 TEST_ff_f (pow, nan_value, 0, 1);
7130 TEST_ff_f (pow, nan_value, minus_zero, 1);
7131
7132
15daa639 7133#ifndef TEST_INLINE
3c6cad26 7134 TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
8847214f 7135 TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
3c6cad26 7136 TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
8847214f
UD
7137 TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
7138
7139 TEST_ff_f (pow, 0.9L, plus_infty, 0);
7140 TEST_ff_f (pow, 1e-7L, plus_infty, 0);
7141 TEST_ff_f (pow, -0.9L, plus_infty, 0);
7142 TEST_ff_f (pow, -1e-7L, plus_infty, 0);
7143
3c6cad26 7144 TEST_ff_f (pow, 1.1L, minus_infty, 0);
8847214f 7145 TEST_ff_f (pow, plus_infty, minus_infty, 0);
3c6cad26 7146 TEST_ff_f (pow, -1.1L, minus_infty, 0);
8847214f
UD
7147 TEST_ff_f (pow, minus_infty, minus_infty, 0);
7148
7149 TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
7150 TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
7151 TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
7152 TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
7153
7154 TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
7155 TEST_ff_f (pow, plus_infty, 1, plus_infty);
7156 TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
7157
7158 TEST_ff_f (pow, plus_infty, -1e-7L, 0);
7159 TEST_ff_f (pow, plus_infty, -1, 0);
7160 TEST_ff_f (pow, plus_infty, -1e7L, 0);
7161
7162 TEST_ff_f (pow, minus_infty, 1, minus_infty);
7163 TEST_ff_f (pow, minus_infty, 11, minus_infty);
7164 TEST_ff_f (pow, minus_infty, 1001, minus_infty);
7165
7166 TEST_ff_f (pow, minus_infty, 2, plus_infty);
7167 TEST_ff_f (pow, minus_infty, 12, plus_infty);
7168 TEST_ff_f (pow, minus_infty, 1002, plus_infty);
3c6cad26
UD
7169 TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
7170 TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
7171 TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
7172 TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
8847214f
UD
7173
7174 TEST_ff_f (pow, minus_infty, -1, minus_zero);
7175 TEST_ff_f (pow, minus_infty, -11, minus_zero);
7176 TEST_ff_f (pow, minus_infty, -1001, minus_zero);
7177
7178 TEST_ff_f (pow, minus_infty, -2, 0);
7179 TEST_ff_f (pow, minus_infty, -12, 0);
7180 TEST_ff_f (pow, minus_infty, -1002, 0);
3c6cad26
UD
7181 TEST_ff_f (pow, minus_infty, -0.1L, 0);
7182 TEST_ff_f (pow, minus_infty, -1.1L, 0);
7183 TEST_ff_f (pow, minus_infty, -11.1L, 0);
7184 TEST_ff_f (pow, minus_infty, -1001.1L, 0);
15daa639 7185#endif
8847214f
UD
7186
7187 TEST_ff_f (pow, nan_value, nan_value, nan_value);
7188 TEST_ff_f (pow, 0, nan_value, nan_value);
6571c570 7189 TEST_ff_f (pow, 1, nan_value, 1);
8847214f
UD
7190 TEST_ff_f (pow, -1, nan_value, nan_value);
7191 TEST_ff_f (pow, nan_value, 1, nan_value);
7192 TEST_ff_f (pow, nan_value, -1, nan_value);
7193
7194 /* pow (x, NaN) == NaN. */
7195 TEST_ff_f (pow, 3.0, nan_value, nan_value);
8f3edfee
UD
7196 TEST_ff_f (pow, minus_zero, nan_value, nan_value);
7197 TEST_ff_f (pow, plus_infty, nan_value, nan_value);
7198 TEST_ff_f (pow, -3.0, nan_value, nan_value);
7199 TEST_ff_f (pow, minus_infty, nan_value, nan_value);
7200
7201 TEST_ff_f (pow, nan_value, 3.0, nan_value);
7202 TEST_ff_f (pow, nan_value, -3.0, nan_value);
7203 TEST_ff_f (pow, nan_value, plus_infty, nan_value);
7204 TEST_ff_f (pow, nan_value, minus_infty, nan_value);
7205 TEST_ff_f (pow, nan_value, 2.5, nan_value);
7206 TEST_ff_f (pow, nan_value, -2.5, nan_value);
8847214f 7207
6571c570
UD
7208 TEST_ff_f (pow, 1, plus_infty, 1);
7209 TEST_ff_f (pow, -1, plus_infty, 1);
7210 TEST_ff_f (pow, 1, minus_infty, 1);
7211 TEST_ff_f (pow, -1, minus_infty, 1);
164f863e
UD
7212 TEST_ff_f (pow, 1, 1, 1);
7213 TEST_ff_f (pow, 1, -1, 1);
7214 TEST_ff_f (pow, 1, 1.25, 1);
7215 TEST_ff_f (pow, 1, -1.25, 1);
7216 TEST_ff_f (pow, 1, 0x1p62L, 1);
7217 TEST_ff_f (pow, 1, 0x1p63L, 1);
7218 TEST_ff_f (pow, 1, 0x1p64L, 1);
7219 TEST_ff_f (pow, 1, 0x1p72L, 1);
7220
7221 /* pow (x, +-0) == 1. */
7222 TEST_ff_f (pow, plus_infty, 0, 1);
7223 TEST_ff_f (pow, plus_infty, minus_zero, 1);
7224 TEST_ff_f (pow, minus_infty, 0, 1);
7225 TEST_ff_f (pow, minus_infty, minus_zero, 1);
7226 TEST_ff_f (pow, 32.75L, 0, 1);
7227 TEST_ff_f (pow, 32.75L, minus_zero, 1);
7228 TEST_ff_f (pow, -32.75L, 0, 1);
7229 TEST_ff_f (pow, -32.75L, minus_zero, 1);
7230 TEST_ff_f (pow, 0x1p72L, 0, 1);
7231 TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
7232 TEST_ff_f (pow, 0x1p-72L, 0, 1);
7233 TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
8847214f 7234
3c6cad26
UD
7235 TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION);
7236 TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION);
7237 TEST_ff_f (pow, -10.1L, 1.1L, nan_value, INVALID_EXCEPTION);
7238 TEST_ff_f (pow, -10.1L, -1.1L, nan_value, INVALID_EXCEPTION);
8847214f 7239
002a604f 7240 errno = 0;
8847214f 7241 TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
7242 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7243 errno = 0;
8847214f 7244 TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
7245 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7246 errno = 0;
2460d3aa
JM
7247 TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7248 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7249#ifndef TEST_FLOAT
7250 errno = 0;
7251 TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7252 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7253#endif
7254#ifdef TEST_LDOUBLE
7255# if LDBL_MANT_DIG >= 64
7256 errno = 0;
7257 TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7258 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7259# endif
7260# if LDBL_MANT_DIG >= 106
7261 errno = 0;
7262 TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7263 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7264# endif
7265# if LDBL_MANT_DIG >= 113
7266 errno = 0;
7267 TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7268 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7269# endif
7270#endif
8847214f 7271 TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
7272 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7273 errno = 0;
7274 TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7275 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
2460d3aa
JM
7276 errno = 0;
7277 TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7278 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7279 errno = 0;
7280 TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7281 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
7282#ifndef TEST_FLOAT
7283 errno = 0;
7284 TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7285 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7286 errno = 0;
7287 TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7288 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
7289#endif
7290#ifdef TEST_LDOUBLE
7291# if LDBL_MANT_DIG >= 64
7292 errno = 0;
7293 TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7294 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7295 errno = 0;
7296 TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7297 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
7298# endif
7299# if LDBL_MANT_DIG >= 106
7300 errno = 0;
7301 TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7302 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7303 errno = 0;
7304 TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7305 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
7306# endif
7307# if LDBL_MANT_DIG >= 113
7308 errno = 0;
7309 TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7310 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
7311 errno = 0;
7312 TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7313 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
7314# endif
7315#endif
8847214f 7316
002a604f 7317 errno = 0;
8847214f 7318 TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
7319 check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
7320 errno = 0;
3c6cad26 7321 TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
7322 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
7323 errno = 0;
2460d3aa
JM
7324 TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7325 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
7326 errno = 0;
7327 TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7328 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
7329 errno = 0;
41bf21a1 7330 TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
2460d3aa
JM
7331 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
7332 errno = 0;
8847214f 7333 TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
7334 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
7335 errno = 0;
3c6cad26 7336 TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f 7337 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
2460d3aa
JM
7338 errno = 0;
7339 TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7340 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
7341 errno = 0;
7342 TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7343 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
7344 errno = 0;
41bf21a1 7345 TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
2460d3aa 7346 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
8847214f 7347
c135cc1b 7348 TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 7349 TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
d7dd9453 7350 TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 7351 TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
8847214f
UD
7352
7353 TEST_ff_f (pow, 0, 1, 0);
7354 TEST_ff_f (pow, 0, 11, 0);
7355
7356 TEST_ff_f (pow, minus_zero, 1, minus_zero);
7357 TEST_ff_f (pow, minus_zero, 11, minus_zero);
7358
8847214f 7359 TEST_ff_f (pow, 0, 2, 0);
3c6cad26 7360 TEST_ff_f (pow, 0, 11.1L, 0);
8847214f 7361
8847214f 7362 TEST_ff_f (pow, minus_zero, 2, 0);
3c6cad26 7363 TEST_ff_f (pow, minus_zero, 11.1L, 0);
164f863e
UD
7364 TEST_ff_f (pow, 0, plus_infty, 0);
7365 TEST_ff_f (pow, minus_zero, plus_infty, 0);
10285c21
JM
7366 TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
7367 TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
8847214f 7368
15daa639 7369#ifndef TEST_INLINE
8847214f
UD
7370 /* pow (x, +inf) == +inf for |x| > 1. */
7371 TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
7372
7373 /* pow (x, +inf) == +0 for |x| < 1. */
7374 TEST_ff_f (pow, 0.5, plus_infty, 0.0);
7375
7376 /* pow (x, -inf) == +0 for |x| > 1. */
7377 TEST_ff_f (pow, 1.5, minus_infty, 0.0);
7378
7379 /* pow (x, -inf) == +inf for |x| < 1. */
7380 TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
15daa639 7381#endif
8847214f
UD
7382
7383 /* pow (+inf, y) == +inf for y > 0. */
7384 TEST_ff_f (pow, plus_infty, 2, plus_infty);
2460d3aa
JM
7385 TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
7386#ifndef TEST_FLOAT
7387 TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
7388#endif
7389#ifdef TEST_LDOUBLE
7390# if LDBL_MANT_DIG >= 64
7391 TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
7392# endif
7393# if LDBL_MANT_DIG >= 106
7394 TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
7395# endif
7396# if LDBL_MANT_DIG >= 113
7397 TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
7398# endif
7399#endif
7400 TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
7401 TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
7402 TEST_ff_f (pow, plus_infty, max_value, plus_infty);
8847214f
UD
7403
7404 /* pow (+inf, y) == +0 for y < 0. */
7405 TEST_ff_f (pow, plus_infty, -1, 0.0);
2460d3aa
JM
7406 TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
7407#ifndef TEST_FLOAT
7408 TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
7409#endif
7410#ifdef TEST_LDOUBLE
7411# if LDBL_MANT_DIG >= 64
7412 TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
7413# endif
7414# if LDBL_MANT_DIG >= 106
7415 TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
7416# endif
7417# if LDBL_MANT_DIG >= 113
7418 TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
7419# endif
7420#endif
7421 TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
7422 TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
7423 TEST_ff_f (pow, plus_infty, -max_value, 0.0);
8847214f
UD
7424
7425 /* pow (-inf, y) == -inf for y an odd integer > 0. */
7426 TEST_ff_f (pow, minus_infty, 27, minus_infty);
2460d3aa
JM
7427 TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
7428 TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
7429#ifndef TEST_FLOAT
7430 TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
7431 TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
7432#endif
7433#ifdef TEST_LDOUBLE
7434# if LDBL_MANT_DIG >= 64
7435 TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
7436 TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
7437# endif
7438# if LDBL_MANT_DIG >= 106
7439 TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
7440 TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
7441# endif
7442# if LDBL_MANT_DIG >= 113
7443 TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
7444 TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
7445# endif
7446#endif
8847214f
UD
7447
7448 /* pow (-inf, y) == +inf for y > 0 and not an odd integer. */
7449 TEST_ff_f (pow, minus_infty, 28, plus_infty);
2460d3aa
JM
7450 TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
7451 TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
7452 TEST_ff_f (pow, minus_infty, max_value, plus_infty);
8847214f
UD
7453
7454 /* pow (-inf, y) == -0 for y an odd integer < 0. */
7455 TEST_ff_f (pow, minus_infty, -3, minus_zero);
2460d3aa
JM
7456 TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
7457 TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
7458#ifndef TEST_FLOAT
7459 TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
7460 TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
7461#endif
7462#ifdef TEST_LDOUBLE
7463# if LDBL_MANT_DIG >= 64
7464 TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
7465 TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
7466# endif
7467# if LDBL_MANT_DIG >= 106
7468 TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
7469 TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
7470# endif
7471# if LDBL_MANT_DIG >= 113
7472 TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
7473 TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
7474# endif
7475#endif
8847214f
UD
7476 /* pow (-inf, y) == +0 for y < 0 and not an odd integer. */
7477 TEST_ff_f (pow, minus_infty, -2.0, 0.0);
2460d3aa
JM
7478 TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
7479 TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
7480 TEST_ff_f (pow, minus_infty, -max_value, 0.0);
8847214f
UD
7481
7482 /* pow (+0, y) == +0 for y an odd integer > 0. */
7483 TEST_ff_f (pow, 0.0, 27, 0.0);
2460d3aa
JM
7484 TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
7485#ifndef TEST_FLOAT
7486 TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
7487#endif
7488#ifdef TEST_LDOUBLE
7489# if LDBL_MANT_DIG >= 64
7490 TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
7491# endif
7492# if LDBL_MANT_DIG >= 106
7493 TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
7494# endif
7495# if LDBL_MANT_DIG >= 113
7496 TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
7497# endif
7498#endif
8847214f
UD
7499
7500 /* pow (-0, y) == -0 for y an odd integer > 0. */
7501 TEST_ff_f (pow, minus_zero, 27, minus_zero);
2460d3aa
JM
7502 TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
7503 TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
7504#ifndef TEST_FLOAT
7505 TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
7506 TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
7507#endif
7508#ifdef TEST_LDOUBLE
7509# if LDBL_MANT_DIG >= 64
7510 TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
7511 TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
7512# endif
7513# if LDBL_MANT_DIG >= 106
7514 TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
7515 TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
7516# endif
7517# if LDBL_MANT_DIG >= 113
7518 TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
7519 TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
7520# endif
7521#endif
8847214f
UD
7522
7523 /* pow (+0, y) == +0 for y > 0 and not an odd integer. */
7524 TEST_ff_f (pow, 0.0, 4, 0.0);
2460d3aa
JM
7525 TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
7526 TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
7527 TEST_ff_f (pow, 0.0, max_value, 0.0);
8847214f
UD
7528
7529 /* pow (-0, y) == +0 for y > 0 and not an odd integer. */
7530 TEST_ff_f (pow, minus_zero, 4, 0.0);
2460d3aa
JM
7531 TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
7532 TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
7533 TEST_ff_f (pow, minus_zero, max_value, 0.0);
8847214f 7534
164f863e
UD
7535 TEST_ff_f (pow, 16, 0.25L, 2);
7536 TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
7537 TEST_ff_f (pow, 2, 4, 16);
7538 TEST_ff_f (pow, 256, 8, 0x1p64L);
7539
2550dfe9 7540 TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
8847214f 7541
4c95adde 7542#if defined TEST_DOUBLE || defined TEST_LDOUBLE
80bad0cc 7543 TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
8847214f
UD
7544#endif
7545
d6270972
JM
7546 TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
7547 TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
7548#ifndef TEST_FLOAT
7549 TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
7550 TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
7551#endif
7552#ifdef TEST_LDOUBLE
7553# if LDBL_MANT_DIG >= 64
7554 TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
7555 TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
7556# endif
7557# if LDBL_MANT_DIG >= 106
7558 TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
7559 TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
7560# endif
7561# if LDBL_MANT_DIG >= 113
7562 TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
7563 TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
7564# endif
7565#endif
7566 TEST_ff_f (pow, -1.0, -max_value, 1.0);
7567
7568 TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
7569 TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
7570#ifndef TEST_FLOAT
7571 TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
7572 TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
7573#endif
7574#ifdef TEST_LDOUBLE
7575# if LDBL_MANT_DIG >= 64
7576 TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
7577 TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
7578# endif
7579# if LDBL_MANT_DIG >= 106
7580 TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
7581 TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
7582# endif
7583# if LDBL_MANT_DIG >= 113
7584 TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
7585 TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
7586# endif
7587#endif
7588 TEST_ff_f (pow, -1.0, max_value, 1.0);
7589
7590 TEST_ff_f (pow, -2.0, 126, 0x1p126);
7591 TEST_ff_f (pow, -2.0, 127, -0x1p127);
80bad0cc
JM
7592 /* Allow inexact results for float to be considered to underflow. */
7593 TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
7594 TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
d6270972 7595
80bad0cc
JM
7596 TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
7597 TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
d6270972 7598#ifndef TEST_FLOAT
80bad0cc
JM
7599 TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
7600 TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7601#endif
7602#ifdef TEST_LDOUBLE
7603# if LDBL_MANT_DIG >= 64
80bad0cc
JM
7604 TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
7605 TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7606# endif
7607# if LDBL_MANT_DIG >= 106
80bad0cc
JM
7608 TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
7609 TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7610# endif
7611# if LDBL_MANT_DIG >= 113
80bad0cc
JM
7612 TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
7613 TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7614# endif
7615#endif
80bad0cc 7616 TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7617
7618 TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
7619 TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
7620#ifndef TEST_FLOAT
7621 TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
7622 TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
7623#endif
7624#ifdef TEST_LDOUBLE
7625# if LDBL_MANT_DIG >= 64
7626 TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
7627 TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
7628# endif
7629# if LDBL_MANT_DIG >= 106
7630 TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
7631 TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
7632# endif
7633# if LDBL_MANT_DIG >= 113
7634 TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
7635 TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
7636# endif
7637#endif
d7dd9453 7638 TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
d6270972
JM
7639
7640 TEST_ff_f (pow, -max_value, 0.5, nan_value, INVALID_EXCEPTION);
7641 TEST_ff_f (pow, -max_value, 1.5, nan_value, INVALID_EXCEPTION);
7642 TEST_ff_f (pow, -max_value, 1000.5, nan_value, INVALID_EXCEPTION);
80bad0cc
JM
7643 TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
7644 TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7645 TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
7646 TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
7647
80bad0cc
JM
7648 TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
7649 TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
d6270972 7650#ifndef TEST_FLOAT
80bad0cc
JM
7651 TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
7652 TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7653#endif
7654#ifdef TEST_LDOUBLE
7655# if LDBL_MANT_DIG >= 64
80bad0cc
JM
7656 TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
7657 TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7658# endif
7659# if LDBL_MANT_DIG >= 106
80bad0cc
JM
7660 TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
7661 TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7662# endif
7663# if LDBL_MANT_DIG >= 113
80bad0cc
JM
7664 TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
7665 TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7666# endif
7667#endif
80bad0cc 7668 TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7669
7670 TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
7671 TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
7672#ifndef TEST_FLOAT
7673 TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
7674 TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
7675#endif
7676#ifdef TEST_LDOUBLE
7677# if LDBL_MANT_DIG >= 64
7678 TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
7679 TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
7680# endif
7681# if LDBL_MANT_DIG >= 106
7682 TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
7683 TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
7684# endif
7685# if LDBL_MANT_DIG >= 113
7686 TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
7687 TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
7688# endif
7689#endif
d7dd9453 7690 TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
d6270972
JM
7691
7692 TEST_ff_f (pow, -0.5, 126, 0x1p-126);
7693 TEST_ff_f (pow, -0.5, 127, -0x1p-127);
7694 TEST_ff_f (pow, -0.5, -126, 0x1p126);
7695 TEST_ff_f (pow, -0.5, -127, -0x1p127);
7696
7697 TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
7698 TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
7699#ifndef TEST_FLOAT
7700 TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
7701 TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
7702#endif
7703#ifdef TEST_LDOUBLE
7704# if LDBL_MANT_DIG >= 64
7705 TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
7706 TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
7707# endif
7708# if LDBL_MANT_DIG >= 106
7709 TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
7710 TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
7711# endif
7712# if LDBL_MANT_DIG >= 113
7713 TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
7714 TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
7715# endif
7716#endif
d7dd9453 7717 TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
d6270972 7718
80bad0cc
JM
7719 TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
7720 TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
d6270972 7721#ifndef TEST_FLOAT
80bad0cc
JM
7722 TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
7723 TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7724#endif
7725#ifdef TEST_LDOUBLE
7726# if LDBL_MANT_DIG >= 64
80bad0cc
JM
7727 TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
7728 TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7729# endif
7730# if LDBL_MANT_DIG >= 106
80bad0cc
JM
7731 TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
7732 TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7733# endif
7734# if LDBL_MANT_DIG >= 113
80bad0cc
JM
7735 TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
7736 TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7737# endif
7738#endif
80bad0cc 7739 TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7740
7741 TEST_ff_f (pow, -min_value, 0.5, nan_value, INVALID_EXCEPTION);
7742 TEST_ff_f (pow, -min_value, 1.5, nan_value, INVALID_EXCEPTION);
7743 TEST_ff_f (pow, -min_value, 1000.5, nan_value, INVALID_EXCEPTION);
7744 TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
7745 TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
80bad0cc
JM
7746 /* Allow inexact results to be considered to underflow. */
7747 TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
7748 TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
7749 TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7750
7751 TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
7752 TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
7753#ifndef TEST_FLOAT
7754 TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
7755 TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
7756#endif
7757#ifdef TEST_LDOUBLE
7758# if LDBL_MANT_DIG >= 64
7759 TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
7760 TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
7761# endif
7762# if LDBL_MANT_DIG >= 106
7763 TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
7764 TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
7765# endif
7766# if LDBL_MANT_DIG >= 113
7767 TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
7768 TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
7769# endif
7770#endif
d7dd9453 7771 TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
d6270972 7772
80bad0cc
JM
7773 TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
7774 TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
d6270972 7775#ifndef TEST_FLOAT
80bad0cc
JM
7776 TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
7777 TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7778#endif
7779#ifdef TEST_LDOUBLE
7780# if LDBL_MANT_DIG >= 64
80bad0cc
JM
7781 TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
7782 TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7783# endif
7784# if LDBL_MANT_DIG >= 106
80bad0cc
JM
7785 TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
7786 TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7787# endif
7788# if LDBL_MANT_DIG >= 113
80bad0cc
JM
7789 TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
7790 TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
d6270972
JM
7791# endif
7792#endif
80bad0cc 7793 TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
d6270972 7794
c483f6b4
JM
7795#ifndef TEST_LDOUBLE /* Bug 13881. */
7796 TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
7797 TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
7798 TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
7799 TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
7800 TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
7801 TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
7802 TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
7803 TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
7804 TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
7805 TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
7806 TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
7807 TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
7808 TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
7809 TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
7810 TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
7811#endif
7812
7813 /* Bug 13881: powl inaccurate so these tests disabled for long double. */
7814#if !defined TEST_FLOAT && !defined TEST_LDOUBLE
7815 TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
7816 TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
7817 TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
7818 TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
7819#endif
7820
7a25eb06
JM
7821 TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
7822
8847214f
UD
7823 END (pow);
7824}
7825
b7cd39e8
JM
7826
7827static void
7828pow_test_tonearest (void)
7829{
7830 int save_round_mode;
7831 errno = 0;
7832 FUNC(pow) (0, 0);
7833 if (errno == ENOSYS)
7834 /* Function not implemented. */
7835 return;
7836
7837 START (pow_tonearest);
7838
7839 save_round_mode = fegetround ();
7840
7841 if (!fesetround (FE_TONEAREST))
7842 {
7843 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
7844 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
7845 }
7846
7847 fesetround (save_round_mode);
7848
7849 END (pow_tonearest);
7850}
7851
7852
7853static void
7854pow_test_towardzero (void)
7855{
7856 int save_round_mode;
7857 errno = 0;
7858 FUNC(pow) (0, 0);
7859 if (errno == ENOSYS)
7860 /* Function not implemented. */
7861 return;
7862
7863 START (pow_towardzero);
7864
7865 save_round_mode = fegetround ();
7866
7867 if (!fesetround (FE_TOWARDZERO))
7868 {
7869 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
7870 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
7871 }
7872
7873 fesetround (save_round_mode);
7874
7875 END (pow_towardzero);
7876}
7877
7878
7879static void
7880pow_test_downward (void)
7881{
7882 int save_round_mode;
7883 errno = 0;
7884 FUNC(pow) (0, 0);
7885 if (errno == ENOSYS)
7886 /* Function not implemented. */
7887 return;
7888
7889 START (pow_downward);
7890
7891 save_round_mode = fegetround ();
7892
7893 if (!fesetround (FE_DOWNWARD))
7894 {
7895 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
7896 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
7897 }
7898
7899 fesetround (save_round_mode);
7900
7901 END (pow_downward);
7902}
7903
7904
7905static void
7906pow_test_upward (void)
7907{
7908 int save_round_mode;
7909 errno = 0;
7910 FUNC(pow) (0, 0);
7911 if (errno == ENOSYS)
7912 /* Function not implemented. */
7913 return;
7914
7915 START (pow_upward);
7916
7917 save_round_mode = fegetround ();
7918
7919 if (!fesetround (FE_UPWARD))
7920 {
7921 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
7922 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
7923 }
7924
7925 fesetround (save_round_mode);
7926
7927 END (pow_upward);
7928}
7929
7930
8847214f
UD
7931static void
7932remainder_test (void)
7933{
aaca11d8
UD
7934 errno = 0;
7935 FUNC(remainder) (1.625, 1.0);
7936 if (errno == ENOSYS)
7937 /* Function not implemented. */
7938 return;
8847214f
UD
7939
7940 START (remainder);
7941
bf582445 7942 errno = 0;
8847214f 7943 TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
bf582445
AJ
7944 check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
7945 errno = 0;
8847214f 7946 TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
bf582445
AJ
7947 check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
7948 errno = 0;
8847214f 7949 TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
bf582445
AJ
7950 check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
7951 errno = 0;
8847214f 7952 TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
bf582445
AJ
7953 check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
7954 errno = 0;
15daa639 7955 TEST_ff_f (remainder, nan_value, nan_value, nan_value);
bf582445
AJ
7956 check_int ("errno for remainder(NAN, NAN) unchanged", errno, 0, 0, 0, 0);
7957 errno = 0;
7958 TEST_ff_f (remainder, 0, nan_value, nan_value);
7959 check_int ("errno for remainder(0, NAN) unchanged", errno, 0, 0, 0, 0);
7960 errno = 0;
7961 TEST_ff_f (remainder, nan_value, 0, nan_value);
7962 check_int ("errno for remainder(NaN, 0) unchanged", errno, 0, 0, 0, 0);
8847214f
UD
7963
7964 TEST_ff_f (remainder, 1.625, 1.0, -0.375);
7965 TEST_ff_f (remainder, -1.625, 1.0, 0.375);
7966 TEST_ff_f (remainder, 1.625, -1.0, -0.375);
7967 TEST_ff_f (remainder, -1.625, -1.0, 0.375);
7968 TEST_ff_f (remainder, 5.0, 2.0, 1.0);
7969 TEST_ff_f (remainder, 3.0, 2.0, -1.0);
7970
7971 END (remainder);
7972}
7973
7974static void
7975remquo_test (void)
7976{
7977 /* x is needed. */
7978 int x;
7979
aaca11d8
UD
7980 errno = 0;
7981 FUNC(remquo) (1.625, 1.0, &x);
7982 if (errno == ENOSYS)
7983 /* Function not implemented. */
7984 return;
7985
8847214f
UD
7986 START (remquo);
7987
7988 TEST_ffI_f1 (remquo, 1, 0, nan_value, IGNORE, INVALID_EXCEPTION);
7989 TEST_ffI_f1 (remquo, 1, minus_zero, nan_value, IGNORE, INVALID_EXCEPTION);
7990 TEST_ffI_f1 (remquo, plus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
7991 TEST_ffI_f1 (remquo, minus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
15daa639 7992 TEST_ffI_f1 (remquo, nan_value, nan_value, nan_value, IGNORE);
8847214f
UD
7993
7994 TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
7995 TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
7996 TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
7997 TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
7998
7999 TEST_ffI_f1 (remquo, 5, 2, 1, 2);
8000 TEST_ffI_f1 (remquo, 3, 2, -1, 2);
8001
8002 END (remquo);
8003}
8004
8005static void
8006rint_test (void)
8007{
8008 START (rint);
8009
8010 TEST_f_f (rint, 0.0, 0.0);
8011 TEST_f_f (rint, minus_zero, minus_zero);
8012 TEST_f_f (rint, plus_infty, plus_infty);
8013 TEST_f_f (rint, minus_infty, minus_infty);
8014
9949bc63 8015 /* Default rounding mode is round to even. */
1dc23588
UD
8016 TEST_f_f (rint, 0.5, 0.0);
8017 TEST_f_f (rint, 1.5, 2.0);
9949bc63
UD
8018 TEST_f_f (rint, 2.5, 2.0);
8019 TEST_f_f (rint, 3.5, 4.0);
8020 TEST_f_f (rint, 4.5, 4.0);
1dc23588
UD
8021 TEST_f_f (rint, -0.5, -0.0);
8022 TEST_f_f (rint, -1.5, -2.0);
9949bc63
UD
8023 TEST_f_f (rint, -2.5, -2.0);
8024 TEST_f_f (rint, -3.5, -4.0);
8025 TEST_f_f (rint, -4.5, -4.0);
5c68d401
RM
8026 TEST_f_f (rint, 0.1, 0.0);
8027 TEST_f_f (rint, 0.25, 0.0);
8028 TEST_f_f (rint, 0.625, 1.0);
8029 TEST_f_f (rint, -0.1, -0.0);
8030 TEST_f_f (rint, -0.25, -0.0);
8031 TEST_f_f (rint, -0.625, -1.0);
af0498dc
UD
8032 TEST_f_f (rint, 262144.75, 262145.0);
8033 TEST_f_f (rint, 262142.75, 262143.0);
8034 TEST_f_f (rint, 524286.75, 524287.0);
8035 TEST_f_f (rint, 524288.75, 524289.0);
fe45ce09
JM
8036 TEST_f_f (rint, 1048576.75, 1048577.0);
8037 TEST_f_f (rint, 2097152.75, 2097153.0);
8038 TEST_f_f (rint, -1048576.75, -1048577.0);
8039 TEST_f_f (rint, -2097152.75, -2097153.0);
8040#ifndef TEST_FLOAT
8041 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
8042 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
8043 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
8044 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
8045 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
8046 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
8047 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
8048 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
8049 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
8050 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
8051#endif
f964490f
RM
8052#ifdef TEST_LDOUBLE
8053 /* The result can only be represented in long double. */
8054 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
8055 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
8056 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
8057 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
8058 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
830fce04 8059
5c68d401
RM
8060# if LDBL_MANT_DIG > 100
8061 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
8062 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
8063 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
8064# endif
f964490f
RM
8065
8066 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
8067 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
8068 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
8069 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
8070 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
830fce04 8071
5c68d401
RM
8072# if LDBL_MANT_DIG > 100
8073 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
8074 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
8075 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
8076
8077 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
8078 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
8079 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
8080 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
8081 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
8082 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
8083
8084 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
8085 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
8086 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
8087 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
8088 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
8089 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
8090# endif
f964490f
RM
8091
8092 TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
8093 TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
8094 TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
8095 TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
8096 TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
8097
8098 TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
8099 TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
8100 TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
8101 TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
8102 TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
8103
8104 TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
8105 TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
8106 TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
8107 TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
8108 TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
8109
8110 TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
8111 TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
8112 TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
8113 TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
8114 TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
8115
8116 TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
8117 TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
8118 TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
8119 TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
8120 TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
8121#endif
1dc23588 8122
8847214f
UD
8123 END (rint);
8124}
8125
4d37c8aa
UD
8126static void
8127rint_test_tonearest (void)
8128{
8129 int save_round_mode;
8130 START (rint_tonearest);
8131
830fce04 8132 save_round_mode = fegetround ();
4d37c8aa
UD
8133
8134 if (!fesetround (FE_TONEAREST))
830fce04
RM
8135 {
8136 TEST_f_f (rint, 2.0, 2.0);
8137 TEST_f_f (rint, 1.5, 2.0);
8138 TEST_f_f (rint, 1.0, 1.0);
8139 TEST_f_f (rint, 0.5, 0.0);
8140 TEST_f_f (rint, 0.0, 0.0);
8141 TEST_f_f (rint, minus_zero, minus_zero);
8142 TEST_f_f (rint, -0.5, -0.0);
8143 TEST_f_f (rint, -1.0, -1.0);
8144 TEST_f_f (rint, -1.5, -2.0);
8145 TEST_f_f (rint, -2.0, -2.0);
8146 TEST_f_f (rint, 0.1, 0.0);
8147 TEST_f_f (rint, 0.25, 0.0);
8148 TEST_f_f (rint, 0.625, 1.0);
8149 TEST_f_f (rint, -0.1, -0.0);
8150 TEST_f_f (rint, -0.25, -0.0);
8151 TEST_f_f (rint, -0.625, -1.0);
fe45ce09
JM
8152 TEST_f_f (rint, 1048576.75, 1048577.0);
8153 TEST_f_f (rint, 2097152.75, 2097153.0);
8154 TEST_f_f (rint, -1048576.75, -1048577.0);
8155 TEST_f_f (rint, -2097152.75, -2097153.0);
8156#ifndef TEST_FLOAT
8157 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
8158 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
8159 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
8160 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
8161 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
8162 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
8163 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
8164 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
8165 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
8166 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
8167#endif
5c68d401 8168#ifdef TEST_LDOUBLE
830fce04
RM
8169 /* The result can only be represented in long double. */
8170 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
8171 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
8172 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
8173 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
8174 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5c68d401 8175# if LDBL_MANT_DIG > 100
830fce04
RM
8176 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
8177 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
8178 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5c68d401 8179# endif
830fce04
RM
8180 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
8181 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
8182 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
8183 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
8184 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5c68d401 8185# if LDBL_MANT_DIG > 100
830fce04
RM
8186 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
8187 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
8188 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
8189
8190 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
8191 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
8192 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
8193 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
8194 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
8195 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
8196
8197 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
8198 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
8199 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
8200 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
8201 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
8202 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5c68d401
RM
8203# endif
8204#endif
830fce04 8205 }
4d37c8aa 8206
830fce04 8207 fesetround (save_round_mode);
4d37c8aa
UD
8208
8209 END (rint_tonearest);
8210}
8211
8212static void
8213rint_test_towardzero (void)
8214{
8215 int save_round_mode;
8216 START (rint_towardzero);
8217
830fce04 8218 save_round_mode = fegetround ();
4d37c8aa
UD
8219
8220 if (!fesetround (FE_TOWARDZERO))
830fce04
RM
8221 {
8222 TEST_f_f (rint, 2.0, 2.0);
8223 TEST_f_f (rint, 1.5, 1.0);
8224 TEST_f_f (rint, 1.0, 1.0);
8225 TEST_f_f (rint, 0.5, 0.0);
8226 TEST_f_f (rint, 0.0, 0.0);
8227 TEST_f_f (rint, minus_zero, minus_zero);
8228 TEST_f_f (rint, -0.5, -0.0);
8229 TEST_f_f (rint, -1.0, -1.0);
8230 TEST_f_f (rint, -1.5, -1.0);
8231 TEST_f_f (rint, -2.0, -2.0);
8232 TEST_f_f (rint, 0.1, 0.0);
8233 TEST_f_f (rint, 0.25, 0.0);
8234 TEST_f_f (rint, 0.625, 0.0);
8235 TEST_f_f (rint, -0.1, -0.0);
8236 TEST_f_f (rint, -0.25, -0.0);
8237 TEST_f_f (rint, -0.625, -0.0);
fe45ce09
JM
8238 TEST_f_f (rint, 1048576.75, 1048576.0);
8239 TEST_f_f (rint, 2097152.75, 2097152.0);
8240 TEST_f_f (rint, -1048576.75, -1048576.0);
8241 TEST_f_f (rint, -2097152.75, -2097152.0);
8242#ifndef TEST_FLOAT
8243 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
8244 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
8245 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
8246 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
8247 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
8248 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
8249 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
8250 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
8251 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
8252 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
8253#endif
5c68d401 8254#ifdef TEST_LDOUBLE
830fce04
RM
8255 /* The result can only be represented in long double. */
8256 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
8257 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
8258 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
8259 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
8260 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5c68d401 8261# if LDBL_MANT_DIG > 100
830fce04
RM
8262 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
8263 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
8264 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5c68d401 8265# endif
830fce04
RM
8266 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
8267 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
8268 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
8269 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
8270 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5c68d401 8271# if LDBL_MANT_DIG > 100
830fce04
RM
8272 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
8273 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
8274 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
8275
8276 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
8277 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
8278 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
8279 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
8280 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
8281 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
8282
8283 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
8284 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
8285 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
8286 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
8287 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
8288 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5c68d401
RM
8289# endif
8290#endif
830fce04 8291 }
4d37c8aa 8292
830fce04 8293 fesetround (save_round_mode);
4d37c8aa
UD
8294
8295 END (rint_towardzero);
8296}
8297
8298static void
8299rint_test_downward (void)
8300{
8301 int save_round_mode;
8302 START (rint_downward);
8303
830fce04 8304 save_round_mode = fegetround ();
4d37c8aa
UD
8305
8306 if (!fesetround (FE_DOWNWARD))
830fce04
RM
8307 {
8308 TEST_f_f (rint, 2.0, 2.0);
8309 TEST_f_f (rint, 1.5, 1.0);
8310 TEST_f_f (rint, 1.0, 1.0);
8311 TEST_f_f (rint, 0.5, 0.0);
8312 TEST_f_f (rint, 0.0, 0.0);
8313 TEST_f_f (rint, minus_zero, minus_zero);
8314 TEST_f_f (rint, -0.5, -1.0);
8315 TEST_f_f (rint, -1.0, -1.0);
8316 TEST_f_f (rint, -1.5, -2.0);
8317 TEST_f_f (rint, -2.0, -2.0);
8318 TEST_f_f (rint, 0.1, 0.0);
8319 TEST_f_f (rint, 0.25, 0.0);
8320 TEST_f_f (rint, 0.625, 0.0);
8321 TEST_f_f (rint, -0.1, -1.0);
8322 TEST_f_f (rint, -0.25, -1.0);
8323 TEST_f_f (rint, -0.625, -1.0);
fe45ce09
JM
8324 TEST_f_f (rint, 1048576.75, 1048576.0);
8325 TEST_f_f (rint, 2097152.75, 2097152.0);
8326 TEST_f_f (rint, -1048576.75, -1048577.0);
8327 TEST_f_f (rint, -2097152.75, -2097153.0);
8328#ifndef TEST_FLOAT
8329 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
8330 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
8331 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
8332 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
8333 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
8334 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
8335 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
8336 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
8337 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
8338 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
8339#endif
5c68d401 8340#ifdef TEST_LDOUBLE
830fce04
RM
8341 /* The result can only be represented in long double. */
8342 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
8343 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
8344 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
8345 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
8346 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5c68d401 8347# if LDBL_MANT_DIG > 100
830fce04
RM
8348 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
8349 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
8350 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5c68d401 8351# endif
830fce04
RM
8352 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
8353 TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
8354 TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
8355 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
8356 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5c68d401 8357# if LDBL_MANT_DIG > 100
830fce04
RM
8358 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
8359 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
8360 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
8361
8362 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
8363 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
8364 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
8365 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
8366 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
8367 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
8368
8369 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
8370 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
8371 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
8372 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
8373 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
8374 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5c68d401
RM
8375# endif
8376#endif
830fce04 8377 }
4d37c8aa 8378
830fce04 8379 fesetround (save_round_mode);
4d37c8aa
UD
8380
8381 END (rint_downward);
8382}
8383
8384static void
8385rint_test_upward (void)
8386{
8387 int save_round_mode;
8388 START (rint_upward);
8389
830fce04 8390 save_round_mode = fegetround ();
4d37c8aa
UD
8391
8392 if (!fesetround (FE_UPWARD))
830fce04
RM
8393 {
8394 TEST_f_f (rint, 2.0, 2.0);
8395 TEST_f_f (rint, 1.5, 2.0);
8396 TEST_f_f (rint, 1.0, 1.0);
8397 TEST_f_f (rint, 0.5, 1.0);
8398 TEST_f_f (rint, 0.0, 0.0);
8399 TEST_f_f (rint, minus_zero, minus_zero);
8400 TEST_f_f (rint, -0.5, -0.0);
8401 TEST_f_f (rint, -1.0, -1.0);
8402 TEST_f_f (rint, -1.5, -1.0);
8403 TEST_f_f (rint, -2.0, -2.0);
8404 TEST_f_f (rint, 0.1, 1.0);
8405 TEST_f_f (rint, 0.25, 1.0);
8406 TEST_f_f (rint, 0.625, 1.0);
8407 TEST_f_f (rint, -0.1, -0.0);
8408 TEST_f_f (rint, -0.25, -0.0);
8409 TEST_f_f (rint, -0.625, -0.0);
fe45ce09
JM
8410 TEST_f_f (rint, 1048576.75, 1048577.0);
8411 TEST_f_f (rint, 2097152.75, 2097153.0);
8412 TEST_f_f (rint, -1048576.75, -1048576.0);
8413 TEST_f_f (rint, -2097152.75, -2097152.0);
8414#ifndef TEST_FLOAT
8415 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
8416 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
8417 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
8418 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
8419 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
8420 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
8421 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
8422 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
8423 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
8424 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
8425#endif
5c68d401 8426#ifdef TEST_LDOUBLE
830fce04
RM
8427 /* The result can only be represented in long double. */
8428 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
8429 TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
8430 TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
8431 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
8432 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5c68d401 8433# if LDBL_MANT_DIG > 100
830fce04
RM
8434 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
8435 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
8436 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5c68d401 8437# endif
830fce04
RM
8438 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
8439 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
8440 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
8441 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
8442 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5c68d401 8443# if LDBL_MANT_DIG > 100
830fce04
RM
8444 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
8445 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
8446 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
8447
8448 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
8449 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
8450 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
8451 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
8452 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
8453 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
8454
8455 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
8456 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
8457 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
8458 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
8459 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
8460 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5c68d401
RM
8461# endif
8462#endif
830fce04 8463 }
4d37c8aa 8464
830fce04 8465 fesetround (save_round_mode);
4d37c8aa
UD
8466
8467 END (rint_upward);
8468}
8469
8847214f
UD
8470static void
8471round_test (void)
8472{
8473 START (round);
8474
8475 TEST_f_f (round, 0, 0);
8476 TEST_f_f (round, minus_zero, minus_zero);
3c6cad26
UD
8477 TEST_f_f (round, 0.2L, 0.0);
8478 TEST_f_f (round, -0.2L, minus_zero);
8847214f
UD
8479 TEST_f_f (round, 0.5, 1.0);
8480 TEST_f_f (round, -0.5, -1.0);
3c6cad26
UD
8481 TEST_f_f (round, 0.8L, 1.0);
8482 TEST_f_f (round, -0.8L, -1.0);
8847214f
UD
8483 TEST_f_f (round, 1.5, 2.0);
8484 TEST_f_f (round, -1.5, -2.0);
5c68d401
RM
8485 TEST_f_f (round, 0.1, 0.0);
8486 TEST_f_f (round, 0.25, 0.0);
8487 TEST_f_f (round, 0.625, 1.0);
8488 TEST_f_f (round, -0.1, -0.0);
8489 TEST_f_f (round, -0.25, -0.0);
8490 TEST_f_f (round, -0.625, -1.0);
8847214f
UD
8491 TEST_f_f (round, 2097152.5, 2097153);
8492 TEST_f_f (round, -2097152.5, -2097153);
8493
f964490f
RM
8494#ifdef TEST_LDOUBLE
8495 /* The result can only be represented in long double. */
8496 TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
8497 TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
830fce04 8498 TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
f964490f 8499 TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
5c68d401
RM
8500 TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
8501# if LDBL_MANT_DIG > 100
8502 TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
8503 TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
8504 TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
8505# endif
f964490f 8506
830fce04
RM
8507 TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
8508 TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
f964490f 8509 TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
830fce04 8510 TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
f964490f 8511 TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
5c68d401
RM
8512# if LDBL_MANT_DIG > 100
8513 TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
8514 TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
8515 TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
8516# endif
f964490f
RM
8517
8518 TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
8519 TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
8520 TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
8521 TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
8522 TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
8523
8524 TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
8525 TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
8526 TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
8527 TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
8528 TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
8529
5c68d401
RM
8530# if LDBL_MANT_DIG > 100
8531 TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
8532 TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
8533 TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
8534 TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
8535 TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
8536 TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
8537
8538 TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
8539 TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
8540 TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
8541 TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
8542 TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
8543 TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
8544# endif
8545
f964490f
RM
8546 TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
8547 TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
8548 TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
8549 TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
8550 TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
8551
8552 TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
8553 TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
8554 TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
8555 TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
8556 TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
8557
8558 TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
8559 TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
8560 TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
8561 TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
8562 TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
8563#endif
8564
8847214f
UD
8565 END (round);
8566}
8567
8568
8569static void
8570scalb_test (void)
8571{
8572
8573 START (scalb);
8574
3667c088
UD
8575 TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION);
8576 TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION);
8847214f
UD
8577
8578 TEST_ff_f (scalb, 0, nan_value, nan_value);
8579 TEST_ff_f (scalb, 1, nan_value, nan_value);
8580
8581 TEST_ff_f (scalb, 1, 0, 1);
8582 TEST_ff_f (scalb, -1, 0, -1);
8583
8584 TEST_ff_f (scalb, 0, plus_infty, nan_value, INVALID_EXCEPTION);
8585 TEST_ff_f (scalb, minus_zero, plus_infty, nan_value, INVALID_EXCEPTION);
8586
8587 TEST_ff_f (scalb, 0, 2, 0);
8588 TEST_ff_f (scalb, minus_zero, -4, minus_zero);
8589 TEST_ff_f (scalb, 0, 0, 0);
8590 TEST_ff_f (scalb, minus_zero, 0, minus_zero);
8591 TEST_ff_f (scalb, 0, -1, 0);
8592 TEST_ff_f (scalb, minus_zero, -10, minus_zero);
8593 TEST_ff_f (scalb, 0, minus_infty, 0);
8594 TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
8595
8596 TEST_ff_f (scalb, plus_infty, -1, plus_infty);
8597 TEST_ff_f (scalb, minus_infty, -10, minus_infty);
8598 TEST_ff_f (scalb, plus_infty, 0, plus_infty);
8599 TEST_ff_f (scalb, minus_infty, 0, minus_infty);
8600 TEST_ff_f (scalb, plus_infty, 2, plus_infty);
8601 TEST_ff_f (scalb, minus_infty, 100, minus_infty);
8602
3c6cad26
UD
8603 TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
8604 TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
8847214f
UD
8605
8606 TEST_ff_f (scalb, 1, plus_infty, plus_infty);
8607 TEST_ff_f (scalb, -1, plus_infty, minus_infty);
8608 TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
8609 TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
8610
3667c088
UD
8611 TEST_ff_f (scalb, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
8612 TEST_ff_f (scalb, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
8613
8614 TEST_ff_f (scalb, nan_value, 1, nan_value);
8615 TEST_ff_f (scalb, 1, nan_value, nan_value);
8616 TEST_ff_f (scalb, nan_value, 0, nan_value);
8617 TEST_ff_f (scalb, 0, nan_value, nan_value);
8618 TEST_ff_f (scalb, nan_value, plus_infty, nan_value);
8619 TEST_ff_f (scalb, plus_infty, nan_value, nan_value);
8620 TEST_ff_f (scalb, nan_value, nan_value, nan_value);
8621
8622 TEST_ff_f (scalb, 0.8L, 4, 12.8L);
8623 TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
8624
8625 END (scalb);
8626}
8627
8628
8629static void
8630scalbn_test (void)
8631{
8632
8633 START (scalbn);
8634
8635 TEST_fi_f (scalbn, 0, 0, 0);
8636 TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
8637
8638 TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
8639 TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
8640 TEST_fi_f (scalbn, nan_value, 1, nan_value);
8641
8642 TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
8643 TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
8644
8645 TEST_fi_f (scalbn, 1, 0L, 1);
8646
c135cc1b 8647 TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8648 TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8649 TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8650 TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8651 TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8652 TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8653 TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8654 TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
a6d06d7b 8655
8847214f
UD
8656 END (scalbn);
8657}
8658
2550dfe9 8659
8847214f
UD
8660static void
8661scalbln_test (void)
8662{
8663
8664 START (scalbln);
8665
8666 TEST_fl_f (scalbln, 0, 0, 0);
8667 TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
8668
8669 TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
8670 TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
8671 TEST_fl_f (scalbln, nan_value, 1, nan_value);
8672
8673 TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
8674 TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
8675
8676 TEST_fl_f (scalbln, 1, 0L, 1);
8677
c135cc1b 8678 TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8679 TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8680 TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8681 TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8682 TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8683 TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8684 TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8685 TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
a6d06d7b 8686
c135cc1b 8687 TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8688 TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8689 TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8690 TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8691 TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8692 TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8693 TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8694 TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
a6d06d7b
JM
8695
8696#if LONG_MAX >= 0x100000000
c135cc1b 8697 TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8698 TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8699 TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8700 TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8701 TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8702 TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
c135cc1b 8703 TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
80bad0cc 8704 TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
a6d06d7b
JM
8705#endif
8706
8847214f
UD
8707 END (scalbn);
8708}
8709
2550dfe9 8710
8847214f
UD
8711static void
8712signbit_test (void)
8713{
8714
8715 START (signbit);
8716
8717 TEST_f_b (signbit, 0, 0);
8718 TEST_f_b (signbit, minus_zero, 1);
8719 TEST_f_b (signbit, plus_infty, 0);
8720 TEST_f_b (signbit, minus_infty, 1);
8721
8722 /* signbit (x) != 0 for x < 0. */
8723 TEST_f_b (signbit, -1, 1);
8724 /* signbit (x) == 0 for x >= 0. */
8725 TEST_f_b (signbit, 1, 0);
8726
8727 END (signbit);
8728}
8729
2550dfe9 8730
8847214f
UD
8731static void
8732sin_test (void)
8733{
e6d3c4a7
AJ
8734 errno = 0;
8735 FUNC(sin) (0);
8736 if (errno == ENOSYS)
8737 /* Function not implemented. */
8738 return;
8739
8847214f
UD
8740 START (sin);
8741
8742 TEST_f_f (sin, 0, 0);
8743 TEST_f_f (sin, minus_zero, minus_zero);
0c59a196 8744 errno = 0;
8847214f 8745 TEST_f_f (sin, plus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
8746 check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
8747 errno = 0;
8847214f 8748 TEST_f_f (sin, minus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
8749 check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
8750 errno = 0;
15daa639 8751 TEST_f_f (sin, nan_value, nan_value);
0c59a196 8752 check_int ("errno for sin(NaN) unchanged", errno, 0, 0, 0, 0);
8847214f
UD
8753
8754 TEST_f_f (sin, M_PI_6l, 0.5);
8755 TEST_f_f (sin, -M_PI_6l, -0.5);
8756 TEST_f_f (sin, M_PI_2l, 1);
8757 TEST_f_f (sin, -M_PI_2l, -1);
2550dfe9 8758 TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
8847214f 8759
ea40808a
AJ
8760 TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
8761 TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
8c0247db 8762
7a845b2c
JM
8763 TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
8764
d32e4346
RM
8765#ifdef TEST_DOUBLE
8766 TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
cb95113e 8767 TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
8848d99d
JM
8768#endif
8769
8770#ifndef TEST_FLOAT
8771 TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
8772 TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
8773#endif
8774
8775#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
8776 TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
d32e4346
RM
8777#endif
8778
4ffffbd2
LD
8779 TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
8780 TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
8781 TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
8782 TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
8783 TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
8784 TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
8785
8847214f
UD
8786 END (sin);
8787
8788}
8789
2550dfe9 8790
804360ed
JM
8791static void
8792sin_test_tonearest (void)
8793{
8794 int save_round_mode;
8795 errno = 0;
8796 FUNC(sin) (0);
8797 if (errno == ENOSYS)
8798 /* Function not implemented. */
8799 return;
8800
8801 START (sin_tonearest);
8802
8803 save_round_mode = fegetround ();
8804
8805 if (!fesetround (FE_TONEAREST))
8806 {
8807 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
8808 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
8809 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
8810 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
8811 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
8812 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
8813 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
8814 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
8815 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
8816 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
8817 }
8818
8819 fesetround (save_round_mode);
8820
8821 END (sin_tonearest);
8822}
8823
8824
8825static void
8826sin_test_towardzero (void)
8827{
8828 int save_round_mode;
8829 errno = 0;
8830 FUNC(sin) (0);
8831 if (errno == ENOSYS)
8832 /* Function not implemented. */
8833 return;
8834
8835 START (sin_towardzero);
8836
8837 save_round_mode = fegetround ();
8838
8839 if (!fesetround (FE_TOWARDZERO))
8840 {
8841 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
8842 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
8843 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
8844 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
8845 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
8846 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
8847 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
8848 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
8849 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
8850 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
8851 }
8852
8853 fesetround (save_round_mode);
8854
8855 END (sin_towardzero);
8856}
8857
8858
8859static void
8860sin_test_downward (void)
8861{
8862 int save_round_mode;
8863 errno = 0;
8864 FUNC(sin) (0);
8865 if (errno == ENOSYS)
8866 /* Function not implemented. */
8867 return;
8868
8869 START (sin_downward);
8870
8871 save_round_mode = fegetround ();
8872
8873 if (!fesetround (FE_DOWNWARD))
8874 {
8875 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
8876 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
8877 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
8878 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
8879 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
8880 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
8881 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
8882 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
8883 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
8884 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
8885 }
8886
8887 fesetround (save_round_mode);
8888
8889 END (sin_downward);
8890}
8891
8892
8893static void
8894sin_test_upward (void)
8895{
8896 int save_round_mode;
8897 errno = 0;
8898 FUNC(sin) (0);
8899 if (errno == ENOSYS)
8900 /* Function not implemented. */
8901 return;
8902
8903 START (sin_upward);
8904
8905 save_round_mode = fegetround ();
8906
8907 if (!fesetround (FE_UPWARD))
8908 {
8909 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
8910 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
8911 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
8912 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
8913 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
8914 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
8915 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
8916 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
8917 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
8918 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
8919 }
8920
8921 fesetround (save_round_mode);
8922
8923 END (sin_upward);
8924}
8925
8926
8847214f
UD
8927static void
8928sincos_test (void)
8929{
8930 FLOAT sin_res, cos_res;
8931
aaca11d8
UD
8932 errno = 0;
8933 FUNC(sincos) (0, &sin_res, &cos_res);
8934 if (errno == ENOSYS)
8935 /* Function not implemented. */
8936 return;
8937
8847214f
UD
8938 START (sincos);
8939
8940 /* sincos is treated differently because it returns void. */
8941 TEST_extra (sincos, 0, 0, 1);
8942
8943 TEST_extra (sincos, minus_zero, minus_zero, 1);
8944 TEST_extra (sincos, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
8945 TEST_extra (sincos, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
15daa639 8946 TEST_extra (sincos, nan_value, nan_value, nan_value);
8847214f
UD
8947
8948 TEST_extra (sincos, M_PI_2l, 1, 0);
3c6cad26
UD
8949 TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
8950 TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
2550dfe9 8951 TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
8847214f 8952
ea40808a
AJ
8953 TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
8954 TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
8c0247db 8955
d32e4346
RM
8956#ifdef TEST_DOUBLE
8957 TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
8848d99d
JM
8958#endif
8959
8960#ifndef TEST_FLOAT
8961 TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
8962 TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
8963#endif
8964
8965#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
8966 TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
d32e4346
RM
8967#endif
8968
4ffffbd2
LD
8969 TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
8970 TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
8971 TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
8972 TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
8973 TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
8974 TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
8975
8847214f
UD
8976 END (sincos);
8977}
8978
8979static void
8980sinh_test (void)
8981{
aaca11d8 8982 errno = 0;
3c6cad26 8983 FUNC(sinh) (0.7L);
aaca11d8
UD
8984 if (errno == ENOSYS)
8985 /* Function not implemented. */
8986 return;
8987
8847214f
UD
8988 START (sinh);
8989 TEST_f_f (sinh, 0, 0);
8990 TEST_f_f (sinh, minus_zero, minus_zero);
8991
15daa639 8992#ifndef TEST_INLINE
8847214f
UD
8993 TEST_f_f (sinh, plus_infty, plus_infty);
8994 TEST_f_f (sinh, minus_infty, minus_infty);
15daa639
UD
8995#endif
8996 TEST_f_f (sinh, nan_value, nan_value);
8847214f 8997
2550dfe9 8998 TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
c9bfaa1b 8999 TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
30e5dcb7 9000
8847214f
UD
9001 END (sinh);
9002}
9003
ca811b22
JM
9004
9005static void
9006sinh_test_tonearest (void)
9007{
9008 int save_round_mode;
9009 errno = 0;
9010 FUNC(sinh) (0);
9011 if (errno == ENOSYS)
9012 /* Function not implemented. */
9013 return;
9014
9015 START (sinh_tonearest);
9016
9017 save_round_mode = fegetround ();
9018
9019 if (!fesetround (FE_TONEAREST))
9020 {
9021 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
9022 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
9023 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
9024 }
9025
9026 fesetround (save_round_mode);
9027
9028 END (sinh_tonearest);
9029}
9030
9031
9032static void
9033sinh_test_towardzero (void)
9034{
9035 int save_round_mode;
9036 errno = 0;
9037 FUNC(sinh) (0);
9038 if (errno == ENOSYS)
9039 /* Function not implemented. */
9040 return;
9041
9042 START (sinh_towardzero);
9043
9044 save_round_mode = fegetround ();
9045
9046 if (!fesetround (FE_TOWARDZERO))
9047 {
9048 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
9049 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
9050 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
9051 }
9052
9053 fesetround (save_round_mode);
9054
9055 END (sinh_towardzero);
9056}
9057
9058
9059static void
9060sinh_test_downward (void)
9061{
9062 int save_round_mode;
9063 errno = 0;
9064 FUNC(sinh) (0);
9065 if (errno == ENOSYS)
9066 /* Function not implemented. */
9067 return;
9068
9069 START (sinh_downward);
9070
9071 save_round_mode = fegetround ();
9072
9073 if (!fesetround (FE_DOWNWARD))
9074 {
9075 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
9076 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
9077 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
9078 }
9079
9080 fesetround (save_round_mode);
9081
9082 END (sinh_downward);
9083}
9084
9085
9086static void
9087sinh_test_upward (void)
9088{
9089 int save_round_mode;
9090 errno = 0;
9091 FUNC(sinh) (0);
9092 if (errno == ENOSYS)
9093 /* Function not implemented. */
9094 return;
9095
9096 START (sinh_upward);
9097
9098 save_round_mode = fegetround ();
9099
9100 if (!fesetround (FE_UPWARD))
9101 {
9102 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
9103 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
9104 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
9105 }
9106
9107 fesetround (save_round_mode);
9108
9109 END (sinh_upward);
9110}
9111
9112
8847214f
UD
9113static void
9114sqrt_test (void)
9115{
e6d3c4a7
AJ
9116 errno = 0;
9117 FUNC(sqrt) (1);
9118 if (errno == ENOSYS)
9119 /* Function not implemented. */
9120 return;
9121
8847214f
UD
9122 START (sqrt);
9123
9124 TEST_f_f (sqrt, 0, 0);
9125 TEST_f_f (sqrt, nan_value, nan_value);
9126 TEST_f_f (sqrt, plus_infty, plus_infty);
9127
9128 TEST_f_f (sqrt, minus_zero, minus_zero);
9129
9130 /* sqrt (x) == NaN plus invalid exception for x < 0. */
9131 TEST_f_f (sqrt, -1, nan_value, INVALID_EXCEPTION);
41bf21a1 9132 TEST_f_f (sqrt, -max_value, nan_value, INVALID_EXCEPTION);
8847214f 9133 TEST_f_f (sqrt, minus_infty, nan_value, INVALID_EXCEPTION);
15daa639 9134 TEST_f_f (sqrt, nan_value, nan_value);
8847214f
UD
9135
9136 TEST_f_f (sqrt, 2209, 47);
9137 TEST_f_f (sqrt, 4, 2);
9138 TEST_f_f (sqrt, 2, M_SQRT2l);
9139 TEST_f_f (sqrt, 0.25, 0.5);
9140 TEST_f_f (sqrt, 6642.25, 81.5);
2550dfe9
AJ
9141 TEST_f_f (sqrt, 15190.5625L, 123.25L);
9142 TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
8847214f
UD
9143
9144 END (sqrt);
9145}
9146
2550dfe9 9147
8847214f
UD
9148static void
9149tan_test (void)
9150{
e6d3c4a7
AJ
9151 errno = 0;
9152 FUNC(tan) (0);
9153 if (errno == ENOSYS)
9154 /* Function not implemented. */
9155 return;
9156
8847214f
UD
9157 START (tan);
9158
9159 TEST_f_f (tan, 0, 0);
9160 TEST_f_f (tan, minus_zero, minus_zero);
337c2708 9161 errno = 0;
8847214f 9162 TEST_f_f (tan, plus_infty, nan_value, INVALID_EXCEPTION);
337c2708
UD
9163 check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
9164 errno = 0;
8847214f 9165 TEST_f_f (tan, minus_infty, nan_value, INVALID_EXCEPTION);
337c2708
UD
9166 check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
9167 errno = 0;
15daa639 9168 TEST_f_f (tan, nan_value, nan_value);
337c2708 9169 check_int ("errno for tan(NaN) == 0", errno, 0, 0, 0, 0);
8847214f 9170
9ad63c23 9171 TEST_f_f (tan, M_PI_4l, 1);
2550dfe9 9172 TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
8847214f 9173
ea40808a
AJ
9174 TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
9175 TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
11b90b9f 9176
9ad63c23
JM
9177 TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
9178 TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
9179 TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
9180 TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
9181 TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
9182 TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
9183 TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
9184 TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
9185 TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
9186 TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
9187 TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
9188 TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
9189 TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
9190 TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
9191 TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
9192 TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
9193 TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
9194 TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
9195
9196 TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
9197 TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
9198 TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
9199 TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
9200 TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
9201 TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
9202 TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
9203 TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
9204 TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
9205 TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
9206 TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
9207 TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
9208 TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
9209 TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
9210 TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
9211 TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
9212 TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
9213 TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
9214
11b90b9f
JM
9215#ifndef TEST_FLOAT
9216 TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
9217 TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
9218#endif
9219
9220#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9221 TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
ee010c9e
AJ
9222#endif
9223
8847214f
UD
9224 END (tan);
9225}
9226
804360ed
JM
9227
9228static void
9229tan_test_tonearest (void)
9230{
9231 int save_round_mode;
9232 errno = 0;
9233 FUNC(tan) (0);
9234 if (errno == ENOSYS)
9235 /* Function not implemented. */
9236 return;
9237
9238 START (tan_tonearest);
9239
9240 save_round_mode = fegetround ();
9241
9242 if (!fesetround (FE_TONEAREST))
9243 {
9244 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
9245 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
9246 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
9247 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
9248 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
9249 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
9250 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
9251 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
9252 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
9253 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
9254 }
9255
9256 fesetround (save_round_mode);
9257
9258 END (tan_tonearest);
9259}
9260
9261
9262static void
9263tan_test_towardzero (void)
9264{
9265 int save_round_mode;
9266 errno = 0;
9267 FUNC(tan) (0);
9268 if (errno == ENOSYS)
9269 /* Function not implemented. */
9270 return;
9271
9272 START (tan_towardzero);
9273
9274 save_round_mode = fegetround ();
9275
9276 if (!fesetround (FE_TOWARDZERO))
9277 {
9278 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
9279 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
9280 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
9281 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
9282 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
9283 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
9284 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
9285 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
9286 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
9287 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
9288 }
9289
9290 fesetround (save_round_mode);
9291
9292 END (tan_towardzero);
9293}
9294
9295
9296static void
9297tan_test_downward (void)
9298{
9299 int save_round_mode;
9300 errno = 0;
9301 FUNC(tan) (0);
9302 if (errno == ENOSYS)
9303 /* Function not implemented. */
9304 return;
9305
9306 START (tan_downward);
9307
9308 save_round_mode = fegetround ();
9309
9310 if (!fesetround (FE_DOWNWARD))
9311 {
9312 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
9313 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
9314 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
9315 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
9316 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
9317 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
9318 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
9319 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
9320 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
9321 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
9322 }
9323
9324 fesetround (save_round_mode);
9325
9326 END (tan_downward);
9327}
9328
9329
9330static void
9331tan_test_upward (void)
9332{
9333 int save_round_mode;
9334 errno = 0;
9335 FUNC(tan) (0);
9336 if (errno == ENOSYS)
9337 /* Function not implemented. */
9338 return;
9339
9340 START (tan_upward);
9341
9342 save_round_mode = fegetround ();
9343
9344 if (!fesetround (FE_UPWARD))
9345 {
9346 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
9347 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
9348 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
9349 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
9350 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
9351 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
9352 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
9353 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
9354 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
9355 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
9356 }
9357
9358 fesetround (save_round_mode);
9359
9360 END (tan_upward);
9361}
9362
9363
8847214f
UD
9364static void
9365tanh_test (void)
9366{
aaca11d8 9367 errno = 0;
3c6cad26 9368 FUNC(tanh) (0.7L);
aaca11d8
UD
9369 if (errno == ENOSYS)
9370 /* Function not implemented. */
9371 return;
9372
8847214f
UD
9373 START (tanh);
9374
9375 TEST_f_f (tanh, 0, 0);
9376 TEST_f_f (tanh, minus_zero, minus_zero);
9377
15daa639 9378#ifndef TEST_INLINE
8847214f
UD
9379 TEST_f_f (tanh, plus_infty, 1);
9380 TEST_f_f (tanh, minus_infty, -1);
15daa639
UD
9381#endif
9382 TEST_f_f (tanh, nan_value, nan_value);
8847214f 9383
2550dfe9
AJ
9384 TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
9385 TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
3eab00bd
AJ
9386
9387 TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
9388 TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
8847214f 9389
30e5dcb7 9390 /* 2^-57 */
2550dfe9 9391 TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
30e5dcb7 9392
8847214f
UD
9393 END (tanh);
9394}
9395
9396static void
9397tgamma_test (void)
9398{
9399 errno = 0;
9400 FUNC(tgamma) (1);
9401 if (errno == ENOSYS)
9402 /* Function not implemented. */
9403 return;
8847214f
UD
9404
9405 START (tgamma);
9406
9407 TEST_f_f (tgamma, plus_infty, plus_infty);
41bf21a1 9408 TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
52495f29
UD
9409 TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9410 TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8847214f
UD
9411 /* tgamma (x) == NaN plus invalid exception for integer x <= 0. */
9412 TEST_f_f (tgamma, -2, nan_value, INVALID_EXCEPTION);
41bf21a1 9413 TEST_f_f (tgamma, -max_value, nan_value, INVALID_EXCEPTION);
8847214f 9414 TEST_f_f (tgamma, minus_infty, nan_value, INVALID_EXCEPTION);
15daa639 9415 TEST_f_f (tgamma, nan_value, nan_value);
8847214f
UD
9416
9417 TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
9418 TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
9419
9420 TEST_f_f (tgamma, 1, 1);
9421 TEST_f_f (tgamma, 4, 6);
9422
79df8ce5
AJ
9423 TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
9424 TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
8847214f
UD
9425
9426 END (tgamma);
9427}
9428
2550dfe9 9429
8847214f
UD
9430static void
9431trunc_test (void)
9432{
9433 START (trunc);
9434
9435 TEST_f_f (trunc, plus_infty, plus_infty);
9436 TEST_f_f (trunc, minus_infty, minus_infty);
9437 TEST_f_f (trunc, nan_value, nan_value);
9438
9439 TEST_f_f (trunc, 0, 0);
9440 TEST_f_f (trunc, minus_zero, minus_zero);
5c68d401
RM
9441 TEST_f_f (trunc, 0.1, 0);
9442 TEST_f_f (trunc, 0.25, 0);
8847214f 9443 TEST_f_f (trunc, 0.625, 0);
5c68d401
RM
9444 TEST_f_f (trunc, -0.1, minus_zero);
9445 TEST_f_f (trunc, -0.25, minus_zero);
8847214f
UD
9446 TEST_f_f (trunc, -0.625, minus_zero);
9447 TEST_f_f (trunc, 1, 1);
9448 TEST_f_f (trunc, -1, -1);
9449 TEST_f_f (trunc, 1.625, 1);
9450 TEST_f_f (trunc, -1.625, -1);
9451
9452 TEST_f_f (trunc, 1048580.625L, 1048580L);
9453 TEST_f_f (trunc, -1048580.625L, -1048580L);
9454
9455 TEST_f_f (trunc, 8388610.125L, 8388610.0L);
9456 TEST_f_f (trunc, -8388610.125L, -8388610.0L);
9457
9458 TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
9459 TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
9460
f964490f
RM
9461#ifdef TEST_LDOUBLE
9462 /* The result can only be represented in long double. */
9463 TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
9464 TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
9465 TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
9466 TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
9467 TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
9468
5c68d401
RM
9469# if LDBL_MANT_DIG > 100
9470 TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
9471 TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
9472 TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
9473# endif
830fce04 9474
f964490f
RM
9475 TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
9476 TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
9477 TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
9478 TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
9479 TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
830fce04 9480
5c68d401
RM
9481# if LDBL_MANT_DIG > 100
9482 TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
9483 TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
9484 TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
9485# endif
f964490f
RM
9486
9487 TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
9488 TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
9489 TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
9490 TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
9491 TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
9492
5c68d401
RM
9493# if LDBL_MANT_DIG > 100
9494 TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
9495 TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
9496 TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
9497 TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
9498 TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
9499 TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
9500# endif
9501
f964490f
RM
9502 TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
9503 TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
9504 TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
9505 TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
9506 TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
9507
5c68d401
RM
9508# if LDBL_MANT_DIG > 100
9509 TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
9510 TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
9511 TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
9512 TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
9513 TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
9514 TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
9515# endif
9516
f964490f
RM
9517 TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
9518 TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
9519 TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
9520 TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
9521 TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
9522
9523 TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
9524 TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
9525 TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
9526 TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
9527 TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
9528
9529 TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
9530 TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
9531 TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
9532 TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
830fce04 9533 TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
f964490f 9534#endif
8847214f
UD
9535
9536 END (trunc);
9537}
9538
9539static void
9540y0_test (void)
9541{
8a216c1b 9542 FLOAT s, c;
8847214f 9543 errno = 0;
cd53c157
UD
9544 FUNC (sincos) (0, &s, &c);
9545 if (errno == ENOSYS)
9546 /* Required function not implemented. */
9547 return;
8847214f
UD
9548 FUNC(y0) (1);
9549 if (errno == ENOSYS)
9550 /* Function not implemented. */
9551 return;
9552
9553 /* y0 is the Bessel function of the second kind of order 0 */
9554 START (y0);
9555
caac9ddb 9556 TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
41bf21a1 9557 TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
8847214f
UD
9558 TEST_f_f (y0, 0.0, minus_infty);
9559 TEST_f_f (y0, nan_value, nan_value);
9560 TEST_f_f (y0, plus_infty, 0);
9561
2550dfe9
AJ
9562 TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
9563 TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
9564 TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
9565 TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
9566 TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
9567 TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
9568 TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
8847214f 9569
c36e1d23
JM
9570 TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
9571
9572#ifndef TEST_FLOAT
75fa1921
JM
9573 /* Bug 14155: spurious exception may occur. */
9574 TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L, UNDERFLOW_EXCEPTION_OK);
c36e1d23
JM
9575#endif
9576
8847214f
UD
9577 END (y0);
9578}
9579
9580
9581static void
9582y1_test (void)
9583{
8a216c1b 9584 FLOAT s, c;
8847214f 9585 errno = 0;
cd53c157
UD
9586 FUNC (sincos) (0, &s, &c);
9587 if (errno == ENOSYS)
9588 /* Required function not implemented. */
9589 return;
8847214f
UD
9590 FUNC(y1) (1);
9591 if (errno == ENOSYS)
9592 /* Function not implemented. */
9593 return;
9594
9595 /* y1 is the Bessel function of the second kind of order 1 */
9596 START (y1);
9597
caac9ddb 9598 TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
41bf21a1 9599 TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
8847214f
UD
9600 TEST_f_f (y1, 0.0, minus_infty);
9601 TEST_f_f (y1, plus_infty, 0);
9602 TEST_f_f (y1, nan_value, nan_value);
9603
2550dfe9
AJ
9604 TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
9605 TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
9606 TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
9607 TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
9608 TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
9609 TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
9610 TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
8847214f 9611
80bad0cc
JM
9612 /* Bug 14155: spurious exception may occur. */
9613 TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L, UNDERFLOW_EXCEPTION_OK);
c36e1d23
JM
9614
9615#ifndef TEST_FLOAT
75fa1921
JM
9616 /* Bug 14155: spurious exception may occur. */
9617 TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L, UNDERFLOW_EXCEPTION_OK);
c36e1d23
JM
9618#endif
9619
8847214f
UD
9620 END (y1);
9621}
9622
2550dfe9 9623
8847214f
UD
9624static void
9625yn_test (void)
9626{
8a216c1b 9627 FLOAT s, c;
8847214f 9628 errno = 0;
cd53c157
UD
9629 FUNC (sincos) (0, &s, &c);
9630 if (errno == ENOSYS)
9631 /* Required function not implemented. */
9632 return;
8847214f
UD
9633 FUNC(yn) (1, 1);
9634 if (errno == ENOSYS)
9635 /* Function not implemented. */
9636 return;
9637
9638 /* yn is the Bessel function of the second kind of order n */
9639 START (yn);
9640
9641 /* yn (0, x) == y0 (x) */
caac9ddb 9642 TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
41bf21a1 9643 TEST_ff_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
8847214f
UD
9644 TEST_ff_f (yn, 0, 0.0, minus_infty);
9645 TEST_ff_f (yn, 0, nan_value, nan_value);
9646 TEST_ff_f (yn, 0, plus_infty, 0);
9647
2550dfe9
AJ
9648 TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
9649 TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
9650 TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
9651 TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
9652 TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
9653 TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
9654 TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
8847214f
UD
9655
9656 /* yn (1, x) == y1 (x) */
caac9ddb 9657 TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
8847214f
UD
9658 TEST_ff_f (yn, 1, 0.0, minus_infty);
9659 TEST_ff_f (yn, 1, plus_infty, 0);
9660 TEST_ff_f (yn, 1, nan_value, nan_value);
9661
2550dfe9
AJ
9662 TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
9663 TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
9664 TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
9665 TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
9666 TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
9667 TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
9668 TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
8847214f
UD
9669
9670 /* yn (3, x) */
9671 TEST_ff_f (yn, 3, plus_infty, 0);
9672 TEST_ff_f (yn, 3, nan_value, nan_value);
9673
2550dfe9
AJ
9674 TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
9675 TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
9676 TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
9677 TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
9678 TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
8847214f
UD
9679
9680 /* yn (10, x) */
9681 TEST_ff_f (yn, 10, plus_infty, 0);
9682 TEST_ff_f (yn, 10, nan_value, nan_value);
9683
2550dfe9
AJ
9684 TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
9685 TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
9686 TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
9687 TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
9688 TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
8847214f 9689
541428fe
MP
9690 /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
9691 and FLT_MIN. See Bug 14173. */
9692 TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
8847214f 9693
354691b7
MP
9694 errno = 0;
9695 TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
9696 check_int ("errno for yn(10,-min) == ERANGE", errno, ERANGE, 0, 0, 0);
9697
541428fe 9698 END (yn);
8847214f
UD
9699}
9700
9701
f5c8f285
UD
9702static void
9703significand_test (void)
9704{
9705 /* significand returns the mantissa of the exponential representation. */
9706 START (significand);
9707
9708 TEST_f_f (significand, 4.0, 1.0);
9709 TEST_f_f (significand, 6.0, 1.5);
9710 TEST_f_f (significand, 8.0, 1.0);
9711
9712 END (significand);
9713}
9714
9715
8847214f
UD
9716static void
9717initialize (void)
9718{
9719 fpstack_test ("start *init*");
9720 plus_zero = 0.0;
9721 nan_value = plus_zero / plus_zero; /* Suppress GCC warning */
9722
9723 minus_zero = FUNC(copysign) (0.0, -1.0);
9724 plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
9725 HUGE_VALL, HUGE_VAL, HUGE_VALF);
9726 minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
9727 -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
164f863e
UD
9728 max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
9729 LDBL_MAX, DBL_MAX, FLT_MAX);
9730 min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
9731 LDBL_MIN, DBL_MIN, FLT_MIN);
bec749fd
JM
9732 min_subnorm_value = CHOOSE (__LDBL_DENORM_MIN__,
9733 __DBL_DENORM_MIN__,
9734 __FLT_DENORM_MIN__,
9735 __LDBL_DENORM_MIN__,
9736 __DBL_DENORM_MIN__,
9737 __FLT_DENORM_MIN__);
8847214f
UD
9738
9739 (void) &plus_zero;
9740 (void) &nan_value;
9741 (void) &minus_zero;
9742 (void) &plus_infty;
9743 (void) &minus_infty;
164f863e
UD
9744 (void) &max_value;
9745 (void) &min_value;
bec749fd 9746 (void) &min_subnorm_value;
8847214f
UD
9747
9748 /* Clear all exceptions. From now on we must not get random exceptions. */
9749 feclearexcept (FE_ALL_EXCEPT);
9750
9751 /* Test to make sure we start correctly. */
9752 fpstack_test ("end *init*");
9753}
9754
9755/* Definitions of arguments for argp functions. */
9756static const struct argp_option options[] =
9757{
9758 { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
9759 { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
9760 { "no-max-error", 'f', NULL, 0,
9761 "Don't output maximal errors of functions"},
9762 { "no-points", 'p', NULL, 0,
9763 "Don't output results of functions invocations"},
cd33623e
UD
9764 { "ignore-max-ulp", 'i', "yes/no", 0,
9765 "Ignore given maximal errors"},
8847214f
UD
9766 { NULL, 0, NULL, 0, NULL }
9767};
9768
9769/* Short description of program. */
9770static const char doc[] = "Math test suite: " TEST_MSG ;
9771
9772/* Prototype for option handler. */
fe559c5e 9773static error_t parse_opt (int key, char *arg, struct argp_state *state);
8847214f
UD
9774
9775/* Data structure to communicate with argp functions. */
9776static struct argp argp =
9777{
9778 options, parse_opt, NULL, doc,
9779};
9780
9781
9782/* Handle program arguments. */
9783static error_t
9784parse_opt (int key, char *arg, struct argp_state *state)
9785{
9786 switch (key)
9787 {
9788 case 'f':
6815fabc 9789 output_max_error = 0;
8847214f 9790 break;
cd33623e
UD
9791 case 'i':
9792 if (strcmp (arg, "yes") == 0)
9793 ignore_max_ulp = 1;
9794 else if (strcmp (arg, "no") == 0)
9795 ignore_max_ulp = 0;
9796 break;
8847214f 9797 case 'p':
6815fabc 9798 output_points = 0;
8847214f
UD
9799 break;
9800 case 'u':
9801 output_ulps = 1;
9802 break;
9803 case 'v':
9804 if (optarg)
9805 verbose = (unsigned int) strtoul (optarg, NULL, 0);
9806 else
9807 verbose = 3;
9808 break;
9809 default:
9810 return ARGP_ERR_UNKNOWN;
9811 }
9812 return 0;
9813}
9814
9815#if 0
9816/* function to check our ulp calculation. */
9817void
9818check_ulp (void)
9819{
9820 int i;
9821
9822 FLOAT u, diff, ulp;
9823 /* This gives one ulp. */
9824 u = FUNC(nextafter) (10, 20);
9825 check_equal (10.0, u, 1, &diff, &ulp);
9826 printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
9827
9828 /* This gives one more ulp. */
9829 u = FUNC(nextafter) (u, 20);
9830 check_equal (10.0, u, 2, &diff, &ulp);
9831 printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
9832
9833 /* And now calculate 100 ulp. */
9834 for (i = 2; i < 100; i++)
9835 u = FUNC(nextafter) (u, 20);
9836 check_equal (10.0, u, 100, &diff, &ulp);
9837 printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
9838}
9839#endif
9840
9841int
9842main (int argc, char **argv)
9843{
9844
9845 int remaining;
9846
9847 verbose = 1;
9848 output_ulps = 0;
9849 output_max_error = 1;
9850 output_points = 1;
cd33623e
UD
9851 /* XXX set to 0 for releases. */
9852 ignore_max_ulp = 0;
bdf09fab 9853
8847214f
UD
9854 /* Parse and process arguments. */
9855 argp_parse (&argp, argc, argv, 0, &remaining, NULL);
9856
9857 if (remaining != argc)
9858 {
9859 fprintf (stderr, "wrong number of arguments");
9860 argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
9861 exit (EXIT_FAILURE);
9862 }
9863
9864 if (output_ulps)
9865 {
9866 ulps_file = fopen ("ULPs", "a");
9867 if (ulps_file == NULL)
9868 {
9869 perror ("can't open file `ULPs' for writing: ");
9870 exit (1);
9871 }
9872 }
9873
9874
9875 initialize ();
9876 printf (TEST_MSG);
9877
9878#if 0
9879 check_ulp ();
9880#endif
9881
ec751a23 9882 /* Keep the tests a wee bit ordered (according to ISO C99). */
8847214f 9883 /* Classification macros: */
ef1bb361 9884 finite_test ();
8847214f
UD
9885 fpclassify_test ();
9886 isfinite_test ();
ef1bb361
JM
9887 isinf_test ();
9888 isnan_test ();
8847214f
UD
9889 isnormal_test ();
9890 signbit_test ();
9891
9892 /* Trigonometric functions: */
9893 acos_test ();
5ba3cc69
JM
9894 acos_test_tonearest ();
9895 acos_test_towardzero ();
9896 acos_test_downward ();
9897 acos_test_upward ();
8847214f 9898 asin_test ();
5ba3cc69
JM
9899 asin_test_tonearest ();
9900 asin_test_towardzero ();
9901 asin_test_downward ();
9902 asin_test_upward ();
8847214f
UD
9903 atan_test ();
9904 atan2_test ();
9905 cos_test ();
804360ed
JM
9906 cos_test_tonearest ();
9907 cos_test_towardzero ();
9908 cos_test_downward ();
9909 cos_test_upward ();
8847214f 9910 sin_test ();
804360ed
JM
9911 sin_test_tonearest ();
9912 sin_test_towardzero ();
9913 sin_test_downward ();
9914 sin_test_upward ();
8847214f
UD
9915 sincos_test ();
9916 tan_test ();
804360ed
JM
9917 tan_test_tonearest ();
9918 tan_test_towardzero ();
9919 tan_test_downward ();
9920 tan_test_upward ();
8847214f
UD
9921
9922 /* Hyperbolic functions: */
9923 acosh_test ();
9924 asinh_test ();
9925 atanh_test ();
9926 cosh_test ();
ca811b22
JM
9927 cosh_test_tonearest ();
9928 cosh_test_towardzero ();
9929 cosh_test_downward ();
9930 cosh_test_upward ();
8847214f 9931 sinh_test ();
ca811b22
JM
9932 sinh_test_tonearest ();
9933 sinh_test_towardzero ();
9934 sinh_test_downward ();
9935 sinh_test_upward ();
8847214f
UD
9936 tanh_test ();
9937
9938 /* Exponential and logarithmic functions: */
9939 exp_test ();
28afd92d
JM
9940 exp_test_tonearest ();
9941 exp_test_towardzero ();
9942 exp_test_downward ();
9943 exp_test_upward ();
8847214f
UD
9944 exp10_test ();
9945 exp2_test ();
9946 expm1_test ();
9947 frexp_test ();
9948 ldexp_test ();
9949 log_test ();
9950 log10_test ();
9951 log1p_test ();
9952 log2_test ();
9953 logb_test ();
a462cb63 9954 logb_test_downward ();
8847214f
UD
9955 modf_test ();
9956 ilogb_test ();
9957 scalb_test ();
9958 scalbn_test ();
9959 scalbln_test ();
f5c8f285 9960 significand_test ();
8847214f
UD
9961
9962 /* Power and absolute value functions: */
9963 cbrt_test ();
9964 fabs_test ();
9965 hypot_test ();
9966 pow_test ();
b7cd39e8
JM
9967 pow_test_tonearest ();
9968 pow_test_towardzero ();
9969 pow_test_downward ();
9970 pow_test_upward ();
8847214f
UD
9971 sqrt_test ();
9972
9973 /* Error and gamma functions: */
9974 erf_test ();
9975 erfc_test ();
9976 gamma_test ();
9977 lgamma_test ();
9978 tgamma_test ();
9979
9980 /* Nearest integer functions: */
9981 ceil_test ();
9982 floor_test ();
9983 nearbyint_test ();
9984 rint_test ();
4d37c8aa
UD
9985 rint_test_tonearest ();
9986 rint_test_towardzero ();
9987 rint_test_downward ();
9988 rint_test_upward ();
8847214f 9989 lrint_test ();
6624dbc0
UD
9990 lrint_test_tonearest ();
9991 lrint_test_towardzero ();
9992 lrint_test_downward ();
9993 lrint_test_upward ();
8847214f 9994 llrint_test ();
830fce04
RM
9995 llrint_test_tonearest ();
9996 llrint_test_towardzero ();
9997 llrint_test_downward ();
9998 llrint_test_upward ();
8847214f
UD
9999 round_test ();
10000 lround_test ();
10001 llround_test ();
10002 trunc_test ();
10003
10004 /* Remainder functions: */
10005 fmod_test ();
10006 remainder_test ();
10007 remquo_test ();
10008
10009 /* Manipulation functions: */
10010 copysign_test ();
10011 nextafter_test ();
fe559c5e 10012 nexttoward_test ();
8847214f
UD
10013
10014 /* maximum, minimum and positive difference functions */
10015 fdim_test ();
10016 fmax_test ();
10017 fmin_test ();
10018
10019 /* Multiply and add: */
10020 fma_test ();
8ec5b013
JM
10021 fma_test_towardzero ();
10022 fma_test_downward ();
10023 fma_test_upward ();
8847214f 10024
0e8e0c1c
JM
10025 /* Comparison macros: */
10026 isgreater_test ();
10027 isgreaterequal_test ();
10028 isless_test ();
10029 islessequal_test ();
10030 islessgreater_test ();
10031 isunordered_test ();
10032
8847214f
UD
10033 /* Complex functions: */
10034 cabs_test ();
10035 cacos_test ();
10036 cacosh_test ();
10037 carg_test ();
10038 casin_test ();
10039 casinh_test ();
10040 catan_test ();
10041 catanh_test ();
10042 ccos_test ();
10043 ccosh_test ();
10044 cexp_test ();
0cdc8e6f 10045 cimag_test ();
8847214f
UD
10046 clog10_test ();
10047 clog_test ();
0cdc8e6f 10048 conj_test ();
8847214f
UD
10049 cpow_test ();
10050 cproj_test ();
0cdc8e6f 10051 creal_test ();
8847214f
UD
10052 csin_test ();
10053 csinh_test ();
10054 csqrt_test ();
10055 ctan_test ();
ca61cf32
JM
10056 ctan_test_tonearest ();
10057 ctan_test_towardzero ();
10058 ctan_test_downward ();
10059 ctan_test_upward ();
8847214f 10060 ctanh_test ();
ca61cf32
JM
10061 ctanh_test_tonearest ();
10062 ctanh_test_towardzero ();
10063 ctanh_test_downward ();
10064 ctanh_test_upward ();
8847214f
UD
10065
10066 /* Bessel functions: */
10067 j0_test ();
10068 j1_test ();
10069 jn_test ();
10070 y0_test ();
10071 y1_test ();
10072 yn_test ();
10073
10074 if (output_ulps)
10075 fclose (ulps_file);
10076
10077 printf ("\nTest suite completed:\n");
10078 printf (" %d test cases plus %d tests for exception flags executed.\n",
10079 noTests, noExcTests);
10080 if (noXFails)
a9a56960 10081 printf (" %d expected failures occurred.\n", noXFails);
8847214f 10082 if (noXPasses)
a9a56960 10083 printf (" %d unexpected passes occurred.\n", noXPasses);
8847214f
UD
10084 if (noErrors)
10085 {
a9a56960 10086 printf (" %d errors occurred.\n", noErrors);
cf3141a5 10087 return 1;
8847214f
UD
10088 }
10089 printf (" All tests passed successfully.\n");
cf3141a5
AJ
10090
10091 return 0;
8847214f
UD
10092}
10093
10094/*
10095 * Local Variables:
10096 * mode:c
10097 * End:
10098 */