Updated to fedora-glibc-20071212T1051
[glibc.git] / math / libm-test.inc
blobe698923f4ebb7e3603bac151ddace4911cc8cfd3
1 /* Copyright (C) 1997-2006, 2007 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Andreas Jaeger <aj@suse.de>, 1997.
5    The GNU C Library is free software; you can redistribute it and/or
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.
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
13    Lesser General Public License for more details.
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
20 /* Part of testsuite for libm.
22    This file is processed by a perl script.  The resulting file has to
23    be included by a master file that defines:
25    Macros:
26    FUNC(function): converts general function name (like cos) to
27    name with correct suffix (e.g. cosl or cosf)
28    MATHCONST(x):   like FUNC but for constants (e.g convert 0.0 to 0.0L)
29    FLOAT:          floating point type to test
30    - TEST_MSG:     informal message to be displayed
31    CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
32    chooses one of the parameters as delta for testing
33    equality
34    PRINTF_EXPR     Floating point conversion specification to print a variable
35    of type FLOAT with printf.  PRINTF_EXPR just contains
36    the specifier, not the percent and width arguments,
37    e.g. "f".
38    PRINTF_XEXPR    Like PRINTF_EXPR, but print in hexadecimal format.
39    PRINTF_NEXPR Like PRINTF_EXPR, but print nice.  */
41 /* This testsuite has currently tests for:
42    acos, acosh, asin, asinh, atan, atan2, atanh,
43    cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1,
44    fabs, fdim, floor, fma, fmax, fmin, fmod, fpclassify,
45    frexp, gamma, hypot,
46    ilogb, isfinite, isinf, isnan, isnormal,
47    isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
48    j0, j1, jn,
49    ldexp, lgamma, log, log10, log1p, log2, logb,
50    modf, nearbyint, nextafter,
51    pow, remainder, remquo, rint, lrint, llrint,
52    round, lround, llround,
53    scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
54    y0, y1, yn, significand
56    and for the following complex math functions:
57    cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
58    ccos, ccosh, cexp, clog, cpow, cproj, csin, csinh, csqrt, ctan, ctanh.
60    At the moment the following functions aren't tested:
61    drem, nan
63    Parameter handling is primitive in the moment:
64    --verbose=[0..3] for different levels of output:
65    0: only error count
66    1: basic report on failed tests (default)
67    2: full report on all tests
68    -v for full output (equals --verbose=3)
69    -u for generation of an ULPs file
70  */
72 /* "Philosophy":
74    This suite tests some aspects of the correct implementation of
75    mathematical functions in libm.  Some simple, specific parameters
76    are tested for correctness but there's no exhaustive
77    testing.  Handling of specific inputs (e.g. infinity, not-a-number)
78    is also tested.  Correct handling of exceptions is checked
79    against.  These implemented tests should check all cases that are
80    specified in ISO C99.
82    Exception testing: At the moment only divide-by-zero and invalid
83    exceptions are tested.  Overflow/underflow and inexact exceptions
84    aren't checked at the moment.
86    NaN values: There exist signalling and quiet NaNs.  This implementation
87    only uses quiet NaN as parameter but does not differenciate
88    between the two kinds of NaNs as result.
90    Inline functions: Inlining functions should give an improvement in
91    speed - but not in precission.  The inlined functions return
92    reasonable values for a reasonable range of input values.  The
93    result is not necessarily correct for all values and exceptions are
94    not correctly raised in all cases.  Problematic input and return
95    values are infinity, not-a-number and minus zero.  This suite
96    therefore does not check these specific inputs and the exception
97    handling for inlined mathematical functions - just the "reasonable"
98    values are checked.
100    Beware: The tests might fail for any of the following reasons:
101    - Tests are wrong
102    - Functions are wrong
103    - Floating Point Unit not working properly
104    - Compiler has errors
106    With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
109    To Do: All parameter should be numbers that can be represented as
110    exact floating point values.  Currently some values cannot be
111    represented exactly and therefore the result is not the expected
112    result.  For this we will use 36 digits so that numbers can be
113    represented exactly.  */
115 #ifndef _GNU_SOURCE
116 # define _GNU_SOURCE
117 #endif
119 #include "libm-test-ulps.h"
120 #include <complex.h>
121 #include <math.h>
122 #include <float.h>
123 #include <fenv.h>
124 #include <limits.h>
126 #include <errno.h>
127 #include <stdlib.h>
128 #include <stdio.h>
129 #include <string.h>
130 #include <argp.h>
132 /* Possible exceptions */
133 #define NO_EXCEPTION                    0x0
134 #define INVALID_EXCEPTION               0x1
135 #define DIVIDE_BY_ZERO_EXCEPTION        0x2
136 /* The next flags signals that those exceptions are allowed but not required.   */
137 #define INVALID_EXCEPTION_OK            0x4
138 #define DIVIDE_BY_ZERO_EXCEPTION_OK     0x8
139 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
140 /* Some special test flags, passed togther with exceptions.  */
141 #define IGNORE_ZERO_INF_SIGN            0x10
143 /* Various constants (we must supply them precalculated for accuracy).  */
144 #define M_PI_6l                 .52359877559829887307710723054658383L
145 #define M_E2l                   7.389056098930650227230427460575008L
146 #define M_E3l                   20.085536923187667740928529654581719L
147 #define M_2_SQRT_PIl            3.5449077018110320545963349666822903L   /* 2 sqrt (M_PIl)  */
148 #define M_SQRT_PIl              1.7724538509055160272981674833411451L   /* sqrt (M_PIl)  */
149 #define M_LOG_SQRT_PIl          0.57236494292470008707171367567652933L  /* log(sqrt(M_PIl))  */
150 #define M_LOG_2_SQRT_PIl        1.265512123484645396488945797134706L    /* log(2*sqrt(M_PIl))  */
151 #define M_PI_34l                (M_PIl - M_PI_4l)               /* 3*pi/4 */
152 #define M_PI_34_LOG10El         (M_PIl - M_PI_4l) * M_LOG10El
153 #define M_PI2_LOG10El           M_PI_2l * M_LOG10El
154 #define M_PI4_LOG10El           M_PI_4l * M_LOG10El
155 #define M_PI_LOG10El            M_PIl * M_LOG10El
156 #define M_SQRT_2_2              0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
158 static FILE *ulps_file; /* File to document difference.  */
159 static int output_ulps; /* Should ulps printed?  */
161 static int noErrors;    /* number of errors */
162 static int noTests;     /* number of tests (without testing exceptions) */
163 static int noExcTests;  /* number of tests for exception flags */
164 static int noXFails;    /* number of expected failures.  */
165 static int noXPasses;   /* number of unexpected passes.  */
167 static int verbose;
168 static int output_max_error;    /* Should the maximal errors printed?  */
169 static int output_points;       /* Should the single function results printed?  */
170 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
172 static FLOAT minus_zero, plus_zero;
173 static FLOAT plus_infty, minus_infty, nan_value, max_value, min_value;
175 static FLOAT max_error, real_max_error, imag_max_error;
178 #define BUILD_COMPLEX(real, imag) \
179   ({ __complex__ FLOAT __retval;                                              \
180      __real__ __retval = (real);                                              \
181      __imag__ __retval = (imag);                                              \
182      __retval; })
184 #define BUILD_COMPLEX_INT(real, imag) \
185   ({ __complex__ int __retval;                                                \
186      __real__ __retval = (real);                                              \
187      __imag__ __retval = (imag);                                              \
188      __retval; })
191 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1),  \
192                          (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
194 static void
195 init_max_error (void)
197   max_error = 0;
198   real_max_error = 0;
199   imag_max_error = 0;
200   feclearexcept (FE_ALL_EXCEPT);
203 static void
204 set_max_error (FLOAT current, FLOAT *curr_max_error)
206   if (current > *curr_max_error)
207     *curr_max_error = current;
211 /* Should the message print to screen?  This depends on the verbose flag,
212    and the test status.  */
213 static int
214 print_screen (int ok, int xfail)
216   if (output_points
217       && (verbose > 1
218           || (verbose == 1 && ok == xfail)))
219     return 1;
220   return 0;
224 /* Should the message print to screen?  This depends on the verbose flag,
225    and the test status.  */
226 static int
227 print_screen_max_error (int ok, int xfail)
229   if (output_max_error
230       && (verbose > 1
231           || ((verbose == 1) && (ok == xfail))))
232     return 1;
233   return 0;
236 /* Update statistic counters.  */
237 static void
238 update_stats (int ok, int xfail)
240   ++noTests;
241   if (ok && xfail)
242     ++noXPasses;
243   else if (!ok && xfail)
244     ++noXFails;
245   else if (!ok && !xfail)
246     ++noErrors;
249 static void
250 print_ulps (const char *test_name, FLOAT ulp)
252   if (output_ulps)
253     {
254       fprintf (ulps_file, "Test \"%s\":\n", test_name);
255       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
256                CHOOSE("ldouble", "double", "float",
257                       "ildouble", "idouble", "ifloat"),
258                FUNC(ceil) (ulp));
259     }
262 static void
263 print_function_ulps (const char *function_name, FLOAT ulp)
265   if (output_ulps)
266     {
267       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
268       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
269                CHOOSE("ldouble", "double", "float",
270                       "ildouble", "idouble", "ifloat"),
271                FUNC(ceil) (ulp));
272     }
276 static void
277 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
278                              FLOAT imag_ulp)
280   if (output_ulps)
281     {
282       if (real_ulp != 0.0)
283         {
284           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
285           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
286                    CHOOSE("ldouble", "double", "float",
287                           "ildouble", "idouble", "ifloat"),
288                    FUNC(ceil) (real_ulp));
289         }
290       if (imag_ulp != 0.0)
291         {
292           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
293           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
294                    CHOOSE("ldouble", "double", "float",
295                           "ildouble", "idouble", "ifloat"),
296                    FUNC(ceil) (imag_ulp));
297         }
300     }
305 /* Test if Floating-Point stack hasn't changed */
306 static void
307 fpstack_test (const char *test_name)
309 #ifdef i386
310   static int old_stack;
311   int sw;
313   asm ("fnstsw" : "=a" (sw));
314   sw >>= 11;
315   sw &= 7;
317   if (sw != old_stack)
318     {
319       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
320               test_name, sw, old_stack);
321       ++noErrors;
322       old_stack = sw;
323     }
324 #endif
328 static void
329 print_max_error (const char *func_name, FLOAT allowed, int xfail)
331   int ok = 0;
333   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
334     {
335       ok = 1;
336     }
338   if (!ok)
339     print_function_ulps (func_name, max_error);
342   if (print_screen_max_error (ok, xfail))
343     {
344       printf ("Maximal error of `%s'\n", func_name);
345       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
346       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
347     }
349   update_stats (ok, xfail);
353 static void
354 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
355                          __complex__ int xfail)
357   int ok = 0;
359   if ((real_max_error == 0 && imag_max_error == 0)
360       || (real_max_error <= __real__ allowed
361           && imag_max_error <= __imag__ allowed
362           && !ignore_max_ulp))
363     {
364       ok = 1;
365     }
367   if (!ok)
368     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
371   if (print_screen_max_error (ok, xfail))
372     {
373       printf ("Maximal error of real part of: %s\n", func_name);
374       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
375               FUNC(ceil) (real_max_error));
376       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
377               FUNC(ceil) (__real__ allowed));
378       printf ("Maximal error of imaginary part of: %s\n", func_name);
379       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
380               FUNC(ceil) (imag_max_error));
381       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
382               FUNC(ceil) (__imag__ allowed));
383     }
385   update_stats (ok, xfail);
389 /* Test whether a given exception was raised.  */
390 static void
391 test_single_exception (const char *test_name,
392                        int exception,
393                        int exc_flag,
394                        int fe_flag,
395                        const char *flag_name)
397 #ifndef TEST_INLINE
398   int ok = 1;
399   if (exception & exc_flag)
400     {
401       if (fetestexcept (fe_flag))
402         {
403           if (print_screen (1, 0))
404             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
405         }
406       else
407         {
408           ok = 0;
409           if (print_screen (0, 0))
410             printf ("Failure: %s: Exception \"%s\" not set\n",
411                     test_name, flag_name);
412         }
413     }
414   else
415     {
416       if (fetestexcept (fe_flag))
417         {
418           ok = 0;
419           if (print_screen (0, 0))
420             printf ("Failure: %s: Exception \"%s\" set\n",
421                     test_name, flag_name);
422         }
423       else
424         {
425           if (print_screen (1, 0))
426             printf ("%s: Exception \"%s\" not set\n", test_name,
427                     flag_name);
428         }
429     }
430   if (!ok)
431     ++noErrors;
433 #endif
437 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
438    allowed but not required exceptions.
440 static void
441 test_exceptions (const char *test_name, int exception)
443   ++noExcTests;
444 #ifdef FE_DIVBYZERO
445   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
446     test_single_exception (test_name, exception,
447                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
448                            "Divide by zero");
449 #endif
450 #ifdef FE_INVALID
451   if ((exception & INVALID_EXCEPTION_OK) == 0)
452     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
453                          "Invalid operation");
454 #endif
455   feclearexcept (FE_ALL_EXCEPT);
459 static void
460 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
461                       FLOAT max_ulp, int xfail, int exceptions,
462                       FLOAT *curr_max_error)
464   int ok = 0;
465   int print_diff = 0;
466   FLOAT diff = 0;
467   FLOAT ulp = 0;
469   test_exceptions (test_name, exceptions);
470   if (isnan (computed) && isnan (expected))
471     ok = 1;
472   else if (isinf (computed) && isinf (expected))
473     {
474       /* Test for sign of infinities.  */
475       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
476           && signbit (computed) != signbit (expected))
477         {
478           ok = 0;
479           printf ("infinity has wrong sign.\n");
480         }
481       else
482         ok = 1;
483     }
484   /* Don't calc ulp for NaNs or infinities.  */
485   else if (isinf (computed) || isnan (computed) || isinf (expected) || isnan (expected))
486     ok = 0;
487   else
488     {
489       diff = FUNC(fabs) (computed - expected);
490       switch (fpclassify (expected))
491         {
492         case FP_ZERO:
493           /* ilogb (0) isn't allowed. */
494           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
495           break;
496         case FP_NORMAL:
497           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
498           break;
499         case FP_SUBNORMAL:
500           ulp = (FUNC(ldexp) (diff, MANT_DIG)
501                  / FUNC(ldexp) (1.0, FUNC(ilogb) (expected)));
502           break;
503         default:
504           /* It should never happen. */
505           abort ();
506           break;
507         }
508       set_max_error (ulp, curr_max_error);
509       print_diff = 1;
510       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
511           && computed == 0.0 && expected == 0.0
512           && signbit(computed) != signbit (expected))
513         ok = 0;
514       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
515         ok = 1;
516       else
517         {
518           ok = 0;
519           print_ulps (test_name, ulp);
520         }
522     }
523   if (print_screen (ok, xfail))
524     {
525       if (!ok)
526         printf ("Failure: ");
527       printf ("Test: %s\n", test_name);
528       printf ("Result:\n");
529       printf (" is:         % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n",
530               computed, computed);
531       printf (" should be:  % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n",
532               expected, expected);
533       if (print_diff)
534         {
535           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
536                   "\n", diff, diff);
537           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
538           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
539         }
540     }
541   update_stats (ok, xfail);
543   fpstack_test (test_name);
547 static void
548 check_float (const char *test_name, FLOAT computed, FLOAT expected,
549              FLOAT max_ulp, int xfail, int exceptions)
551   check_float_internal (test_name, computed, expected, max_ulp, xfail,
552                         exceptions, &max_error);
556 static void
557 check_complex (const char *test_name, __complex__ FLOAT computed,
558                __complex__ FLOAT expected,
559                __complex__ FLOAT max_ulp, __complex__ int xfail,
560                int exception)
562   FLOAT part_comp, part_exp, part_max_ulp;
563   int part_xfail;
564   char str[200];
566   sprintf (str, "Real part of: %s", test_name);
567   part_comp = __real__ computed;
568   part_exp = __real__ expected;
569   part_max_ulp = __real__ max_ulp;
570   part_xfail = __real__ xfail;
572   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
573                         exception, &real_max_error);
575   sprintf (str, "Imaginary part of: %s", test_name);
576   part_comp = __imag__ computed;
577   part_exp = __imag__ expected;
578   part_max_ulp = __imag__ max_ulp;
579   part_xfail = __imag__ xfail;
581   /* Don't check again for exceptions, just pass through the
582      zero/inf sign test.  */
583   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
584                         exception & IGNORE_ZERO_INF_SIGN,
585                         &imag_max_error);
589 /* Check that computed and expected values are equal (int values).  */
590 static void
591 check_int (const char *test_name, int computed, int expected, int max_ulp,
592            int xfail, int exceptions)
594   int diff = computed - expected;
595   int ok = 0;
597   test_exceptions (test_name, exceptions);
598   noTests++;
599   if (abs (diff) <= max_ulp)
600     ok = 1;
602   if (!ok)
603     print_ulps (test_name, diff);
605   if (print_screen (ok, xfail))
606     {
607       if (!ok)
608         printf ("Failure: ");
609       printf ("Test: %s\n", test_name);
610       printf ("Result:\n");
611       printf (" is:         %d\n", computed);
612       printf (" should be:  %d\n", expected);
613     }
615   update_stats (ok, xfail);
616   fpstack_test (test_name);
620 /* Check that computed and expected values are equal (long int values).  */
621 static void
622 check_long (const char *test_name, long int computed, long int expected,
623             long int max_ulp, int xfail, int exceptions)
625   long int diff = computed - expected;
626   int ok = 0;
628   test_exceptions (test_name, exceptions);
629   noTests++;
630   if (labs (diff) <= max_ulp)
631     ok = 1;
633   if (!ok)
634     print_ulps (test_name, diff);
636   if (print_screen (ok, xfail))
637     {
638       if (!ok)
639         printf ("Failure: ");
640       printf ("Test: %s\n", test_name);
641       printf ("Result:\n");
642       printf (" is:         %ld\n", computed);
643       printf (" should be:  %ld\n", expected);
644     }
646   update_stats (ok, xfail);
647   fpstack_test (test_name);
651 /* Check that computed value is true/false.  */
652 static void
653 check_bool (const char *test_name, int computed, int expected,
654             long int max_ulp, int xfail, int exceptions)
656   int ok = 0;
658   test_exceptions (test_name, exceptions);
659   noTests++;
660   if ((computed == 0) == (expected == 0))
661     ok = 1;
663   if (print_screen (ok, xfail))
664     {
665       if (!ok)
666         printf ("Failure: ");
667       printf ("Test: %s\n", test_name);
668       printf ("Result:\n");
669       printf (" is:         %d\n", computed);
670       printf (" should be:  %d\n", expected);
671     }
673   update_stats (ok, xfail);
674   fpstack_test (test_name);
678 /* check that computed and expected values are equal (long int values) */
679 static void
680 check_longlong (const char *test_name, long long int computed,
681                 long long int expected,
682                 long long int max_ulp, int xfail,
683                 int exceptions)
685   long long int diff = computed - expected;
686   int ok = 0;
688   test_exceptions (test_name, exceptions);
689   noTests++;
690   if (llabs (diff) <= max_ulp)
691     ok = 1;
693   if (!ok)
694     print_ulps (test_name, diff);
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:         %lld\n", computed);
703       printf (" should be:  %lld\n", expected);
704     }
706   update_stats (ok, xfail);
707   fpstack_test (test_name);
712 /* This is to prevent messages from the SVID libm emulation.  */
714 matherr (struct exception *x __attribute__ ((unused)))
716   return 1;
720 /****************************************************************************
721   Tests for single functions of libm.
722   Please keep them alphabetically sorted!
723 ****************************************************************************/
725 static void
726 acos_test (void)
728   errno = 0;
729   FUNC(acos) (0);
730   if (errno == ENOSYS)
731     /* Function not implemented.  */
732     return;
734   START (acos);
736   TEST_f_f (acos, plus_infty, nan_value, INVALID_EXCEPTION);
737   TEST_f_f (acos, minus_infty, nan_value, INVALID_EXCEPTION);
738   TEST_f_f (acos, nan_value, nan_value);
740   /* |x| > 1: */
741   TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
742   TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
744   TEST_f_f (acos, 0, M_PI_2l);
745   TEST_f_f (acos, minus_zero, M_PI_2l);
746   TEST_f_f (acos, 1, 0);
747   TEST_f_f (acos, -1, M_PIl);
748   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
749   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
750   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
751   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
752   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
753   END (acos);
756 static void
757 acosh_test (void)
759   errno = 0;
760   FUNC(acosh) (7);
761   if (errno == ENOSYS)
762     /* Function not implemented.  */
763     return;
765   START (acosh);
767   TEST_f_f (acosh, plus_infty, plus_infty);
768   TEST_f_f (acosh, minus_infty, nan_value, INVALID_EXCEPTION);
770   /* x < 1:  */
771   TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
773   TEST_f_f (acosh, 1, 0);
774   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
776   END (acosh);
779 static void
780 asin_test (void)
782   errno = 0;
783   FUNC(asin) (0);
784   if (errno == ENOSYS)
785     /* Function not implemented.  */
786     return;
788   START (asin);
790   TEST_f_f (asin, plus_infty, nan_value, INVALID_EXCEPTION);
791   TEST_f_f (asin, minus_infty, nan_value, INVALID_EXCEPTION);
792   TEST_f_f (asin, nan_value, nan_value);
794   /* asin x == NaN plus invalid exception for |x| > 1.  */
795   TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
796   TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
798   TEST_f_f (asin, 0, 0);
799   TEST_f_f (asin, minus_zero, minus_zero);
800   TEST_f_f (asin, 0.5, M_PI_6l);
801   TEST_f_f (asin, -0.5, -M_PI_6l);
802   TEST_f_f (asin, 1.0, M_PI_2l);
803   TEST_f_f (asin, -1.0, -M_PI_2l);
804   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
806   END (asin);
809 static void
810 asinh_test (void)
812   errno = 0;
813   FUNC(asinh) (0.7L);
814   if (errno == ENOSYS)
815     /* Function not implemented.  */
816     return;
818   START (asinh);
820   TEST_f_f (asinh, 0, 0);
821   TEST_f_f (asinh, minus_zero, minus_zero);
822 #ifndef TEST_INLINE
823   TEST_f_f (asinh, plus_infty, plus_infty);
824   TEST_f_f (asinh, minus_infty, minus_infty);
825 #endif
826   TEST_f_f (asinh, nan_value, nan_value);
827   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
829   END (asinh);
832 static void
833 atan_test (void)
835   errno = 0;
836   FUNC(atan) (0);
837   if (errno == ENOSYS)
838     /* Function not implemented.  */
839     return;
841   START (atan);
843   TEST_f_f (atan, 0, 0);
844   TEST_f_f (atan, minus_zero, minus_zero);
846   TEST_f_f (atan, plus_infty, M_PI_2l);
847   TEST_f_f (atan, minus_infty, -M_PI_2l);
848   TEST_f_f (atan, nan_value, nan_value);
850   TEST_f_f (atan, 1, M_PI_4l);
851   TEST_f_f (atan, -1, -M_PI_4l);
853   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
855   END (atan);
860 static void
861 atanh_test (void)
863   errno = 0;
864   FUNC(atanh) (0.7L);
865   if (errno == ENOSYS)
866     /* Function not implemented.  */
867     return;
869   START (atanh);
872   TEST_f_f (atanh, 0, 0);
873   TEST_f_f (atanh, minus_zero, minus_zero);
875   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
876   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
877   TEST_f_f (atanh, nan_value, nan_value);
879   /* atanh (x) == NaN plus invalid exception if |x| > 1.  */
880   TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
881   TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
883   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
885   END (atanh);
888 static void
889 atan2_test (void)
891   errno = 0;
892   FUNC(atan2) (-0, 1);
893   if (errno == ENOSYS)
894     /* Function not implemented.  */
895     return;
897   START (atan2);
899   /* atan2 (0,x) == 0 for x > 0.  */
900   TEST_ff_f (atan2, 0, 1, 0);
902   /* atan2 (-0,x) == -0 for x > 0.  */
903   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
905   TEST_ff_f (atan2, 0, 0, 0);
906   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
908   /* atan2 (+0,x) == +pi for x < 0.  */
909   TEST_ff_f (atan2, 0, -1, M_PIl);
911   /* atan2 (-0,x) == -pi for x < 0.  */
912   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
914   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
915   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
917   /* atan2 (y,+0) == pi/2 for y > 0.  */
918   TEST_ff_f (atan2, 1, 0, M_PI_2l);
920   /* atan2 (y,-0) == pi/2 for y > 0.  */
921   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
923   /* atan2 (y,+0) == -pi/2 for y < 0.  */
924   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
926   /* atan2 (y,-0) == -pi/2 for y < 0.  */
927   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
929   /* atan2 (y,inf) == +0 for finite y > 0.  */
930   TEST_ff_f (atan2, 1, plus_infty, 0);
932   /* atan2 (y,inf) == -0 for finite y < 0.  */
933   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
935   /* atan2(+inf, x) == pi/2 for finite x.  */
936   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
938   /* atan2(-inf, x) == -pi/2 for finite x.  */
939   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
941   /* atan2 (y,-inf) == +pi for finite y > 0.  */
942   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
944   /* atan2 (y,-inf) == -pi for finite y < 0.  */
945   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
947   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
948   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
949   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
950   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
951   TEST_ff_f (atan2, nan_value, nan_value, nan_value);
953   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
954   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
955   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
956   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
957   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
958   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
960   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
962   END (atan2);
965 static void
966 cabs_test (void)
968   errno = 0;
969   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
970   if (errno == ENOSYS)
971     /* Function not implemented.  */
972     return;
974   START (cabs);
976   /* cabs (x + iy) is specified as hypot (x,y) */
978   /* cabs (+inf + i x) == +inf.  */
979   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
980   /* cabs (-inf + i x) == +inf.  */
981   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
983   TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
984   TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
986   TEST_c_f (cabs, nan_value, nan_value, nan_value);
988   /* cabs (x,y) == cabs (y,x).  */
989   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
990   /* cabs (x,y) == cabs (-x,y).  */
991   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
992   /* cabs (x,y) == cabs (-y,x).  */
993   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
994   /* cabs (x,y) == cabs (-x,-y).  */
995   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
996   /* cabs (x,y) == cabs (-y,-x).  */
997   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
998   /* cabs (x,0) == fabs (x).  */
999   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1000   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1001   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1002   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1003   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1004   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1006   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1008   END (cabs);
1012 static void
1013 cacos_test (void)
1015   errno = 0;
1016   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1017   if (errno == ENOSYS)
1018     /* Function not implemented.  */
1019     return;
1021   START (cacos);
1024   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1025   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1026   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1027   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1029   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1030   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1032   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1033   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1035   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1036   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1037   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1038   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1039   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1040   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1042   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1043   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1044   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1045   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1047   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1048   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1049   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1050   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1052   TEST_c_c (cacos, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1053   TEST_c_c (cacos, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1055   TEST_c_c (cacos, 0, nan_value, M_PI_2l, nan_value);
1056   TEST_c_c (cacos, minus_zero, nan_value, M_PI_2l, nan_value);
1058   TEST_c_c (cacos, nan_value, plus_infty, nan_value, minus_infty);
1059   TEST_c_c (cacos, nan_value, minus_infty, nan_value, plus_infty);
1061   TEST_c_c (cacos, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1062   TEST_c_c (cacos, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1064   TEST_c_c (cacos, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1065   TEST_c_c (cacos, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1067   TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
1069   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
1070   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
1072   END (cacos, complex);
1075 static void
1076 cacosh_test (void)
1078   errno = 0;
1079   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
1080   if (errno == ENOSYS)
1081     /* Function not implemented.  */
1082     return;
1084   START (cacosh);
1087   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
1088   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
1089   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
1090   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
1091   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
1092   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1094   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1095   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1097   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
1098   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
1099   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
1100   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
1101   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1102   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1104   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
1105   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
1106   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
1107   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
1109   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
1110   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
1111   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
1112   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
1114   TEST_c_c (cacosh, plus_infty, nan_value, plus_infty, nan_value);
1115   TEST_c_c (cacosh, minus_infty, nan_value, plus_infty, nan_value);
1117   TEST_c_c (cacosh, 0, nan_value, nan_value, nan_value);
1118   TEST_c_c (cacosh, minus_zero, nan_value, nan_value, nan_value);
1120   TEST_c_c (cacosh, nan_value, plus_infty, plus_infty, nan_value);
1121   TEST_c_c (cacosh, nan_value, minus_infty, plus_infty, nan_value);
1123   TEST_c_c (cacosh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1124   TEST_c_c (cacosh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1126   TEST_c_c (cacosh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1127   TEST_c_c (cacosh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1129   TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
1131   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
1132   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
1134   END (cacosh, complex);
1138 static void
1139 carg_test (void)
1141   START (carg);
1143   /* carg (x + iy) is specified as atan2 (y, x) */
1145   /* carg (x + i 0) == 0 for x > 0.  */
1146   TEST_c_f (carg, 2.0, 0, 0);
1147   /* carg (x - i 0) == -0 for x > 0.  */
1148   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
1150   TEST_c_f (carg, 0, 0, 0);
1151   TEST_c_f (carg, 0, minus_zero, minus_zero);
1153   /* carg (x + i 0) == +pi for x < 0.  */
1154   TEST_c_f (carg, -2.0, 0, M_PIl);
1156   /* carg (x - i 0) == -pi for x < 0.  */
1157   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
1159   TEST_c_f (carg, minus_zero, 0, M_PIl);
1160   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
1162   /* carg (+0 + i y) == pi/2 for y > 0.  */
1163   TEST_c_f (carg, 0, 2.0, M_PI_2l);
1165   /* carg (-0 + i y) == pi/2 for y > 0.  */
1166   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
1168   /* carg (+0 + i y) == -pi/2 for y < 0.  */
1169   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
1171   /* carg (-0 + i y) == -pi/2 for y < 0.  */
1172   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
1174   /* carg (inf + i y) == +0 for finite y > 0.  */
1175   TEST_c_f (carg, plus_infty, 2.0, 0);
1177   /* carg (inf + i y) == -0 for finite y < 0.  */
1178   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
1180   /* carg(x + i inf) == pi/2 for finite x.  */
1181   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
1183   /* carg(x - i inf) == -pi/2 for finite x.  */
1184   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
1186   /* carg (-inf + i y) == +pi for finite y > 0.  */
1187   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
1189   /* carg (-inf + i y) == -pi for finite y < 0.  */
1190   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
1192   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
1194   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
1196   TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
1198   TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
1200   TEST_c_f (carg, nan_value, nan_value, nan_value);
1202   END (carg);
1205 static void
1206 casin_test (void)
1208   errno = 0;
1209   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
1210   if (errno == ENOSYS)
1211     /* Function not implemented.  */
1212     return;
1214   START (casin);
1216   TEST_c_c (casin, 0, 0, 0.0, 0.0);
1217   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
1218   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
1219   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
1221   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
1222   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
1223   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
1224   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
1226   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
1227   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
1228   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
1229   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
1230   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
1231   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
1232   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
1233   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
1235   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
1236   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
1237   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
1238   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
1240   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
1241   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
1242   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
1243   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
1245   TEST_c_c (casin, nan_value, plus_infty, nan_value, plus_infty);
1246   TEST_c_c (casin, nan_value, minus_infty, nan_value, minus_infty);
1248   TEST_c_c (casin, 0.0, nan_value, 0.0, nan_value);
1249   TEST_c_c (casin, minus_zero, nan_value, minus_zero, nan_value);
1251   TEST_c_c (casin, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1252   TEST_c_c (casin, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1254   TEST_c_c (casin, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1255   TEST_c_c (casin, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1257   TEST_c_c (casin, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1258   TEST_c_c (casin, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1260   TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
1262   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
1263   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
1265   END (casin, complex);
1269 static void
1270 casinh_test (void)
1272   errno = 0;
1273   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
1274   if (errno == ENOSYS)
1275     /* Function not implemented.  */
1276     return;
1278   START (casinh);
1280   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
1281   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
1282   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
1283   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
1285   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1286   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1287   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
1288   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
1290   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
1291   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
1292   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
1293   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
1294   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
1295   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
1296   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1297   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1299   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
1300   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
1301   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
1302   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
1304   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
1305   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
1306   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
1307   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
1309   TEST_c_c (casinh, plus_infty, nan_value, plus_infty, nan_value);
1310   TEST_c_c (casinh, minus_infty, nan_value, minus_infty, nan_value);
1312   TEST_c_c (casinh, nan_value, 0, nan_value, 0.0);
1313   TEST_c_c (casinh, nan_value, minus_zero, nan_value, minus_zero);
1315   TEST_c_c (casinh, nan_value, plus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1316   TEST_c_c (casinh, nan_value, minus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1318   TEST_c_c (casinh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1319   TEST_c_c (casinh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1321   TEST_c_c (casinh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1322   TEST_c_c (casinh, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1324   TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
1326   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
1327   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
1329   END (casinh, complex);
1333 static void
1334 catan_test (void)
1336   errno = 0;
1337   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
1338   if (errno == ENOSYS)
1339     /* Function not implemented.  */
1340     return;
1342   START (catan);
1344   TEST_c_c (catan, 0, 0, 0, 0);
1345   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
1346   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
1347   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
1349   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
1350   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
1351   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
1352   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
1355   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
1356   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
1357   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
1358   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
1359   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
1360   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
1361   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
1362   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
1364   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
1365   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
1366   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
1367   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
1369   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
1370   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
1371   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
1372   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
1374   TEST_c_c (catan, nan_value, 0.0, nan_value, 0);
1375   TEST_c_c (catan, nan_value, minus_zero, nan_value, minus_zero);
1377   TEST_c_c (catan, nan_value, plus_infty, nan_value, 0);
1378   TEST_c_c (catan, nan_value, minus_infty, nan_value, minus_zero);
1380   TEST_c_c (catan, 0.0, nan_value, nan_value, nan_value);
1381   TEST_c_c (catan, minus_zero, nan_value, nan_value, nan_value);
1383   TEST_c_c (catan, plus_infty, nan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1384   TEST_c_c (catan, minus_infty, nan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1386   TEST_c_c (catan, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1387   TEST_c_c (catan, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1389   TEST_c_c (catan, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1390   TEST_c_c (catan, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1392   TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value);
1394   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
1395   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
1397   END (catan, complex);
1400 static void
1401 catanh_test (void)
1403   errno = 0;
1404   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
1405   if (errno == ENOSYS)
1406     /* Function not implemented.  */
1407     return;
1409   START (catanh);
1411   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
1412   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
1413   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
1414   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
1416   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
1417   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
1418   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
1419   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
1421   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
1422   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
1423   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
1424   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
1425   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
1426   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
1427   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
1428   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
1430   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
1431   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
1432   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
1433   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
1435   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
1436   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
1437   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
1438   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
1440   TEST_c_c (catanh, 0, nan_value, 0.0, nan_value);
1441   TEST_c_c (catanh, minus_zero, nan_value, minus_zero, nan_value);
1443   TEST_c_c (catanh, plus_infty, nan_value, 0.0, nan_value);
1444   TEST_c_c (catanh, minus_infty, nan_value, minus_zero, nan_value);
1446   TEST_c_c (catanh, nan_value, 0, nan_value, nan_value);
1447   TEST_c_c (catanh, nan_value, minus_zero, nan_value, nan_value);
1449   TEST_c_c (catanh, nan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
1450   TEST_c_c (catanh, nan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
1452   TEST_c_c (catanh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1453   TEST_c_c (catanh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1455   TEST_c_c (catanh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1456   TEST_c_c (catanh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1458   TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value);
1460   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
1461   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
1463   END (catanh, complex);
1466 static void
1467 cbrt_test (void)
1469   errno = 0;
1470   FUNC(cbrt) (8);
1471   if (errno == ENOSYS)
1472     /* Function not implemented.  */
1473     return;
1475   START (cbrt);
1477   TEST_f_f (cbrt, 0.0, 0.0);
1478   TEST_f_f (cbrt, minus_zero, minus_zero);
1480   TEST_f_f (cbrt, plus_infty, plus_infty);
1481   TEST_f_f (cbrt, minus_infty, minus_infty);
1482   TEST_f_f (cbrt, nan_value, nan_value);
1484   TEST_f_f (cbrt, -0.001L, -0.1L);
1485   TEST_f_f (cbrt, 8, 2);
1486   TEST_f_f (cbrt, -27.0, -3.0);
1487   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
1488   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
1490   END (cbrt);
1494 static void
1495 ccos_test (void)
1497   errno = 0;
1498   FUNC(ccos) (BUILD_COMPLEX (0, 0));
1499   if (errno == ENOSYS)
1500     /* Function not implemented.  */
1501     return;
1503   START (ccos);
1505   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
1506   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
1507   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
1508   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
1510   TEST_c_c (ccos, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1511   TEST_c_c (ccos, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1512   TEST_c_c (ccos, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1513   TEST_c_c (ccos, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1515   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
1516   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
1517   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
1518   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
1520   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1521   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1522   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1523   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1525   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
1526   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
1527   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
1528   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
1530   TEST_c_c (ccos, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1531   TEST_c_c (ccos, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1532   TEST_c_c (ccos, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1533   TEST_c_c (ccos, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1535   TEST_c_c (ccos, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1536   TEST_c_c (ccos, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1538   TEST_c_c (ccos, nan_value, plus_infty, plus_infty, nan_value);
1539   TEST_c_c (ccos, nan_value, minus_infty, plus_infty, nan_value);
1541   TEST_c_c (ccos, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1542   TEST_c_c (ccos, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1544   TEST_c_c (ccos, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1545   TEST_c_c (ccos, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1547   TEST_c_c (ccos, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1548   TEST_c_c (ccos, -10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1550   TEST_c_c (ccos, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1551   TEST_c_c (ccos, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1553   TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
1555   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
1556   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
1558   END (ccos, complex);
1562 static void
1563 ccosh_test (void)
1565   errno = 0;
1566   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
1567   if (errno == ENOSYS)
1568     /* Function not implemented.  */
1569     return;
1571   START (ccosh);
1573   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
1574   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
1575   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
1576   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
1578   TEST_c_c (ccosh, 0.0, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1579   TEST_c_c (ccosh, minus_zero, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1580   TEST_c_c (ccosh, 0.0, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1581   TEST_c_c (ccosh, minus_zero, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1583   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
1584   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
1585   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
1586   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
1588   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1589   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1590   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1591   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1593   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
1594   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
1595   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
1596   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
1598   TEST_c_c (ccosh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1599   TEST_c_c (ccosh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1600   TEST_c_c (ccosh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1601   TEST_c_c (ccosh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1603   TEST_c_c (ccosh, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1604   TEST_c_c (ccosh, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1606   TEST_c_c (ccosh, plus_infty, nan_value, plus_infty, nan_value);
1607   TEST_c_c (ccosh, minus_infty, nan_value, plus_infty, nan_value);
1609   TEST_c_c (ccosh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1610   TEST_c_c (ccosh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1612   TEST_c_c (ccosh, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1613   TEST_c_c (ccosh, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1615   TEST_c_c (ccosh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1616   TEST_c_c (ccosh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1618   TEST_c_c (ccosh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1619   TEST_c_c (ccosh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1621   TEST_c_c (ccosh, nan_value, nan_value, nan_value, nan_value);
1623   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
1625   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
1627   END (ccosh, complex);
1631 static void
1632 ceil_test (void)
1634   START (ceil);
1636   TEST_f_f (ceil, 0.0, 0.0);
1637   TEST_f_f (ceil, minus_zero, minus_zero);
1638   TEST_f_f (ceil, plus_infty, plus_infty);
1639   TEST_f_f (ceil, minus_infty, minus_infty);
1640   TEST_f_f (ceil, nan_value, nan_value);
1642   TEST_f_f (ceil, M_PIl, 4.0);
1643   TEST_f_f (ceil, -M_PIl, -3.0);
1644   TEST_f_f (ceil, 0.1, 1.0);
1645   TEST_f_f (ceil, 0.25, 1.0);
1646   TEST_f_f (ceil, 0.625, 1.0);
1647   TEST_f_f (ceil, -0.1, minus_zero);
1648   TEST_f_f (ceil, -0.25, minus_zero);
1649   TEST_f_f (ceil, -0.625, minus_zero);
1651 #ifdef TEST_LDOUBLE
1652   /* The result can only be represented in long double.  */
1653   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
1654   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
1655   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
1656   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
1657   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
1659   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
1660   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
1661   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
1662   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
1663   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
1665 # if LDBL_MANT_DIG > 100
1666   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
1667   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
1668   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
1669   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
1670   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
1671   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
1672 # endif
1674   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
1675   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
1676   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
1677   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
1678   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
1680   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
1681   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
1682   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
1683   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
1684   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
1686 # if LDBL_MANT_DIG > 100
1687   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
1688   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
1689   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
1690   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
1691   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
1692   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
1694   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
1695   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
1696   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
1697   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
1698   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
1699   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
1700 # endif
1702   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
1703   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
1704   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
1705   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
1706   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
1708   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
1709   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
1710   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
1711   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
1712   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
1714   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
1715   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
1716   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
1717   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
1718   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
1719 #endif
1721   END (ceil);
1725 static void
1726 cexp_test (void)
1728   errno = 0;
1729   FUNC(cexp) (BUILD_COMPLEX (0, 0));
1730   if (errno == ENOSYS)
1731     /* Function not implemented.  */
1732     return;
1734   START (cexp);
1736   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
1737   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
1738   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
1739   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
1741   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
1742   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
1744   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
1745   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
1747   TEST_c_c (cexp, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1748   TEST_c_c (cexp, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1750   TEST_c_c (cexp, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1751   TEST_c_c (cexp, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1753   TEST_c_c (cexp, 100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1754   TEST_c_c (cexp, -100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1756   TEST_c_c (cexp, 100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1757   TEST_c_c (cexp, -100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1759   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
1760   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
1761   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
1762   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
1764   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1765   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1767   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
1768   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
1770   TEST_c_c (cexp, minus_infty, nan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
1772   TEST_c_c (cexp, plus_infty, nan_value, plus_infty, nan_value);
1774   TEST_c_c (cexp, nan_value, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1775   TEST_c_c (cexp, nan_value, 1.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1777   TEST_c_c (cexp, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1778   TEST_c_c (cexp, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1779   TEST_c_c (cexp, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1780   TEST_c_c (cexp, nan_value, nan_value, nan_value, nan_value);
1782   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
1783   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
1785   END (cexp, complex);
1789 static void
1790 cimag_test (void)
1792   START (cimag);
1793   TEST_c_f (cimag, 1.0, 0.0, 0.0);
1794   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
1795   TEST_c_f (cimag, 1.0, nan_value, nan_value);
1796   TEST_c_f (cimag, nan_value, nan_value, nan_value);
1797   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
1798   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
1799   TEST_c_f (cimag, 2.0, 3.0, 3.0);
1801   END (cimag);
1804 static void
1805 clog_test (void)
1807   errno = 0;
1808   FUNC(clog) (BUILD_COMPLEX (-2, -3));
1809   if (errno == ENOSYS)
1810     /* Function not implemented.  */
1811     return;
1813   START (clog);
1815   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1816   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1818   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1819   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1821   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
1822   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1824   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
1825   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1827   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
1828   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
1829   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
1830   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
1831   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
1832   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
1833   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
1834   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
1836   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
1837   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
1838   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
1839   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
1841   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
1842   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
1843   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
1844   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
1846   TEST_c_c (clog, plus_infty, nan_value, plus_infty, nan_value);
1847   TEST_c_c (clog, minus_infty, nan_value, plus_infty, nan_value);
1849   TEST_c_c (clog, nan_value, plus_infty, plus_infty, nan_value);
1850   TEST_c_c (clog, nan_value, minus_infty, plus_infty, nan_value);
1852   TEST_c_c (clog, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1853   TEST_c_c (clog, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1854   TEST_c_c (clog, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1855   TEST_c_c (clog, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1857   TEST_c_c (clog, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1858   TEST_c_c (clog, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1859   TEST_c_c (clog, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1860   TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1862   TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value);
1864   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
1865   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
1867   END (clog, complex);
1871 static void
1872 clog10_test (void)
1874   errno = 0;
1875   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
1876   if (errno == ENOSYS)
1877     /* Function not implemented.  */
1878     return;
1880   START (clog10);
1882   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1883   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1885   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1886   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1888   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
1890   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
1891   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
1893   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
1894   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
1895   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
1896   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
1897   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
1898   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
1899   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
1900   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
1902   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
1903   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
1904   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
1905   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
1907   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
1908   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
1909   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
1910   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
1912   TEST_c_c (clog10, plus_infty, nan_value, plus_infty, nan_value);
1913   TEST_c_c (clog10, minus_infty, nan_value, plus_infty, nan_value);
1915   TEST_c_c (clog10, nan_value, plus_infty, plus_infty, nan_value);
1916   TEST_c_c (clog10, nan_value, minus_infty, plus_infty, nan_value);
1918   TEST_c_c (clog10, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1919   TEST_c_c (clog10, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1920   TEST_c_c (clog10, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1921   TEST_c_c (clog10, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1923   TEST_c_c (clog10, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1924   TEST_c_c (clog10, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1925   TEST_c_c (clog10, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1926   TEST_c_c (clog10, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1928   TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
1930   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
1931   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
1933   END (clog10, complex);
1937 static void
1938 conj_test (void)
1940   START (conj);
1941   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
1942   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
1943   TEST_c_c (conj, nan_value, nan_value, nan_value, nan_value);
1944   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
1945   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
1946   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
1947   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
1949   END (conj, complex);
1953 static void
1954 copysign_test (void)
1956   START (copysign);
1958   TEST_ff_f (copysign, 0, 4, 0);
1959   TEST_ff_f (copysign, 0, -4, minus_zero);
1960   TEST_ff_f (copysign, minus_zero, 4, 0);
1961   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
1963   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
1964   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
1965   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
1966   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
1968   TEST_ff_f (copysign, 0, plus_infty, 0);
1969   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
1970   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
1971   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
1973   /* XXX More correctly we would have to check the sign of the NaN.  */
1974   TEST_ff_f (copysign, nan_value, 0, nan_value);
1975   TEST_ff_f (copysign, nan_value, minus_zero, nan_value);
1976   TEST_ff_f (copysign, -nan_value, 0, nan_value);
1977   TEST_ff_f (copysign, -nan_value, minus_zero, nan_value);
1979   END (copysign);
1983 static void
1984 cos_test (void)
1986   errno = 0;
1987   FUNC(cos) (0);
1988   if (errno == ENOSYS)
1989     /* Function not implemented.  */
1990     return;
1992   START (cos);
1994   TEST_f_f (cos, 0, 1);
1995   TEST_f_f (cos, minus_zero, 1);
1996   TEST_f_f (cos, plus_infty, nan_value, INVALID_EXCEPTION);
1997   TEST_f_f (cos, minus_infty, nan_value, INVALID_EXCEPTION);
1998   TEST_f_f (cos, nan_value, nan_value);
2000   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
2001   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
2002   TEST_f_f (cos, M_PI_2l, 0);
2004   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
2006 #ifdef TEST_DOUBLE
2007   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
2008 #endif
2010   END (cos);
2014 static void
2015 cosh_test (void)
2017   errno = 0;
2018   FUNC(cosh) (0.7L);
2019   if (errno == ENOSYS)
2020     /* Function not implemented.  */
2021     return;
2023   START (cosh);
2024   TEST_f_f (cosh, 0, 1);
2025   TEST_f_f (cosh, minus_zero, 1);
2027 #ifndef TEST_INLINE
2028   TEST_f_f (cosh, plus_infty, plus_infty);
2029   TEST_f_f (cosh, minus_infty, plus_infty);
2030 #endif
2031   TEST_f_f (cosh, nan_value, nan_value);
2033   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
2035   END (cosh);
2039 static void
2040 cpow_test (void)
2042   errno = 0;
2043   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
2044   if (errno == ENOSYS)
2045     /* Function not implemented.  */
2046     return;
2048   START (cpow);
2050   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
2051   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
2053   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
2054   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
2056   TEST_cc_c (cpow, nan_value, nan_value, nan_value, nan_value, nan_value, nan_value);
2058   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
2059   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
2060   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
2061   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
2063   END (cpow, complex);
2067 static void
2068 cproj_test (void)
2070   START (cproj);
2071   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
2072   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
2073   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
2074   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
2076   TEST_c_c (cproj, nan_value, nan_value, nan_value, nan_value);
2078   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
2079   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
2080   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
2081   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
2083   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
2084   TEST_c_c (cproj, 2.0, 3.0, 0.2857142857142857142857142857142857L, 0.42857142857142857142857142857142855L);
2086   END (cproj, complex);
2090 static void
2091 creal_test (void)
2093   START (creal);
2094   TEST_c_f (creal, 0.0, 1.0, 0.0);
2095   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
2096   TEST_c_f (creal, nan_value, 1.0, nan_value);
2097   TEST_c_f (creal, nan_value, nan_value, nan_value);
2098   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
2099   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
2100   TEST_c_f (creal, 2.0, 3.0, 2.0);
2102   END (creal);
2105 static void
2106 csin_test (void)
2108   errno = 0;
2109   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
2110   if (errno == ENOSYS)
2111     /* Function not implemented.  */
2112     return;
2114   START (csin);
2116   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
2117   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
2118   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
2119   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
2121   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
2122   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
2123   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
2124   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
2126   TEST_c_c (csin, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2127   TEST_c_c (csin, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2128   TEST_c_c (csin, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2129   TEST_c_c (csin, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2131   TEST_c_c (csin, plus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2132   TEST_c_c (csin, minus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2133   TEST_c_c (csin, plus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2134   TEST_c_c (csin, minus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2136   TEST_c_c (csin, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2137   TEST_c_c (csin, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2138   TEST_c_c (csin, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2139   TEST_c_c (csin, minus_infty, -6.75,  nan_value, nan_value, INVALID_EXCEPTION);
2141   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
2142   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
2143   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
2144   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
2146   TEST_c_c (csin, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2147   TEST_c_c (csin, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2149   TEST_c_c (csin, nan_value, plus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2150   TEST_c_c (csin, nan_value, minus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2152   TEST_c_c (csin, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2153   TEST_c_c (csin, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2155   TEST_c_c (csin, 0.0, nan_value, 0.0, nan_value);
2156   TEST_c_c (csin, minus_zero, nan_value, minus_zero, nan_value);
2158   TEST_c_c (csin, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2159   TEST_c_c (csin, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2161   TEST_c_c (csin, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2162   TEST_c_c (csin, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2164   TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
2166   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
2167   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
2169   END (csin, complex);
2173 static void
2174 csinh_test (void)
2176   errno = 0;
2177   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
2178   if (errno == ENOSYS)
2179     /* Function not implemented.  */
2180     return;
2182   START (csinh);
2184   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
2185   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
2186   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
2187   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
2189   TEST_c_c (csinh, 0.0, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2190   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2191   TEST_c_c (csinh, 0.0, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2192   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2194   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
2195   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
2196   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
2197   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
2199   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2200   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2201   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2202   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2204   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
2205   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
2206   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
2207   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
2209   TEST_c_c (csinh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2210   TEST_c_c (csinh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2211   TEST_c_c (csinh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2212   TEST_c_c (csinh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2214   TEST_c_c (csinh, 0.0, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2215   TEST_c_c (csinh, minus_zero, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2217   TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2218   TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2220   TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2221   TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2223   TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
2224   TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
2226   TEST_c_c (csinh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2227   TEST_c_c (csinh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2229   TEST_c_c (csinh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2230   TEST_c_c (csinh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2232   TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
2234   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
2235   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
2237   END (csinh, complex);
2241 static void
2242 csqrt_test (void)
2244   errno = 0;
2245   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
2246   if (errno == ENOSYS)
2247     /* Function not implemented.  */
2248     return;
2250   START (csqrt);
2252   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
2253   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
2254   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
2255   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
2257   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
2258   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
2259   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
2260   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
2262   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
2263   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
2264   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
2265   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
2267   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
2268   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
2269   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
2270   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
2271   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
2272   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
2273   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
2274   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
2275   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
2276   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
2277   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
2278   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
2280   TEST_c_c (csqrt, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2282   TEST_c_c (csqrt, plus_infty, nan_value, plus_infty, nan_value);
2284   TEST_c_c (csqrt, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2285   TEST_c_c (csqrt, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2286   TEST_c_c (csqrt, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2287   TEST_c_c (csqrt, -1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2289   TEST_c_c (csqrt, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2290   TEST_c_c (csqrt, nan_value, 8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2291   TEST_c_c (csqrt, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2292   TEST_c_c (csqrt, nan_value, -8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2294   TEST_c_c (csqrt, nan_value, nan_value, nan_value, nan_value);
2296   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
2297   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
2298   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
2299   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
2300   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
2301   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
2302   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
2303   /* Principal square root should be returned (i.e., non-negative real
2304      part).  */
2305   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
2307   END (csqrt, complex);
2310 static void
2311 ctan_test (void)
2313   errno = 0;
2314   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
2315   if (errno == ENOSYS)
2316     /* Function not implemented.  */
2317     return;
2319   START (ctan);
2321   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
2322   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
2323   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
2324   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
2326   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
2327   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
2328   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
2329   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
2331   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
2332   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
2333   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
2334   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
2336   TEST_c_c (ctan, plus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2337   TEST_c_c (ctan, plus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2338   TEST_c_c (ctan, minus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2339   TEST_c_c (ctan, minus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2340   TEST_c_c (ctan, plus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2341   TEST_c_c (ctan, plus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2342   TEST_c_c (ctan, minus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2343   TEST_c_c (ctan, minus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2345   TEST_c_c (ctan, nan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
2346   TEST_c_c (ctan, nan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
2348   TEST_c_c (ctan, 0, nan_value, 0.0, nan_value);
2349   TEST_c_c (ctan, minus_zero, nan_value, minus_zero, nan_value);
2351   TEST_c_c (ctan, 0.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2352   TEST_c_c (ctan, -4.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2354   TEST_c_c (ctan, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2355   TEST_c_c (ctan, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2356   TEST_c_c (ctan, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2357   TEST_c_c (ctan, nan_value, -0.25, nan_value, nan_value, INVALID_EXCEPTION_OK);
2359   TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
2361   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
2362   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
2364   END (ctan, complex);
2368 static void
2369 ctanh_test (void)
2371   errno = 0;
2372   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
2373   if (errno == ENOSYS)
2374     /* Function not implemented.  */
2375     return;
2377   START (ctanh);
2379   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
2380   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
2381   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
2382   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
2384   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
2385   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
2386   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
2387   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
2388   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
2389   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
2390   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
2391   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
2393   TEST_c_c (ctanh, 0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2394   TEST_c_c (ctanh, 2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2395   TEST_c_c (ctanh, 0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2396   TEST_c_c (ctanh, 2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2397   TEST_c_c (ctanh, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2398   TEST_c_c (ctanh, -2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2399   TEST_c_c (ctanh, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2400   TEST_c_c (ctanh, -2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2402   TEST_c_c (ctanh, plus_infty, nan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2403   TEST_c_c (ctanh, minus_infty, nan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2405   TEST_c_c (ctanh, nan_value, 0, nan_value, 0.0);
2406   TEST_c_c (ctanh, nan_value, minus_zero, nan_value, minus_zero);
2408   TEST_c_c (ctanh, nan_value, 0.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2409   TEST_c_c (ctanh, nan_value, -4.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2411   TEST_c_c (ctanh, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2412   TEST_c_c (ctanh, 5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2413   TEST_c_c (ctanh, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2414   TEST_c_c (ctanh, -0.25, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2416   TEST_c_c (ctanh, nan_value, nan_value, nan_value, nan_value);
2418   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
2420   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
2421   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
2423   END (ctanh, complex);
2427 static void
2428 erf_test (void)
2430   errno = 0;
2431   FUNC(erf) (0);
2432   if (errno == ENOSYS)
2433     /* Function not implemented.  */
2434     return;
2436   START (erf);
2438   TEST_f_f (erf, 0, 0);
2439   TEST_f_f (erf, minus_zero, minus_zero);
2440   TEST_f_f (erf, plus_infty, 1);
2441   TEST_f_f (erf, minus_infty, -1);
2442   TEST_f_f (erf, nan_value, nan_value);
2444   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
2445   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
2446   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
2447   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
2448   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
2449   TEST_f_f (erf, 27.0L, 1.0L);
2451   END (erf);
2455 static void
2456 erfc_test (void)
2458   errno = 0;
2459   FUNC(erfc) (0);
2460   if (errno == ENOSYS)
2461     /* Function not implemented.  */
2462     return;
2464   START (erfc);
2466   TEST_f_f (erfc, plus_infty, 0.0);
2467   TEST_f_f (erfc, minus_infty, 2.0);
2468   TEST_f_f (erfc, 0.0, 1.0);
2469   TEST_f_f (erfc, minus_zero, 1.0);
2470   TEST_f_f (erfc, nan_value, nan_value);
2472   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
2473   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
2474   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
2475   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
2476   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
2477 #ifdef TEST_LDOUBLE
2478   /* The result can only be represented in long double.  */
2479 # if LDBL_MIN_10_EXP < -319
2480   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
2481 # endif
2482 #endif
2484   END (erfc);
2488 static void
2489 exp_test (void)
2491   errno = 0;
2492   FUNC(exp) (0);
2493   if (errno == ENOSYS)
2494     /* Function not implemented.  */
2495     return;
2497   START (exp);
2499   TEST_f_f (exp, 0, 1);
2500   TEST_f_f (exp, minus_zero, 1);
2502 #ifndef TEST_INLINE
2503   TEST_f_f (exp, plus_infty, plus_infty);
2504   TEST_f_f (exp, minus_infty, 0);
2505 #endif
2506   TEST_f_f (exp, nan_value, nan_value);
2507   TEST_f_f (exp, 1, M_El);
2509   TEST_f_f (exp, 2, M_E2l);
2510   TEST_f_f (exp, 3, M_E3l);
2511   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
2512   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
2513 #ifdef TEST_LDOUBLE
2514   /* The result can only be represented in long double.  */
2515   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
2516 #endif
2518   END (exp);
2522 static void
2523 exp10_test (void)
2525   errno = 0;
2526   FUNC(exp10) (0);
2527   if (errno == ENOSYS)
2528     /* Function not implemented.  */
2529     return;
2531   START (exp10);
2533   TEST_f_f (exp10, 0, 1);
2534   TEST_f_f (exp10, minus_zero, 1);
2536   TEST_f_f (exp10, plus_infty, plus_infty);
2537   TEST_f_f (exp10, minus_infty, 0);
2538   TEST_f_f (exp10, nan_value, nan_value);
2539   TEST_f_f (exp10, 3, 1000);
2540   TEST_f_f (exp10, -1, 0.1L);
2541   TEST_f_f (exp10, 1e6, plus_infty);
2542   TEST_f_f (exp10, -1e6, 0);
2543   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
2545   END (exp10);
2549 static void
2550 exp2_test (void)
2552   errno = 0;
2553   FUNC(exp2) (0);
2554   if (errno == ENOSYS)
2555     /* Function not implemented.  */
2556     return;
2558   START (exp2);
2560   TEST_f_f (exp2, 0, 1);
2561   TEST_f_f (exp2, minus_zero, 1);
2562   TEST_f_f (exp2, plus_infty, plus_infty);
2563   TEST_f_f (exp2, minus_infty, 0);
2564   TEST_f_f (exp2, nan_value, nan_value);
2566   TEST_f_f (exp2, 10, 1024);
2567   TEST_f_f (exp2, -1, 0.5);
2568   TEST_f_f (exp2, 1e6, plus_infty);
2569   TEST_f_f (exp2, -1e6, 0);
2570   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
2572   END (exp2);
2576 static void
2577 expm1_test (void)
2579   errno = 0;
2580   FUNC(expm1) (0);
2581   if (errno == ENOSYS)
2582     /* Function not implemented.  */
2583     return;
2585   START (expm1);
2587   TEST_f_f (expm1, 0, 0);
2588   TEST_f_f (expm1, minus_zero, minus_zero);
2590 #ifndef TEST_INLINE
2591   TEST_f_f (expm1, plus_infty, plus_infty);
2592   TEST_f_f (expm1, minus_infty, -1);
2593 #endif
2594   TEST_f_f (expm1, nan_value, nan_value);
2596   TEST_f_f (expm1, 1, M_El - 1.0);
2597   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
2599   END (expm1);
2603 static void
2604 fabs_test (void)
2606   START (fabs);
2608   TEST_f_f (fabs, 0, 0);
2609   TEST_f_f (fabs, minus_zero, 0);
2611   TEST_f_f (fabs, plus_infty, plus_infty);
2612   TEST_f_f (fabs, minus_infty, plus_infty);
2613   TEST_f_f (fabs, nan_value, nan_value);
2615   TEST_f_f (fabs, 38.0, 38.0);
2616   TEST_f_f (fabs, -M_El, M_El);
2618   END (fabs);
2622 static void
2623 fdim_test (void)
2625   START (fdim);
2627   TEST_ff_f (fdim, 0, 0, 0);
2628   TEST_ff_f (fdim, 9, 0, 9);
2629   TEST_ff_f (fdim, 0, 9, 0);
2630   TEST_ff_f (fdim, -9, 0, 0);
2631   TEST_ff_f (fdim, 0, -9, 9);
2633   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
2634   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
2635   TEST_ff_f (fdim, minus_infty, 9, 0);
2636   TEST_ff_f (fdim, minus_infty, -9, 0);
2637   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
2638   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
2639   TEST_ff_f (fdim, 9, plus_infty, 0);
2640   TEST_ff_f (fdim, -9, plus_infty, 0);
2642   TEST_ff_f (fdim, 0, nan_value, nan_value);
2643   TEST_ff_f (fdim, 9, nan_value, nan_value);
2644   TEST_ff_f (fdim, -9, nan_value, nan_value);
2645   TEST_ff_f (fdim, nan_value, 9, nan_value);
2646   TEST_ff_f (fdim, nan_value, -9, nan_value);
2647   TEST_ff_f (fdim, plus_infty, nan_value, nan_value);
2648   TEST_ff_f (fdim, minus_infty, nan_value, nan_value);
2649   TEST_ff_f (fdim, nan_value, plus_infty, nan_value);
2650   TEST_ff_f (fdim, nan_value, minus_infty, nan_value);
2651   TEST_ff_f (fdim, nan_value, nan_value, nan_value);
2653   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
2655   END (fdim);
2659 static void
2660 floor_test (void)
2662   START (floor);
2664   TEST_f_f (floor, 0.0, 0.0);
2665   TEST_f_f (floor, minus_zero, minus_zero);
2666   TEST_f_f (floor, plus_infty, plus_infty);
2667   TEST_f_f (floor, minus_infty, minus_infty);
2668   TEST_f_f (floor, nan_value, nan_value);
2670   TEST_f_f (floor, M_PIl, 3.0);
2671   TEST_f_f (floor, -M_PIl, -4.0);
2673   TEST_f_f (floor, 0.1, 0.0);
2674   TEST_f_f (floor, 0.25, 0.0);
2675   TEST_f_f (floor, 0.625, 0.0);
2676   TEST_f_f (floor, -0.1, -1.0);
2677   TEST_f_f (floor, -0.25, -1.0);
2678   TEST_f_f (floor, -0.625, -1.0);
2680 #ifdef TEST_LDOUBLE
2681   /* The result can only be represented in long double.  */
2682   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
2683   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
2684   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
2685   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
2686   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
2687 # if LDBL_MANT_DIG > 100
2688   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
2689   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
2690   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
2691 # endif
2693   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
2694   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
2695   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
2696   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
2697   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
2698 # if LDBL_MANT_DIG > 100
2699   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
2700   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
2701   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
2702 # endif
2704   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
2705   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
2706   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
2707   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
2708   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
2710 # if LDBL_MANT_DIG > 100
2711   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
2712   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
2713   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
2714   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
2715   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
2716   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
2717 # endif
2719   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
2720   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
2721   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
2722   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
2723   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
2725 # if LDBL_MANT_DIG > 100
2726   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
2727   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
2728   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
2729   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
2730   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
2731   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
2732 # endif
2734   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
2735   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
2736   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
2737   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
2738   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
2740   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
2741   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
2742   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
2743   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
2744   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
2746   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
2747   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
2748   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
2749   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
2750   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
2751 #endif
2753   END (floor);
2757 static void
2758 fma_test (void)
2760   START (fma);
2762   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
2763   TEST_fff_f (fma, nan_value, 2.0, 3.0, nan_value);
2764   TEST_fff_f (fma, 1.0, nan_value, 3.0, nan_value);
2765   TEST_fff_f (fma, 1.0, 2.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2766   TEST_fff_f (fma, plus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2767   TEST_fff_f (fma, minus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2768   TEST_fff_f (fma, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2769   TEST_fff_f (fma, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2770   TEST_fff_f (fma, plus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
2771   TEST_fff_f (fma, minus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
2772   TEST_fff_f (fma, 0.0, plus_infty, 1.0, nan_value, INVALID_EXCEPTION);
2773   TEST_fff_f (fma, 0.0, minus_infty, 1.0, nan_value, INVALID_EXCEPTION);
2775   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
2776   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2777   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2778   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
2780   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
2782   END (fma);
2786 static void
2787 fmax_test (void)
2789   START (fmax);
2791   TEST_ff_f (fmax, 0, 0, 0);
2792   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
2793   TEST_ff_f (fmax, 9, 0, 9);
2794   TEST_ff_f (fmax, 0, 9, 9);
2795   TEST_ff_f (fmax, -9, 0, 0);
2796   TEST_ff_f (fmax, 0, -9, 0);
2798   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
2799   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
2800   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
2801   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
2803   TEST_ff_f (fmax, minus_infty, 9, 9);
2804   TEST_ff_f (fmax, minus_infty, -9, -9);
2805   TEST_ff_f (fmax, 9, minus_infty, 9);
2806   TEST_ff_f (fmax, -9, minus_infty, -9);
2808   TEST_ff_f (fmax, 0, nan_value, 0);
2809   TEST_ff_f (fmax, 9, nan_value, 9);
2810   TEST_ff_f (fmax, -9, nan_value, -9);
2811   TEST_ff_f (fmax, nan_value, 0, 0);
2812   TEST_ff_f (fmax, nan_value, 9, 9);
2813   TEST_ff_f (fmax, nan_value, -9, -9);
2814   TEST_ff_f (fmax, plus_infty, nan_value, plus_infty);
2815   TEST_ff_f (fmax, minus_infty, nan_value, minus_infty);
2816   TEST_ff_f (fmax, nan_value, plus_infty, plus_infty);
2817   TEST_ff_f (fmax, nan_value, minus_infty, minus_infty);
2818   TEST_ff_f (fmax, nan_value, nan_value, nan_value);
2820   END (fmax);
2824 static void
2825 fmin_test (void)
2827   START (fmin);
2829   TEST_ff_f (fmin, 0, 0, 0);
2830   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
2831   TEST_ff_f (fmin, 9, 0, 0);
2832   TEST_ff_f (fmin, 0, 9, 0);
2833   TEST_ff_f (fmin, -9, 0, -9);
2834   TEST_ff_f (fmin, 0, -9, -9);
2836   TEST_ff_f (fmin, plus_infty, 9, 9);
2837   TEST_ff_f (fmin, 9, plus_infty, 9);
2838   TEST_ff_f (fmin, plus_infty, -9, -9);
2839   TEST_ff_f (fmin, -9, plus_infty, -9);
2840   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
2841   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
2842   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
2843   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
2845   TEST_ff_f (fmin, 0, nan_value, 0);
2846   TEST_ff_f (fmin, 9, nan_value, 9);
2847   TEST_ff_f (fmin, -9, nan_value, -9);
2848   TEST_ff_f (fmin, nan_value, 0, 0);
2849   TEST_ff_f (fmin, nan_value, 9, 9);
2850   TEST_ff_f (fmin, nan_value, -9, -9);
2851   TEST_ff_f (fmin, plus_infty, nan_value, plus_infty);
2852   TEST_ff_f (fmin, minus_infty, nan_value, minus_infty);
2853   TEST_ff_f (fmin, nan_value, plus_infty, plus_infty);
2854   TEST_ff_f (fmin, nan_value, minus_infty, minus_infty);
2855   TEST_ff_f (fmin, nan_value, nan_value, nan_value);
2857   END (fmin);
2861 static void
2862 fmod_test (void)
2864   errno = 0;
2865   FUNC(fmod) (6.5, 2.3L);
2866   if (errno == ENOSYS)
2867     /* Function not implemented.  */
2868     return;
2870   START (fmod);
2872   /* fmod (+0, y) == +0 for y != 0.  */
2873   TEST_ff_f (fmod, 0, 3, 0);
2875   /* fmod (-0, y) == -0 for y != 0.  */
2876   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
2878   /* fmod (+inf, y) == NaN plus invalid exception.  */
2879   TEST_ff_f (fmod, plus_infty, 3, nan_value, INVALID_EXCEPTION);
2880   /* fmod (-inf, y) == NaN plus invalid exception.  */
2881   TEST_ff_f (fmod, minus_infty, 3, nan_value, INVALID_EXCEPTION);
2882   /* fmod (x, +0) == NaN plus invalid exception.  */
2883   TEST_ff_f (fmod, 3, 0, nan_value, INVALID_EXCEPTION);
2884   /* fmod (x, -0) == NaN plus invalid exception.  */
2885   TEST_ff_f (fmod, 3, minus_zero, nan_value, INVALID_EXCEPTION);
2887   /* fmod (x, +inf) == x for x not infinite.  */
2888   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
2889   /* fmod (x, -inf) == x for x not infinite.  */
2890   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
2892   TEST_ff_f (fmod, nan_value, nan_value, nan_value);
2894   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
2895   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
2896   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
2897   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
2899   END (fmod);
2903 static void
2904 fpclassify_test (void)
2906   START (fpclassify);
2908   TEST_f_i (fpclassify, nan_value, FP_NAN);
2909   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
2910   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
2911   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
2912   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
2913   TEST_f_i (fpclassify, 1000, FP_NORMAL);
2915   END (fpclassify);
2919 static void
2920 frexp_test (void)
2922   int x;
2924   START (frexp);
2926   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
2927   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
2928   TEST_fI_f1 (frexp, nan_value, nan_value, IGNORE);
2930   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
2931   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
2933   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
2934   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
2936   END (frexp);
2940 static void
2941 gamma_test (void)
2943   errno = 0;
2944   FUNC(gamma) (1);
2946   if (errno == ENOSYS)
2947     /* Function not implemented.  */
2948     return;
2949   feclearexcept (FE_ALL_EXCEPT);
2951   START (gamma);
2953   TEST_f_f (gamma, plus_infty, plus_infty);
2954   TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
2955   TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
2956   TEST_f_f (gamma, minus_infty, plus_infty);
2957   TEST_f_f (gamma, nan_value, nan_value);
2959   TEST_f_f1 (gamma, 1, 0, 1);
2960   TEST_f_f1 (gamma, 3, M_LN2l, 1);
2962   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
2963   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
2965   END (gamma);
2968 static void
2969 hypot_test (void)
2971   errno = 0;
2972   FUNC(hypot) (0.7L, 12.4L);
2973   if (errno == ENOSYS)
2974     /* Function not implemented.  */
2975     return;
2977   START (hypot);
2979   TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
2980   TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
2982 #ifndef TEST_INLINE
2983   TEST_ff_f (hypot, plus_infty, nan_value, plus_infty);
2984   TEST_ff_f (hypot, minus_infty, nan_value, plus_infty);
2985   TEST_ff_f (hypot, nan_value, plus_infty, plus_infty);
2986   TEST_ff_f (hypot, nan_value, minus_infty, plus_infty);
2987 #endif
2989   TEST_ff_f (hypot, nan_value, nan_value, nan_value);
2991   /* hypot (x,y) == hypot (+-x, +-y)  */
2992   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
2993   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
2994   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
2995   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
2996   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
2997   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
2998   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
2999   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
3001   /*  hypot (x,0) == fabs (x)  */
3002   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
3003   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
3004   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
3006   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
3008   END (hypot);
3012 static void
3013 ilogb_test (void)
3015   START (ilogb);
3017   TEST_f_i (ilogb, 1, 0);
3018   TEST_f_i (ilogb, M_El, 1);
3019   TEST_f_i (ilogb, 1024, 10);
3020   TEST_f_i (ilogb, -2000, 10);
3022   /* XXX We have a problem here: the standard does not tell us whether
3023      exceptions are allowed/required.  ignore them for now.  */
3025   TEST_f_i (ilogb, 0.0, FP_ILOGB0, EXCEPTIONS_OK);
3026   TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, EXCEPTIONS_OK);
3027   TEST_f_i (ilogb, plus_infty, INT_MAX, EXCEPTIONS_OK);
3028   TEST_f_i (ilogb, minus_infty, INT_MAX, EXCEPTIONS_OK);
3030   END (ilogb);
3033 static void
3034 isfinite_test (void)
3036   START (isfinite);
3038   TEST_f_b (isfinite, 0, 1);
3039   TEST_f_b (isfinite, minus_zero, 1);
3040   TEST_f_b (isfinite, 10, 1);
3041   TEST_f_b (isfinite, plus_infty, 0);
3042   TEST_f_b (isfinite, minus_infty, 0);
3043   TEST_f_b (isfinite, nan_value, 0);
3045   END (isfinite);
3048 static void
3049 isnormal_test (void)
3051   START (isnormal);
3053   TEST_f_b (isnormal, 0, 0);
3054   TEST_f_b (isnormal, minus_zero, 0);
3055   TEST_f_b (isnormal, 10, 1);
3056   TEST_f_b (isnormal, plus_infty, 0);
3057   TEST_f_b (isnormal, minus_infty, 0);
3058   TEST_f_b (isnormal, nan_value, 0);
3060   END (isnormal);
3063 static void
3064 j0_test (void)
3066   FLOAT s, c;
3067   errno = 0;
3068   FUNC (sincos) (0, &s, &c);
3069   if (errno == ENOSYS)
3070     /* Required function not implemented.  */
3071     return;
3072   FUNC(j0) (0);
3073   if (errno == ENOSYS)
3074     /* Function not implemented.  */
3075     return;
3077   START (j0);
3079   /* j0 is the Bessel function of the first kind of order 0 */
3080   TEST_f_f (j0, nan_value, nan_value);
3081   TEST_f_f (j0, plus_infty, 0);
3082   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
3083   TEST_f_f (j0, 0.0, 1.0);
3084   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
3085   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
3086   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
3087   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
3088   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
3089   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
3090   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
3091   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3092   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3094   END (j0);
3098 static void
3099 j1_test (void)
3101   FLOAT s, c;
3102   errno = 0;
3103   FUNC (sincos) (0, &s, &c);
3104   if (errno == ENOSYS)
3105     /* Required function not implemented.  */
3106     return;
3107   FUNC(j1) (0);
3108   if (errno == ENOSYS)
3109     /* Function not implemented.  */
3110     return;
3112   /* j1 is the Bessel function of the first kind of order 1 */
3114   START (j1);
3116   TEST_f_f (j1, nan_value, nan_value);
3117   TEST_f_f (j1, plus_infty, 0);
3119   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
3120   TEST_f_f (j1, 0.0, 0.0);
3121   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
3122   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
3123   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
3124   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
3125   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
3126   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
3127   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
3129   END (j1);
3132 static void
3133 jn_test (void)
3135   FLOAT s, c;
3136   errno = 0;
3137   FUNC (sincos) (0, &s, &c);
3138   if (errno == ENOSYS)
3139     /* Required function not implemented.  */
3140     return;
3141   FUNC(jn) (1, 1);
3142   if (errno == ENOSYS)
3143     /* Function not implemented.  */
3144     return;
3146   /* jn is the Bessel function of the first kind of order n.  */
3147   START (jn);
3149   /* jn (0, x) == j0 (x)  */
3150   TEST_ff_f (jn, 0, nan_value, nan_value);
3151   TEST_ff_f (jn, 0, plus_infty, 0);
3152   TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
3153   TEST_ff_f (jn, 0, 0.0, 1.0);
3154   TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
3155   TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
3156   TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
3157   TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
3158   TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
3159   TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
3160   TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
3161   TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3162   TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3164   /* jn (1, x) == j1 (x)  */
3165   TEST_ff_f (jn, 1, nan_value, nan_value);
3166   TEST_ff_f (jn, 1, plus_infty, 0);
3167   TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
3168   TEST_ff_f (jn, 1, 0.0, 0.0);
3169   TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
3170   TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
3171   TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
3172   TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
3173   TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
3174   TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
3175   TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
3177   /* jn (3, x)  */
3178   TEST_ff_f (jn, 3, nan_value, nan_value);
3179   TEST_ff_f (jn, 3, plus_infty, 0);
3181   TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
3182   TEST_ff_f (jn, 3, 0.0, 0.0);
3183   TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
3184   TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
3185   TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
3186   TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
3187   TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
3189   /*  jn (10, x)  */
3190   TEST_ff_f (jn, 10, nan_value, nan_value);
3191   TEST_ff_f (jn, 10, plus_infty, 0);
3193   TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
3194   TEST_ff_f (jn, 10, 0.0, 0.0);
3195   TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
3196   TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
3197   TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
3198   TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
3199   TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
3201   END (jn);
3205 static void
3206 ldexp_test (void)
3208   TEST_ff_f (ldexp, 0, 0, 0);
3209   TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
3211   TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
3212   TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
3213   TEST_ff_f (ldexp, nan_value, 1, nan_value);
3215   TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
3216   TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
3218   /* ldexp (x, 0) == x.  */
3219   TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
3223 static void
3224 lgamma_test (void)
3226   errno = 0;
3227   FUNC(lgamma) (0);
3228   if (errno == ENOSYS)
3229     /* Function not implemented.  */
3230     return;
3231   feclearexcept (FE_ALL_EXCEPT);
3233   START (lgamma);
3235   TEST_f_f (lgamma, plus_infty, plus_infty);
3236   TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3237   check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
3238   TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3239   check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
3240   TEST_f_f (lgamma, nan_value, nan_value);
3242   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
3243   TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3244   TEST_f_f (lgamma, minus_infty, plus_infty);
3246   TEST_f_f1 (lgamma, 1, 0, 1);
3248   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
3250   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
3251   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3252   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
3253   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
3255   END (lgamma);
3259 static void
3260 lrint_test (void)
3262   /* XXX this test is incomplete.  We need to have a way to specifiy
3263      the rounding method and test the critical cases.  So far, only
3264      unproblematic numbers are tested.  */
3266   START (lrint);
3268   TEST_f_l (lrint, 0.0, 0);
3269   TEST_f_l (lrint, minus_zero, 0);
3270   TEST_f_l (lrint, 0.2L, 0);
3271   TEST_f_l (lrint, -0.2L, 0);
3273   TEST_f_l (lrint, 1.4L, 1);
3274   TEST_f_l (lrint, -1.4L, -1);
3276   TEST_f_l (lrint, 8388600.3L, 8388600);
3277   TEST_f_l (lrint, -8388600.3L, -8388600);
3279   TEST_f_l (lrint, 1071930.0008, 1071930);
3280 #ifndef TEST_FLOAT
3281   TEST_f_l (lrint, 1073741824.01, 1073741824);
3282 # if LONG_MAX > 281474976710656
3283   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3284 # endif
3285 #endif
3287   END (lrint);
3291 static void
3292 lrint_test_tonearest (void)
3294   int save_round_mode;
3295   START (lrint_tonearest);
3297   save_round_mode = fegetround ();
3299   if (!fesetround (FE_TONEAREST))
3300     {
3301       TEST_f_l (lrint, 0.0, 0);
3302       TEST_f_l (lrint, minus_zero, 0);
3303       TEST_f_l (lrint, 0.2L, 0);
3304       TEST_f_l (lrint, -0.2L, 0);
3305       TEST_f_l (lrint, 0.5L, 0);
3306       TEST_f_l (lrint, -0.5L, 0);
3307       TEST_f_l (lrint, 0.8L, 1);
3308       TEST_f_l (lrint, -0.8L, -1);
3310       TEST_f_l (lrint, 1.4L, 1);
3311       TEST_f_l (lrint, -1.4L, -1);
3313       TEST_f_l (lrint, 8388600.3L, 8388600);
3314       TEST_f_l (lrint, -8388600.3L, -8388600);
3316       TEST_f_l (lrint, 1071930.0008, 1071930);
3317 #ifndef TEST_FLOAT
3318       TEST_f_l (lrint, 1073741824.01, 1073741824);
3319 # if LONG_MAX > 281474976710656
3320       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3321 # endif
3322 #endif
3323     }
3325   fesetround (save_round_mode);
3327   END (lrint_tonearest);
3331 static void
3332 lrint_test_towardzero (void)
3334   int save_round_mode;
3335   START (lrint_towardzero);
3337   save_round_mode = fegetround ();
3339   if (!fesetround (FE_TOWARDZERO))
3340     {
3341       TEST_f_l (lrint, 0.0, 0);
3342       TEST_f_l (lrint, minus_zero, 0);
3343       TEST_f_l (lrint, 0.2L, 0);
3344       TEST_f_l (lrint, -0.2L, 0);
3345       TEST_f_l (lrint, 0.5L, 0);
3346       TEST_f_l (lrint, -0.5L, 0);
3347       TEST_f_l (lrint, 0.8L, 0);
3348       TEST_f_l (lrint, -0.8L, 0);
3350       TEST_f_l (lrint, 1.4L, 1);
3351       TEST_f_l (lrint, -1.4L, -1);
3353       TEST_f_l (lrint, 8388600.3L, 8388600);
3354       TEST_f_l (lrint, -8388600.3L, -8388600);
3356       TEST_f_l (lrint, 1071930.0008, 1071930);
3357 #ifndef TEST_FLOAT
3358       TEST_f_l (lrint, 1073741824.01, 1073741824);
3359 # if LONG_MAX > 281474976710656
3360       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3361 # endif
3362 #endif
3363     }
3365   fesetround (save_round_mode);
3367   END (lrint_towardzero);
3371 static void
3372 lrint_test_downward (void)
3374   int save_round_mode;
3375   START (lrint_downward);
3377   save_round_mode = fegetround ();
3379   if (!fesetround (FE_DOWNWARD))
3380     {
3381       TEST_f_l (lrint, 0.0, 0);
3382       TEST_f_l (lrint, minus_zero, 0);
3383       TEST_f_l (lrint, 0.2L, 0);
3384       TEST_f_l (lrint, -0.2L, -1);
3385       TEST_f_l (lrint, 0.5L, 0);
3386       TEST_f_l (lrint, -0.5L, -1);
3387       TEST_f_l (lrint, 0.8L, 0);
3388       TEST_f_l (lrint, -0.8L, -1);
3390       TEST_f_l (lrint, 1.4L, 1);
3391       TEST_f_l (lrint, -1.4L, -2);
3393       TEST_f_l (lrint, 8388600.3L, 8388600);
3394       TEST_f_l (lrint, -8388600.3L, -8388601);
3396       TEST_f_l (lrint, 1071930.0008, 1071930);
3397 #ifndef TEST_FLOAT
3398       TEST_f_l (lrint, 1073741824.01, 1073741824);
3399 # if LONG_MAX > 281474976710656
3400       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3401 # endif
3402 #endif
3403     }
3405   fesetround (save_round_mode);
3407   END (lrint_downward);
3411 static void
3412 lrint_test_upward (void)
3414   int save_round_mode;
3415   START (lrint_upward);
3417   save_round_mode = fegetround ();
3419   if (!fesetround (FE_UPWARD))
3420     {
3421       TEST_f_l (lrint, 0.0, 0);
3422       TEST_f_l (lrint, minus_zero, 0);
3423       TEST_f_l (lrint, 0.2L, 1);
3424       TEST_f_l (lrint, -0.2L, 0);
3425       TEST_f_l (lrint, 0.5L, 1);
3426       TEST_f_l (lrint, -0.5L, 0);
3427       TEST_f_l (lrint, 0.8L, 1);
3428       TEST_f_l (lrint, -0.8L, 0);
3430       TEST_f_l (lrint, 1.4L, 2);
3431       TEST_f_l (lrint, -1.4L, -1);
3433       TEST_f_l (lrint, 8388600.3L, 8388601);
3434       TEST_f_l (lrint, -8388600.3L, -8388600);
3436 #ifndef TEST_FLOAT
3437       TEST_f_l (lrint, 1071930.0008, 1071931);
3438       TEST_f_l (lrint, 1073741824.01, 1073741825);
3439 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
3440       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3441 # endif
3442 #endif
3443     }
3445   fesetround (save_round_mode);
3447   END (lrint_upward);
3451 static void
3452 llrint_test (void)
3454   /* XXX this test is incomplete.  We need to have a way to specifiy
3455      the rounding method and test the critical cases.  So far, only
3456      unproblematic numbers are tested.  */
3458   START (llrint);
3460   TEST_f_L (llrint, 0.0, 0);
3461   TEST_f_L (llrint, minus_zero, 0);
3462   TEST_f_L (llrint, 0.2L, 0);
3463   TEST_f_L (llrint, -0.2L, 0);
3465   TEST_f_L (llrint, 1.4L, 1);
3466   TEST_f_L (llrint, -1.4L, -1);
3468   TEST_f_L (llrint, 8388600.3L, 8388600);
3469   TEST_f_L (llrint, -8388600.3L, -8388600);
3471   TEST_f_l (llrint, 1071930.0008, 1071930);
3473   /* Test boundary conditions.  */
3474   /* 0x1FFFFF */
3475   TEST_f_L (llrint, 2097151.0,2097151LL);
3476   /* 0x800000 */
3477   TEST_f_L (llrint, 8388608.0, 8388608LL);
3478   /* 0x1000000 */
3479   TEST_f_L (llrint, 16777216.0, 16777216LL);
3480   /* 0x20000000000 */
3481   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
3482   /* 0x40000000000 */
3483   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
3484   /* 0x1000000000000 */
3485   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
3486   /* 0x10000000000000 */
3487   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
3488   /* 0x10000080000000 */
3489   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
3490   /* 0x20000000000000 */
3491   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
3492   /* 0x80000000000000 */
3493   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
3494   /* 0x100000000000000 */
3495   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
3496 #ifdef TEST_LDOUBLE
3497   /* The input can only be represented in long double.  */
3498   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
3499   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
3500   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
3501   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
3502   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
3504   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
3505   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
3506   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
3507   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
3508   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
3510 # if LDBL_MANT_DIG > 100
3511   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
3512   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
3513   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
3514   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
3515   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
3516   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
3518   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
3519   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
3520   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
3521   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
3522   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
3523   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
3524 #endif
3526   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
3527   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
3528   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
3529   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
3530   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
3532   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
3533   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
3534   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
3535   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
3536   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
3538 # if LDBL_MANT_DIG > 100
3539   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
3540   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
3541   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
3542   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
3543   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
3544   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
3546   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
3547   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
3548   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
3549   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
3550   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
3551   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
3552 #endif
3554   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
3555   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
3556   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
3557   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
3558   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
3560   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
3561   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
3562   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
3563   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
3564   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
3566 # if LDBL_MANT_DIG > 100
3567   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
3568   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
3569   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
3570   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
3571   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
3572   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
3573   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
3574   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
3575   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
3576   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
3577   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
3578   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
3579 # endif
3580 #endif
3582   END (llrint);
3585 static void
3586 llrint_test_tonearest (void)
3588   int save_round_mode;
3589   START (llrint_tonearest);
3591   save_round_mode = fegetround ();
3593   if (!fesetround (FE_TONEAREST))
3594     {
3595       TEST_f_L (llrint, 0.0, 0);
3596       TEST_f_L (llrint, minus_zero, 0);
3597       TEST_f_L (llrint, 0.2L, 0);
3598       TEST_f_L (llrint, -0.2L, 0);
3600       TEST_f_L (llrint, 1.4L, 1);
3601       TEST_f_L (llrint, -1.4L, -1);
3603       TEST_f_L (llrint, 8388600.3L, 8388600);
3604       TEST_f_L (llrint, -8388600.3L, -8388600);
3606       TEST_f_l (llrint, 1071930.0008, 1071930);
3608       /* Test boundary conditions.  */
3609       /* 0x1FFFFF */
3610       TEST_f_L (llrint, 2097151.0,2097151LL);
3611       /* 0x800000 */
3612       TEST_f_L (llrint, 8388608.0, 8388608LL);
3613       /* 0x1000000 */
3614       TEST_f_L (llrint, 16777216.0, 16777216LL);
3615       /* 0x20000000000 */
3616       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
3617       /* 0x40000000000 */
3618       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
3619       /* 0x1000000000000 */
3620       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
3621       /* 0x10000000000000 */
3622       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
3623       /* 0x10000080000000 */
3624       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
3625       /* 0x20000000000000 */
3626       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
3627       /* 0x80000000000000 */
3628       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
3629       /* 0x100000000000000 */
3630       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
3631 #ifdef TEST_LDOUBLE
3632       /* The input can only be represented in long double.  */
3633       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
3634       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
3635       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
3636       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
3637       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
3639       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
3640       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
3641       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
3642       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
3643       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
3645 # if LDBL_MANT_DIG > 100
3646       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
3647       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
3648       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
3649       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
3650       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
3651       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
3653       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
3654       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
3655       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
3656       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
3657       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
3658       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
3659 #endif
3661       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
3662       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
3663       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
3664       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
3665       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
3667       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
3668       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
3669       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
3670       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
3671       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
3673 # if LDBL_MANT_DIG > 100
3674       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
3675       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
3676       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
3677       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
3678       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
3679       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
3681       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
3682       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
3683       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
3684       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
3685       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
3686       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
3687 #endif
3689       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
3690       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
3691       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
3692       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
3693       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
3695       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
3696       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
3697       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
3698       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
3699       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
3701 # if LDBL_MANT_DIG > 100
3702       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
3703       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
3704       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
3705       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
3706       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
3707       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
3708       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
3709       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
3710       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
3711       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
3712       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
3713       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
3714 # endif
3715 #endif
3716     }
3718   fesetround (save_round_mode);
3720   END (llrint_tonearest);
3723 static void
3724 llrint_test_towardzero (void)
3726   int save_round_mode;
3727   START (llrint_towardzero);
3729   save_round_mode = fegetround ();
3731   if (!fesetround (FE_TOWARDZERO))
3732     {
3733       TEST_f_L (llrint, 0.0, 0);
3734       TEST_f_L (llrint, minus_zero, 0);
3735       TEST_f_L (llrint, 0.2L, 0);
3736       TEST_f_L (llrint, -0.2L, 0);
3738       TEST_f_L (llrint, 1.4L, 1);
3739       TEST_f_L (llrint, -1.4L, -1);
3741       TEST_f_L (llrint, 8388600.3L, 8388600);
3742       TEST_f_L (llrint, -8388600.3L, -8388600);
3744       TEST_f_l (llrint, 1071930.0008, 1071930);
3746       /* Test boundary conditions.  */
3747       /* 0x1FFFFF */
3748       TEST_f_L (llrint, 2097151.0,2097151LL);
3749       /* 0x800000 */
3750       TEST_f_L (llrint, 8388608.0, 8388608LL);
3751       /* 0x1000000 */
3752       TEST_f_L (llrint, 16777216.0, 16777216LL);
3753       /* 0x20000000000 */
3754       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
3755       /* 0x40000000000 */
3756       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
3757       /* 0x1000000000000 */
3758       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
3759       /* 0x10000000000000 */
3760       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
3761       /* 0x10000080000000 */
3762       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
3763       /* 0x20000000000000 */
3764       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
3765       /* 0x80000000000000 */
3766       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
3767       /* 0x100000000000000 */
3768       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
3769 #ifdef TEST_LDOUBLE
3770       /* The input can only be represented in long double.  */
3771       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
3772       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
3773       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
3774       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
3775       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
3777       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
3778       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
3779       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
3780       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
3781       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
3783 # if LDBL_MANT_DIG > 100
3784       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
3785       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
3786       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
3787       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
3788       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
3789       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
3791       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
3792       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
3793       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
3794       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
3795       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
3796       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
3797 #endif
3799       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
3800       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
3801       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
3802       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
3803       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
3805       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
3806       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
3807       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
3808       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
3809       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
3811 # if LDBL_MANT_DIG > 100
3812       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
3813       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
3814       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
3815       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
3816       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
3817       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
3819       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
3820       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
3821       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
3822       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
3823       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
3824       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
3825 #endif
3827       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
3828       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
3829       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
3830       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
3831       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
3833       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
3834       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
3835       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
3836       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
3837       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
3839 # if LDBL_MANT_DIG > 100
3840       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
3841       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
3842       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
3843       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
3844       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
3845       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
3846       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
3847       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
3848       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
3849       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
3850       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
3851       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
3852 # endif
3853 #endif
3854     }
3856   fesetround (save_round_mode);
3858   END (llrint_towardzero);
3861 static void
3862 llrint_test_downward (void)
3864   int save_round_mode;
3865   START (llrint_downward);
3867   save_round_mode = fegetround ();
3869   if (!fesetround (FE_DOWNWARD))
3870     {
3871       TEST_f_L (llrint, 0.0, 0);
3872       TEST_f_L (llrint, minus_zero, 0);
3873       TEST_f_L (llrint, 0.2L, 0);
3874       TEST_f_L (llrint, -0.2L, -1);
3876       TEST_f_L (llrint, 1.4L, 1);
3877       TEST_f_L (llrint, -1.4L, -2);
3879       TEST_f_L (llrint, 8388600.3L, 8388600);
3880       TEST_f_L (llrint, -8388600.3L, -8388601);
3882       TEST_f_l (llrint, 1071930.0008, 1071930);
3884       /* Test boundary conditions.  */
3885       /* 0x1FFFFF */
3886       TEST_f_L (llrint, 2097151.0,2097151LL);
3887       /* 0x800000 */
3888       TEST_f_L (llrint, 8388608.0, 8388608LL);
3889       /* 0x1000000 */
3890       TEST_f_L (llrint, 16777216.0, 16777216LL);
3891       /* 0x20000000000 */
3892       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
3893       /* 0x40000000000 */
3894       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
3895       /* 0x1000000000000 */
3896       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
3897       /* 0x10000000000000 */
3898       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
3899       /* 0x10000080000000 */
3900       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
3901       /* 0x20000000000000 */
3902       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
3903       /* 0x80000000000000 */
3904       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
3905       /* 0x100000000000000 */
3906       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
3907 #ifdef TEST_LDOUBLE
3908       /* The input can only be represented in long double.  */
3909       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
3910       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
3911       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
3912       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
3913       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
3915       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
3916       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
3917       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
3918       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
3919       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
3920       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
3922       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
3923       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
3924       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
3925       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
3926       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
3928       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
3929       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
3930       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
3931       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
3932       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
3933       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
3935       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
3936       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
3937       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
3938       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
3939       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
3941       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
3942       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
3943       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
3944       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
3945       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
3946       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
3948       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
3949       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
3950       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
3951       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
3952       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
3954       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
3955       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
3956       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
3957       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
3958       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
3959       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
3961       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
3962       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
3963       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
3964       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
3965       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
3967       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
3968       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
3969       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
3970       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
3971       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
3973 # if LDBL_MANT_DIG > 100
3974       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
3975       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
3976       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
3977       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
3978       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
3979       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
3980       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
3981       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
3982       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
3983       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
3984       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
3985       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
3986 # endif
3987 #endif
3988     }
3990   fesetround (save_round_mode);
3992   END (llrint_downward);
3995 static void
3996 llrint_test_upward (void)
3998   int save_round_mode;
3999   START (llrint_upward);
4001   save_round_mode = fegetround ();
4003   if (!fesetround (FE_UPWARD))
4004     {
4005       TEST_f_L (llrint, 0.0, 0);
4006       TEST_f_L (llrint, minus_zero, 0);
4007       TEST_f_L (llrint, 0.2L, 1);
4008       TEST_f_L (llrint, -0.2L, 0);
4010       TEST_f_L (llrint, 1.4L, 2);
4011       TEST_f_L (llrint, -1.4L, -1);
4013       TEST_f_L (llrint, 8388600.3L, 8388601);
4014       TEST_f_L (llrint, -8388600.3L, -8388600);
4015 #ifndef TEST_FLOAT
4016       TEST_f_l (llrint, 1071930.0008, 1071931);
4017 #endif
4018       /* Test boundary conditions.  */
4019       /* 0x1FFFFF */
4020       TEST_f_L (llrint, 2097151.0,2097151LL);
4021       /* 0x800000 */
4022       TEST_f_L (llrint, 8388608.0, 8388608LL);
4023       /* 0x1000000 */
4024       TEST_f_L (llrint, 16777216.0, 16777216LL);
4025       /* 0x20000000000 */
4026       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4027       /* 0x40000000000 */
4028       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4029       /* 0x1000000000000 */
4030       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4031       /* 0x10000000000000 */
4032       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4033       /* 0x10000080000000 */
4034       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4035       /* 0x20000000000000 */
4036       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4037       /* 0x80000000000000 */
4038       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4039       /* 0x100000000000000 */
4040       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4041 #ifdef TEST_LDOUBLE
4042       /* The input can only be represented in long double.  */
4043       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4044       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
4045       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
4046       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4047       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4049       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
4050       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
4051       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
4052       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4053       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4054       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4056       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4057       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4058       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4059       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4060       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4062       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4063       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4064       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4065       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4066       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4067       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4069       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4070       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
4071       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
4072       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4073       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4075       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
4076       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
4077       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
4078       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4079       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4080       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4082       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4083       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4084       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4085       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4086       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4088       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4089       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4090       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4091       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4092       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4093       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4095       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4096       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
4097       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
4098       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4099       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4101       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4102       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4103       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4104       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4105       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4107 # if LDBL_MANT_DIG > 100
4108       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4109       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4110       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4111       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4112       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
4113       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4114       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
4115       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4116       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4117       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4118       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4119       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4120 # endif
4121 #endif
4122     }
4124   fesetround (save_round_mode);
4126   END (llrint_upward);
4130 static void
4131 log_test (void)
4133   errno = 0;
4134   FUNC(log) (1);
4135   if (errno == ENOSYS)
4136     /* Function not implemented.  */
4137     return;
4138   START (log);
4140   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4141   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4143   TEST_f_f (log, 1, 0);
4145   TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
4146   TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
4147   TEST_f_f (log, plus_infty, plus_infty);
4148   TEST_f_f (log, nan_value, nan_value);
4150   TEST_f_f (log, M_El, 1);
4151   TEST_f_f (log, 1.0 / M_El, -1);
4152   TEST_f_f (log, 2, M_LN2l);
4153   TEST_f_f (log, 10, M_LN10l);
4154   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
4156   END (log);
4160 static void
4161 log10_test (void)
4163   errno = 0;
4164   FUNC(log10) (1);
4165   if (errno == ENOSYS)
4166     /* Function not implemented.  */
4167     return;
4169   START (log10);
4171   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4172   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4174   TEST_f_f (log10, 1, 0);
4176   /* log10 (x) == NaN plus invalid exception if x < 0.  */
4177   TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
4178   TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
4180   TEST_f_f (log10, plus_infty, plus_infty);
4181   TEST_f_f (log10, nan_value, nan_value);
4183   TEST_f_f (log10, 0.1L, -1);
4184   TEST_f_f (log10, 10.0, 1);
4185   TEST_f_f (log10, 100.0, 2);
4186   TEST_f_f (log10, 10000.0, 4);
4187   TEST_f_f (log10, M_El, M_LOG10El);
4188   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
4190   END (log10);
4194 static void
4195 log1p_test (void)
4197   errno = 0;
4198   FUNC(log1p) (0);
4199   if (errno == ENOSYS)
4200     /* Function not implemented.  */
4201     return;
4203   START (log1p);
4205   TEST_f_f (log1p, 0, 0);
4206   TEST_f_f (log1p, minus_zero, minus_zero);
4208   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4209   TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
4210   TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
4212   TEST_f_f (log1p, plus_infty, plus_infty);
4213   TEST_f_f (log1p, nan_value, nan_value);
4215   TEST_f_f (log1p, M_El - 1.0, 1);
4217   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
4218   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
4220   END (log1p);
4224 static void
4225 log2_test (void)
4227   errno = 0;
4228   FUNC(log2) (1);
4229   if (errno == ENOSYS)
4230     /* Function not implemented.  */
4231     return;
4233   START (log2);
4235   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4236   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4238   TEST_f_f (log2, 1, 0);
4240   TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
4241   TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
4243   TEST_f_f (log2, plus_infty, plus_infty);
4244   TEST_f_f (log2, nan_value, nan_value);
4246   TEST_f_f (log2, M_El, M_LOG2El);
4247   TEST_f_f (log2, 2.0, 1);
4248   TEST_f_f (log2, 16.0, 4);
4249   TEST_f_f (log2, 256.0, 8);
4250   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
4252   END (log2);
4256 static void
4257 logb_test (void)
4259   START (logb);
4261   TEST_f_f (logb, plus_infty, plus_infty);
4262   TEST_f_f (logb, minus_infty, plus_infty);
4264   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4266   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4267   TEST_f_f (logb, nan_value, nan_value);
4269   TEST_f_f (logb, 1, 0);
4270   TEST_f_f (logb, M_El, 1);
4271   TEST_f_f (logb, 1024, 10);
4272   TEST_f_f (logb, -2000, 10);
4274   END (logb);
4278 static void
4279 lround_test (void)
4281   START (lround);
4283   TEST_f_l (lround, 0, 0);
4284   TEST_f_l (lround, minus_zero, 0);
4285   TEST_f_l (lround, 0.2L, 0.0);
4286   TEST_f_l (lround, -0.2L, 0);
4287   TEST_f_l (lround, 0.5, 1);
4288   TEST_f_l (lround, -0.5, -1);
4289   TEST_f_l (lround, 0.8L, 1);
4290   TEST_f_l (lround, -0.8L, -1);
4291   TEST_f_l (lround, 1.5, 2);
4292   TEST_f_l (lround, -1.5, -2);
4293   TEST_f_l (lround, 22514.5, 22515);
4294   TEST_f_l (lround, -22514.5, -22515);
4295   TEST_f_l (lround, 1071930.0008, 1071930);
4296 #ifndef TEST_FLOAT
4297   TEST_f_l (lround, 1073741824.01, 1073741824);
4298 # if LONG_MAX > 281474976710656
4299   TEST_f_l (lround, 281474976710656.025, 281474976710656);
4300 # endif
4301   TEST_f_l (lround, 2097152.5, 2097153);
4302   TEST_f_l (lround, -2097152.5, -2097153);
4303 #endif
4304   END (lround);
4308 static void
4309 llround_test (void)
4311   START (llround);
4313   TEST_f_L (llround, 0, 0);
4314   TEST_f_L (llround, minus_zero, 0);
4315   TEST_f_L (llround, 0.2L, 0.0);
4316   TEST_f_L (llround, -0.2L, 0);
4317   TEST_f_L (llround, 0.5, 1);
4318   TEST_f_L (llround, -0.5, -1);
4319   TEST_f_L (llround, 0.8L, 1);
4320   TEST_f_L (llround, -0.8L, -1);
4321   TEST_f_L (llround, 1.5, 2);
4322   TEST_f_L (llround, -1.5, -2);
4323   TEST_f_L (llround, 22514.5, 22515);
4324   TEST_f_L (llround, -22514.5, -22515);
4325   TEST_f_l (llround, 1071930.0008, 1071930);
4326 #ifndef TEST_FLOAT
4327   TEST_f_L (llround, 2097152.5, 2097153);
4328   TEST_f_L (llround, -2097152.5, -2097153);
4329   TEST_f_L (llround, 34359738368.5, 34359738369ll);
4330   TEST_f_L (llround, -34359738368.5, -34359738369ll);
4331 #endif
4333   /* Test boundary conditions.  */
4334   /* 0x1FFFFF */
4335   TEST_f_L (llround, 2097151.0, 2097151LL);
4336   /* 0x800000 */
4337   TEST_f_L (llround, 8388608.0, 8388608LL);
4338   /* 0x1000000 */
4339   TEST_f_L (llround, 16777216.0, 16777216LL);
4340   /* 0x20000000000 */
4341   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
4342   /* 0x40000000000 */
4343   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
4344   /* 0x1000000000000 */
4345   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
4346   /* 0x10000000000000 */
4347   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
4348   /* 0x10000080000000 */
4349   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
4350   /* 0x20000000000000 */
4351   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
4352   /* 0x80000000000000 */
4353   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
4354   /* 0x100000000000000 */
4355   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
4357 #ifndef TEST_FLOAT
4358   /* 0x100000000 */
4359   TEST_f_L (llround, 4294967295.5, 4294967296LL);
4360   /* 0x200000000 */
4361   TEST_f_L (llround, 8589934591.5, 8589934592LL);
4362 #endif
4364 #ifdef TEST_LDOUBLE
4365   /* The input can only be represented in long double.  */
4366   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
4367   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
4368   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
4369   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
4370   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
4372 # if LDBL_MANT_DIG > 100
4373   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
4374   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
4375   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
4376   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
4377   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
4378   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
4380   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
4381   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
4382   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
4383   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
4384   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
4385   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
4386 # endif
4388   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
4389   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
4390   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
4391   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
4392   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
4394   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
4395   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
4396   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
4397   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
4398   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
4400 # if LDBL_MANT_DIG > 100
4401   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
4402   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
4403   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
4404   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
4405   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
4406   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
4408   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
4409   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
4410   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
4411   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
4412   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
4413   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
4414 # endif
4416   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
4417   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
4418   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
4419   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
4420   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
4422   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
4423   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
4424   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
4425   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
4426   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
4428   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
4429   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
4430   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
4431   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
4432   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
4434   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
4435   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
4436   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
4437   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
4438   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
4439   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
4440 #endif
4442   END (llround);
4445 static void
4446 modf_test (void)
4448   FLOAT x;
4450   START (modf);
4452   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
4453   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
4454   TEST_fF_f1 (modf, nan_value, nan_value, nan_value);
4455   TEST_fF_f1 (modf, 0, 0, 0);
4456   TEST_fF_f1 (modf, 1.5, 0.5, 1);
4457   TEST_fF_f1 (modf, 2.5, 0.5, 2);
4458   TEST_fF_f1 (modf, -2.5, -0.5, -2);
4459   TEST_fF_f1 (modf, 20, 0, 20);
4460   TEST_fF_f1 (modf, 21, 0, 21);
4461   TEST_fF_f1 (modf, 89.5, 0.5, 89);
4463   END (modf);
4467 static void
4468 nearbyint_test (void)
4470   START (nearbyint);
4472   TEST_f_f (nearbyint, 0.0, 0.0);
4473   TEST_f_f (nearbyint, minus_zero, minus_zero);
4474   TEST_f_f (nearbyint, plus_infty, plus_infty);
4475   TEST_f_f (nearbyint, minus_infty, minus_infty);
4476   TEST_f_f (nearbyint, nan_value, nan_value);
4478   /* Default rounding mode is round to nearest.  */
4479   TEST_f_f (nearbyint, 0.5, 0.0);
4480   TEST_f_f (nearbyint, 1.5, 2.0);
4481   TEST_f_f (nearbyint, -0.5, minus_zero);
4482   TEST_f_f (nearbyint, -1.5, -2.0);
4484   END (nearbyint);
4487 static void
4488 nextafter_test (void)
4491   START (nextafter);
4493   TEST_ff_f (nextafter, 0, 0, 0);
4494   TEST_ff_f (nextafter, minus_zero, 0, 0);
4495   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
4496   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
4498   TEST_ff_f (nextafter, 9, 9, 9);
4499   TEST_ff_f (nextafter, -9, -9, -9);
4500   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
4501   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
4503   TEST_ff_f (nextafter, nan_value, 1.1L, nan_value);
4504   TEST_ff_f (nextafter, 1.1L, nan_value, nan_value);
4505   TEST_ff_f (nextafter, nan_value, nan_value, nan_value);
4507   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
4508                          LDBL_MAX, DBL_MAX, FLT_MAX);
4509   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty);
4510   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty);
4512 #ifdef TEST_LDOUBLE
4513   // XXX Enable once gcc is fixed.
4514   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
4515 #endif
4517   /* XXX We need the hexadecimal FP number representation here for further
4518      tests.  */
4520   END (nextafter);
4524 static void
4525 nexttoward_test (void)
4527   START (nexttoward);
4528   TEST_ff_f (nexttoward, 0, 0, 0);
4529   TEST_ff_f (nexttoward, minus_zero, 0, 0);
4530   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
4531   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
4533   TEST_ff_f (nexttoward, 9, 9, 9);
4534   TEST_ff_f (nexttoward, -9, -9, -9);
4535   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
4536   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
4538   TEST_ff_f (nexttoward, nan_value, 1.1L, nan_value);
4539   TEST_ff_f (nexttoward, 1.1L, nan_value, nan_value);
4540   TEST_ff_f (nexttoward, nan_value, nan_value, nan_value);
4542   /* XXX We need the hexadecimal FP number representation here for further
4543      tests.  */
4545   END (nexttoward);
4549 static void
4550 pow_test (void)
4553   errno = 0;
4554   FUNC(pow) (0, 0);
4555   if (errno == ENOSYS)
4556     /* Function not implemented.  */
4557     return;
4559   START (pow);
4561   TEST_ff_f (pow, 0, 0, 1);
4562   TEST_ff_f (pow, 0, minus_zero, 1);
4563   TEST_ff_f (pow, minus_zero, 0, 1);
4564   TEST_ff_f (pow, minus_zero, minus_zero, 1);
4566   TEST_ff_f (pow, 10, 0, 1);
4567   TEST_ff_f (pow, 10, minus_zero, 1);
4568   TEST_ff_f (pow, -10, 0, 1);
4569   TEST_ff_f (pow, -10, minus_zero, 1);
4571   TEST_ff_f (pow, nan_value, 0, 1);
4572   TEST_ff_f (pow, nan_value, minus_zero, 1);
4575 #ifndef TEST_INLINE
4576   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
4577   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
4578   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
4579   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
4581   TEST_ff_f (pow, 0.9L, plus_infty, 0);
4582   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
4583   TEST_ff_f (pow, -0.9L, plus_infty, 0);
4584   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
4586   TEST_ff_f (pow, 1.1L, minus_infty, 0);
4587   TEST_ff_f (pow, plus_infty, minus_infty, 0);
4588   TEST_ff_f (pow, -1.1L, minus_infty, 0);
4589   TEST_ff_f (pow, minus_infty, minus_infty, 0);
4591   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
4592   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
4593   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
4594   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
4596   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
4597   TEST_ff_f (pow, plus_infty, 1, plus_infty);
4598   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
4600   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
4601   TEST_ff_f (pow, plus_infty, -1, 0);
4602   TEST_ff_f (pow, plus_infty, -1e7L, 0);
4604   TEST_ff_f (pow, minus_infty, 1, minus_infty);
4605   TEST_ff_f (pow, minus_infty, 11, minus_infty);
4606   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
4608   TEST_ff_f (pow, minus_infty, 2, plus_infty);
4609   TEST_ff_f (pow, minus_infty, 12, plus_infty);
4610   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
4611   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
4612   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
4613   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
4614   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
4616   TEST_ff_f (pow, minus_infty, -1, minus_zero);
4617   TEST_ff_f (pow, minus_infty, -11, minus_zero);
4618   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
4620   TEST_ff_f (pow, minus_infty, -2, 0);
4621   TEST_ff_f (pow, minus_infty, -12, 0);
4622   TEST_ff_f (pow, minus_infty, -1002, 0);
4623   TEST_ff_f (pow, minus_infty, -0.1L, 0);
4624   TEST_ff_f (pow, minus_infty, -1.1L, 0);
4625   TEST_ff_f (pow, minus_infty, -11.1L, 0);
4626   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
4627 #endif
4629   TEST_ff_f (pow, nan_value, nan_value, nan_value);
4630   TEST_ff_f (pow, 0, nan_value, nan_value);
4631   TEST_ff_f (pow, 1, nan_value, 1);
4632   TEST_ff_f (pow, -1, nan_value, nan_value);
4633   TEST_ff_f (pow, nan_value, 1, nan_value);
4634   TEST_ff_f (pow, nan_value, -1, nan_value);
4636   /* pow (x, NaN) == NaN.  */
4637   TEST_ff_f (pow, 3.0, nan_value, nan_value);
4638   TEST_ff_f (pow, minus_zero, nan_value, nan_value);
4639   TEST_ff_f (pow, plus_infty, nan_value, nan_value);
4640   TEST_ff_f (pow, -3.0, nan_value, nan_value);
4641   TEST_ff_f (pow, minus_infty, nan_value, nan_value);
4643   TEST_ff_f (pow, nan_value, 3.0, nan_value);
4644   TEST_ff_f (pow, nan_value, -3.0, nan_value);
4645   TEST_ff_f (pow, nan_value, plus_infty, nan_value);
4646   TEST_ff_f (pow, nan_value, minus_infty, nan_value);
4647   TEST_ff_f (pow, nan_value, 2.5, nan_value);
4648   TEST_ff_f (pow, nan_value, -2.5, nan_value);
4650   TEST_ff_f (pow, 1, plus_infty, 1);
4651   TEST_ff_f (pow, -1, plus_infty, 1);
4652   TEST_ff_f (pow, 1, minus_infty, 1);
4653   TEST_ff_f (pow, -1, minus_infty, 1);
4654   TEST_ff_f (pow, 1, 1, 1);
4655   TEST_ff_f (pow, 1, -1, 1);
4656   TEST_ff_f (pow, 1, 1.25, 1);
4657   TEST_ff_f (pow, 1, -1.25, 1);
4658   TEST_ff_f (pow, 1, 0x1p62L, 1);
4659   TEST_ff_f (pow, 1, 0x1p63L, 1);
4660   TEST_ff_f (pow, 1, 0x1p64L, 1);
4661   TEST_ff_f (pow, 1, 0x1p72L, 1);
4663   /* pow (x, +-0) == 1.  */
4664   TEST_ff_f (pow, plus_infty, 0, 1);
4665   TEST_ff_f (pow, plus_infty, minus_zero, 1);
4666   TEST_ff_f (pow, minus_infty, 0, 1);
4667   TEST_ff_f (pow, minus_infty, minus_zero, 1);
4668   TEST_ff_f (pow, 32.75L, 0, 1);
4669   TEST_ff_f (pow, 32.75L, minus_zero, 1);
4670   TEST_ff_f (pow, -32.75L, 0, 1);
4671   TEST_ff_f (pow, -32.75L, minus_zero, 1);
4672   TEST_ff_f (pow, 0x1p72L, 0, 1);
4673   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
4674   TEST_ff_f (pow, 0x1p-72L, 0, 1);
4675   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
4677   TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION);
4678   TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION);
4679   TEST_ff_f (pow, -10.1L, 1.1L, nan_value, INVALID_EXCEPTION);
4680   TEST_ff_f (pow, -10.1L, -1.1L, nan_value, INVALID_EXCEPTION);
4682   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4683   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4684   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4685   TEST_ff_f (pow, minus_zero, -11, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4687   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4688   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4689   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4690   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4692   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty);
4693   TEST_ff_f (pow, 10, -0x1p72L, 0);
4694   TEST_ff_f (pow, max_value, max_value, plus_infty);
4695   TEST_ff_f (pow, 10, -max_value, 0);
4697   TEST_ff_f (pow, 0, 1, 0);
4698   TEST_ff_f (pow, 0, 11, 0);
4700   TEST_ff_f (pow, minus_zero, 1, minus_zero);
4701   TEST_ff_f (pow, minus_zero, 11, minus_zero);
4704   TEST_ff_f (pow, 0, 2, 0);
4705   TEST_ff_f (pow, 0, 11.1L, 0);
4708   TEST_ff_f (pow, minus_zero, 2, 0);
4709   TEST_ff_f (pow, minus_zero, 11.1L, 0);
4710   TEST_ff_f (pow, 0, plus_infty, 0);
4711   TEST_ff_f (pow, minus_zero, plus_infty, 0);
4713 #ifndef TEST_INLINE
4714   /* pow (x, +inf) == +inf for |x| > 1.  */
4715   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
4717   /* pow (x, +inf) == +0 for |x| < 1.  */
4718   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
4720   /* pow (x, -inf) == +0 for |x| > 1.  */
4721   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
4723   /* pow (x, -inf) == +inf for |x| < 1.  */
4724   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
4725 #endif
4727   /* pow (+inf, y) == +inf for y > 0.  */
4728   TEST_ff_f (pow, plus_infty, 2, plus_infty);
4730   /* pow (+inf, y) == +0 for y < 0.  */
4731   TEST_ff_f (pow, plus_infty, -1, 0.0);
4733   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
4734   TEST_ff_f (pow, minus_infty, 27, minus_infty);
4736   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
4737   TEST_ff_f (pow, minus_infty, 28, plus_infty);
4739   /* pow (-inf, y) == -0 for y an odd integer < 0. */
4740   TEST_ff_f (pow, minus_infty, -3, minus_zero);
4741   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
4742   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
4744   /* pow (+0, y) == +0 for y an odd integer > 0.  */
4745   TEST_ff_f (pow, 0.0, 27, 0.0);
4747   /* pow (-0, y) == -0 for y an odd integer > 0.  */
4748   TEST_ff_f (pow, minus_zero, 27, minus_zero);
4750   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
4751   TEST_ff_f (pow, 0.0, 4, 0.0);
4753   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
4754   TEST_ff_f (pow, minus_zero, 4, 0.0);
4756   TEST_ff_f (pow, 16, 0.25L, 2);
4757   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
4758   TEST_ff_f (pow, 2, 4, 16);
4759   TEST_ff_f (pow, 256, 8, 0x1p64L);
4761   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
4763 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
4764   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0);
4765 #endif
4767   END (pow);
4770 static void
4771 remainder_test (void)
4773   errno = 0;
4774   FUNC(remainder) (1.625, 1.0);
4775   if (errno == ENOSYS)
4776     /* Function not implemented.  */
4777     return;
4779   START (remainder);
4781   TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
4782   TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
4783   TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
4784   TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
4785   TEST_ff_f (remainder, nan_value, nan_value, nan_value);
4787   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
4788   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
4789   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
4790   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
4791   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
4792   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
4794   END (remainder);
4797 static void
4798 remquo_test (void)
4800   /* x is needed.  */
4801   int x;
4803   errno = 0;
4804   FUNC(remquo) (1.625, 1.0, &x);
4805   if (errno == ENOSYS)
4806     /* Function not implemented.  */
4807     return;
4809   START (remquo);
4811   TEST_ffI_f1 (remquo, 1, 0, nan_value, IGNORE, INVALID_EXCEPTION);
4812   TEST_ffI_f1 (remquo, 1, minus_zero, nan_value, IGNORE, INVALID_EXCEPTION);
4813   TEST_ffI_f1 (remquo, plus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
4814   TEST_ffI_f1 (remquo, minus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
4815   TEST_ffI_f1 (remquo, nan_value, nan_value, nan_value, IGNORE);
4817   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
4818   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
4819   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
4820   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
4822   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
4823   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
4825   END (remquo);
4828 static void
4829 rint_test (void)
4831   START (rint);
4833   TEST_f_f (rint, 0.0, 0.0);
4834   TEST_f_f (rint, minus_zero, minus_zero);
4835   TEST_f_f (rint, plus_infty, plus_infty);
4836   TEST_f_f (rint, minus_infty, minus_infty);
4838   /* Default rounding mode is round to even.  */
4839   TEST_f_f (rint, 0.5, 0.0);
4840   TEST_f_f (rint, 1.5, 2.0);
4841   TEST_f_f (rint, 2.5, 2.0);
4842   TEST_f_f (rint, 3.5, 4.0);
4843   TEST_f_f (rint, 4.5, 4.0);
4844   TEST_f_f (rint, -0.5, -0.0);
4845   TEST_f_f (rint, -1.5, -2.0);
4846   TEST_f_f (rint, -2.5, -2.0);
4847   TEST_f_f (rint, -3.5, -4.0);
4848   TEST_f_f (rint, -4.5, -4.0);
4849   TEST_f_f (rint, 0.1, 0.0);
4850   TEST_f_f (rint, 0.25, 0.0);
4851   TEST_f_f (rint, 0.625, 1.0);
4852   TEST_f_f (rint, -0.1, -0.0);
4853   TEST_f_f (rint, -0.25, -0.0);
4854   TEST_f_f (rint, -0.625, -1.0);
4855 #ifdef TEST_LDOUBLE
4856   /* The result can only be represented in long double.  */
4857   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
4858   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
4859   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
4860   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
4861   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
4863 # if LDBL_MANT_DIG > 100
4864   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
4865   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
4866   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
4867 # endif
4869   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
4870   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
4871   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
4872   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
4873   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
4875 # if LDBL_MANT_DIG > 100
4876   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
4877   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
4878   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
4880   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
4881   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
4882   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
4883   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
4884   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
4885   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
4887   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
4888   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
4889   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
4890   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
4891   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
4892   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
4893 # endif
4895   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
4896   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
4897   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
4898   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
4899   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
4901   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
4902   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
4903   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
4904   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
4905   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
4907   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
4908   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
4909   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
4910   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
4911   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
4913   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
4914   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
4915   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
4916   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
4917   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
4919   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
4920   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
4921   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
4922   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
4923   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
4924 #endif
4926   END (rint);
4929 static void
4930 rint_test_tonearest (void)
4932   int save_round_mode;
4933   START (rint_tonearest);
4935   save_round_mode = fegetround ();
4937   if (!fesetround (FE_TONEAREST))
4938     {
4939       TEST_f_f (rint, 2.0, 2.0);
4940       TEST_f_f (rint, 1.5, 2.0);
4941       TEST_f_f (rint, 1.0, 1.0);
4942       TEST_f_f (rint, 0.5, 0.0);
4943       TEST_f_f (rint, 0.0, 0.0);
4944       TEST_f_f (rint, minus_zero, minus_zero);
4945       TEST_f_f (rint, -0.5, -0.0);
4946       TEST_f_f (rint, -1.0, -1.0);
4947       TEST_f_f (rint, -1.5, -2.0);
4948       TEST_f_f (rint, -2.0, -2.0);
4949       TEST_f_f (rint, 0.1, 0.0);
4950       TEST_f_f (rint, 0.25, 0.0);
4951       TEST_f_f (rint, 0.625, 1.0);
4952       TEST_f_f (rint, -0.1, -0.0);
4953       TEST_f_f (rint, -0.25, -0.0);
4954       TEST_f_f (rint, -0.625, -1.0);
4955 #ifdef TEST_LDOUBLE
4956       /* The result can only be represented in long double.  */
4957       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
4958       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
4959       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
4960       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
4961       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
4962 # if LDBL_MANT_DIG > 100
4963       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
4964       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
4965       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
4966 # endif
4967       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
4968       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
4969       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
4970       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
4971       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
4972 # if LDBL_MANT_DIG > 100
4973       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
4974       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
4975       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
4977       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
4978       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
4979       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
4980       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
4981       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
4982       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
4984       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
4985       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
4986       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
4987       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
4988       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
4989       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
4990 # endif
4991 #endif
4992     }
4994   fesetround (save_round_mode);
4996   END (rint_tonearest);
4999 static void
5000 rint_test_towardzero (void)
5002   int save_round_mode;
5003   START (rint_towardzero);
5005   save_round_mode = fegetround ();
5007   if (!fesetround (FE_TOWARDZERO))
5008     {
5009       TEST_f_f (rint, 2.0, 2.0);
5010       TEST_f_f (rint, 1.5, 1.0);
5011       TEST_f_f (rint, 1.0, 1.0);
5012       TEST_f_f (rint, 0.5, 0.0);
5013       TEST_f_f (rint, 0.0, 0.0);
5014       TEST_f_f (rint, minus_zero, minus_zero);
5015       TEST_f_f (rint, -0.5, -0.0);
5016       TEST_f_f (rint, -1.0, -1.0);
5017       TEST_f_f (rint, -1.5, -1.0);
5018       TEST_f_f (rint, -2.0, -2.0);
5019       TEST_f_f (rint, 0.1, 0.0);
5020       TEST_f_f (rint, 0.25, 0.0);
5021       TEST_f_f (rint, 0.625, 0.0);
5022       TEST_f_f (rint, -0.1, -0.0);
5023       TEST_f_f (rint, -0.25, -0.0);
5024       TEST_f_f (rint, -0.625, -0.0);
5025 #ifdef TEST_LDOUBLE
5026       /* The result can only be represented in long double.  */
5027       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
5028       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5029       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5030       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
5031       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5032 # if LDBL_MANT_DIG > 100
5033       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
5034       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
5035       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5036 # endif
5037       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
5038       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5039       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5040       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
5041       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5042 # if LDBL_MANT_DIG > 100
5043       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
5044       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
5045       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
5047       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5048       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5049       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5050       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
5051       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
5052       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
5054       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5055       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5056       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5057       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
5058       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
5059       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5060 # endif
5061 #endif
5062     }
5064   fesetround (save_round_mode);
5066   END (rint_towardzero);
5069 static void
5070 rint_test_downward (void)
5072   int save_round_mode;
5073   START (rint_downward);
5075   save_round_mode = fegetround ();
5077   if (!fesetround (FE_DOWNWARD))
5078     {
5079       TEST_f_f (rint, 2.0, 2.0);
5080       TEST_f_f (rint, 1.5, 1.0);
5081       TEST_f_f (rint, 1.0, 1.0);
5082       TEST_f_f (rint, 0.5, 0.0);
5083       TEST_f_f (rint, 0.0, 0.0);
5084       TEST_f_f (rint, minus_zero, minus_zero);
5085       TEST_f_f (rint, -0.5, -1.0);
5086       TEST_f_f (rint, -1.0, -1.0);
5087       TEST_f_f (rint, -1.5, -2.0);
5088       TEST_f_f (rint, -2.0, -2.0);
5089       TEST_f_f (rint, 0.1, 0.0);
5090       TEST_f_f (rint, 0.25, 0.0);
5091       TEST_f_f (rint, 0.625, 0.0);
5092       TEST_f_f (rint, -0.1, -1.0);
5093       TEST_f_f (rint, -0.25, -1.0);
5094       TEST_f_f (rint, -0.625, -1.0);
5095 #ifdef TEST_LDOUBLE
5096       /* The result can only be represented in long double.  */
5097       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
5098       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5099       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5100       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
5101       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5102 # if LDBL_MANT_DIG > 100
5103       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
5104       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
5105       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5106 # endif
5107       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5108       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
5109       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
5110       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5111       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5112 # if LDBL_MANT_DIG > 100
5113       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5114       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5115       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5117       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5118       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5119       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5120       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
5121       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
5122       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
5124       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
5125       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
5126       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
5127       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5128       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5129       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5130 # endif
5131 #endif
5132     }
5134   fesetround (save_round_mode);
5136   END (rint_downward);
5139 static void
5140 rint_test_upward (void)
5142   int save_round_mode;
5143   START (rint_upward);
5145   save_round_mode = fegetround ();
5147   if (!fesetround (FE_UPWARD))
5148     {
5149       TEST_f_f (rint, 2.0, 2.0);
5150       TEST_f_f (rint, 1.5, 2.0);
5151       TEST_f_f (rint, 1.0, 1.0);
5152       TEST_f_f (rint, 0.5, 1.0);
5153       TEST_f_f (rint, 0.0, 0.0);
5154       TEST_f_f (rint, minus_zero, minus_zero);
5155       TEST_f_f (rint, -0.5, -0.0);
5156       TEST_f_f (rint, -1.0, -1.0);
5157       TEST_f_f (rint, -1.5, -1.0);
5158       TEST_f_f (rint, -2.0, -2.0);
5159       TEST_f_f (rint, 0.1, 1.0);
5160       TEST_f_f (rint, 0.25, 1.0);
5161       TEST_f_f (rint, 0.625, 1.0);
5162       TEST_f_f (rint, -0.1, -0.0);
5163       TEST_f_f (rint, -0.25, -0.0);
5164       TEST_f_f (rint, -0.625, -0.0);
5165 #ifdef TEST_LDOUBLE
5166       /* The result can only be represented in long double.  */
5167       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5168       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
5169       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
5170       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5171       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5172 # if LDBL_MANT_DIG > 100
5173       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5174       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5175       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5176 # endif
5177       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
5178       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5179       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5180       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
5181       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5182 # if LDBL_MANT_DIG > 100
5183       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
5184       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
5185       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
5187       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
5188       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
5189       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
5190       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5191       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5192       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5194       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5195       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5196       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5197       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
5198       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
5199       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5200 # endif
5201 #endif
5202     }
5204   fesetround (save_round_mode);
5206   END (rint_upward);
5209 static void
5210 round_test (void)
5212   START (round);
5214   TEST_f_f (round, 0, 0);
5215   TEST_f_f (round, minus_zero, minus_zero);
5216   TEST_f_f (round, 0.2L, 0.0);
5217   TEST_f_f (round, -0.2L, minus_zero);
5218   TEST_f_f (round, 0.5, 1.0);
5219   TEST_f_f (round, -0.5, -1.0);
5220   TEST_f_f (round, 0.8L, 1.0);
5221   TEST_f_f (round, -0.8L, -1.0);
5222   TEST_f_f (round, 1.5, 2.0);
5223   TEST_f_f (round, -1.5, -2.0);
5224   TEST_f_f (round, 0.1, 0.0);
5225   TEST_f_f (round, 0.25, 0.0);
5226   TEST_f_f (round, 0.625, 1.0);
5227   TEST_f_f (round, -0.1, -0.0);
5228   TEST_f_f (round, -0.25, -0.0);
5229   TEST_f_f (round, -0.625, -1.0);
5230   TEST_f_f (round, 2097152.5, 2097153);
5231   TEST_f_f (round, -2097152.5, -2097153);
5233 #ifdef TEST_LDOUBLE
5234   /* The result can only be represented in long double.  */
5235   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
5236   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
5237   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
5238   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
5239   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
5240 # if LDBL_MANT_DIG > 100
5241   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
5242   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
5243   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
5244 # endif
5246   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
5247   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
5248   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
5249   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
5250   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
5251 # if LDBL_MANT_DIG > 100
5252   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
5253   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
5254   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
5255 # endif
5257   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
5258   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
5259   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
5260   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
5261   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
5263   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
5264   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
5265   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
5266   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
5267   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
5269 # if LDBL_MANT_DIG > 100
5270   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
5271   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
5272   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
5273   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
5274   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
5275   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
5277   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
5278   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
5279   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
5280   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
5281   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
5282   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
5283 # endif
5285   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
5286   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
5287   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
5288   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
5289   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
5291   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
5292   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
5293   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
5294   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
5295   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
5297   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5298   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
5299   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
5300   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5301   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5302 #endif
5304   END (round);
5308 static void
5309 scalb_test (void)
5312   START (scalb);
5314   TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION);
5315   TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION);
5317   TEST_ff_f (scalb, 0, nan_value, nan_value);
5318   TEST_ff_f (scalb, 1, nan_value, nan_value);
5320   TEST_ff_f (scalb, 1, 0, 1);
5321   TEST_ff_f (scalb, -1, 0, -1);
5323   TEST_ff_f (scalb, 0, plus_infty, nan_value, INVALID_EXCEPTION);
5324   TEST_ff_f (scalb, minus_zero, plus_infty, nan_value, INVALID_EXCEPTION);
5326   TEST_ff_f (scalb, 0, 2, 0);
5327   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
5328   TEST_ff_f (scalb, 0, 0, 0);
5329   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
5330   TEST_ff_f (scalb, 0, -1, 0);
5331   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
5332   TEST_ff_f (scalb, 0, minus_infty, 0);
5333   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
5335   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
5336   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
5337   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
5338   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
5339   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
5340   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
5342   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
5343   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
5345   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
5346   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
5347   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
5348   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
5350   TEST_ff_f (scalb, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
5351   TEST_ff_f (scalb, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
5353   TEST_ff_f (scalb, nan_value, 1, nan_value);
5354   TEST_ff_f (scalb, 1, nan_value, nan_value);
5355   TEST_ff_f (scalb, nan_value, 0, nan_value);
5356   TEST_ff_f (scalb, 0, nan_value, nan_value);
5357   TEST_ff_f (scalb, nan_value, plus_infty, nan_value);
5358   TEST_ff_f (scalb, plus_infty, nan_value, nan_value);
5359   TEST_ff_f (scalb, nan_value, nan_value, nan_value);
5361   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
5362   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
5364   END (scalb);
5368 static void
5369 scalbn_test (void)
5372   START (scalbn);
5374   TEST_fi_f (scalbn, 0, 0, 0);
5375   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
5377   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
5378   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
5379   TEST_fi_f (scalbn, nan_value, 1, nan_value);
5381   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
5382   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
5384   TEST_fi_f (scalbn, 1, 0L, 1);
5386   END (scalbn);
5390 static void
5391 scalbln_test (void)
5394   START (scalbln);
5396   TEST_fl_f (scalbln, 0, 0, 0);
5397   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
5399   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
5400   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
5401   TEST_fl_f (scalbln, nan_value, 1, nan_value);
5403   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
5404   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
5406   TEST_fl_f (scalbln, 1, 0L, 1);
5408   END (scalbn);
5412 static void
5413 signbit_test (void)
5416   START (signbit);
5418   TEST_f_b (signbit, 0, 0);
5419   TEST_f_b (signbit, minus_zero, 1);
5420   TEST_f_b (signbit, plus_infty, 0);
5421   TEST_f_b (signbit, minus_infty, 1);
5423   /* signbit (x) != 0 for x < 0.  */
5424   TEST_f_b (signbit, -1, 1);
5425   /* signbit (x) == 0 for x >= 0.  */
5426   TEST_f_b (signbit, 1, 0);
5428   END (signbit);
5432 static void
5433 sin_test (void)
5435   errno = 0;
5436   FUNC(sin) (0);
5437   if (errno == ENOSYS)
5438     /* Function not implemented.  */
5439     return;
5441   START (sin);
5443   TEST_f_f (sin, 0, 0);
5444   TEST_f_f (sin, minus_zero, minus_zero);
5445   TEST_f_f (sin, plus_infty, nan_value, INVALID_EXCEPTION);
5446   TEST_f_f (sin, minus_infty, nan_value, INVALID_EXCEPTION);
5447   TEST_f_f (sin, nan_value, nan_value);
5449   TEST_f_f (sin, M_PI_6l, 0.5);
5450   TEST_f_f (sin, -M_PI_6l, -0.5);
5451   TEST_f_f (sin, M_PI_2l, 1);
5452   TEST_f_f (sin, -M_PI_2l, -1);
5453   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
5455 #ifdef TEST_DOUBLE
5456   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
5457 #endif
5459   END (sin);
5464 static void
5465 sincos_test (void)
5467   FLOAT sin_res, cos_res;
5469   errno = 0;
5470   FUNC(sincos) (0, &sin_res, &cos_res);
5471   if (errno == ENOSYS)
5472     /* Function not implemented.  */
5473     return;
5475   START (sincos);
5477   /* sincos is treated differently because it returns void.  */
5478   TEST_extra (sincos, 0, 0, 1);
5480   TEST_extra (sincos, minus_zero, minus_zero, 1);
5481   TEST_extra (sincos, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
5482   TEST_extra (sincos, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
5483   TEST_extra (sincos, nan_value, nan_value, nan_value);
5485   TEST_extra (sincos, M_PI_2l, 1, 0);
5486   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
5487   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
5488   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
5490 #ifdef TEST_DOUBLE
5491   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
5492 #endif
5494   END (sincos);
5497 static void
5498 sinh_test (void)
5500   errno = 0;
5501   FUNC(sinh) (0.7L);
5502   if (errno == ENOSYS)
5503     /* Function not implemented.  */
5504     return;
5506   START (sinh);
5507   TEST_f_f (sinh, 0, 0);
5508   TEST_f_f (sinh, minus_zero, minus_zero);
5510 #ifndef TEST_INLINE
5511   TEST_f_f (sinh, plus_infty, plus_infty);
5512   TEST_f_f (sinh, minus_infty, minus_infty);
5513 #endif
5514   TEST_f_f (sinh, nan_value, nan_value);
5516   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
5517   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
5519   END (sinh);
5522 static void
5523 sqrt_test (void)
5525   errno = 0;
5526   FUNC(sqrt) (1);
5527   if (errno == ENOSYS)
5528     /* Function not implemented.  */
5529     return;
5531   START (sqrt);
5533   TEST_f_f (sqrt, 0, 0);
5534   TEST_f_f (sqrt, nan_value, nan_value);
5535   TEST_f_f (sqrt, plus_infty, plus_infty);
5537   TEST_f_f (sqrt, minus_zero, minus_zero);
5539   /* sqrt (x) == NaN plus invalid exception for x < 0.  */
5540   TEST_f_f (sqrt, -1, nan_value, INVALID_EXCEPTION);
5541   TEST_f_f (sqrt, minus_infty, nan_value, INVALID_EXCEPTION);
5542   TEST_f_f (sqrt, nan_value, nan_value);
5544   TEST_f_f (sqrt, 2209, 47);
5545   TEST_f_f (sqrt, 4, 2);
5546   TEST_f_f (sqrt, 2, M_SQRT2l);
5547   TEST_f_f (sqrt, 0.25, 0.5);
5548   TEST_f_f (sqrt, 6642.25, 81.5);
5549   TEST_f_f (sqrt, 15190.5625L, 123.25L);
5550   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
5552   END (sqrt);
5556 static void
5557 tan_test (void)
5559   errno = 0;
5560   FUNC(tan) (0);
5561   if (errno == ENOSYS)
5562     /* Function not implemented.  */
5563     return;
5565   START (tan);
5567   TEST_f_f (tan, 0, 0);
5568   TEST_f_f (tan, minus_zero, minus_zero);
5569   TEST_f_f (tan, plus_infty, nan_value, INVALID_EXCEPTION);
5570   TEST_f_f (tan, minus_infty, nan_value, INVALID_EXCEPTION);
5571   TEST_f_f (tan, nan_value, nan_value);
5573   TEST_f_f (tan, M_PI_4l, 1);
5574   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
5576   END (tan);
5579 static void
5580 tanh_test (void)
5582   errno = 0;
5583   FUNC(tanh) (0.7L);
5584   if (errno == ENOSYS)
5585     /* Function not implemented.  */
5586     return;
5588   START (tanh);
5590   TEST_f_f (tanh, 0, 0);
5591   TEST_f_f (tanh, minus_zero, minus_zero);
5593 #ifndef TEST_INLINE
5594   TEST_f_f (tanh, plus_infty, 1);
5595   TEST_f_f (tanh, minus_infty, -1);
5596 #endif
5597   TEST_f_f (tanh, nan_value, nan_value);
5599   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
5600   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
5602   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
5603   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
5605   /* 2^-57  */
5606   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
5608   END (tanh);
5611 static void
5612 tgamma_test (void)
5614   errno = 0;
5615   FUNC(tgamma) (1);
5616   if (errno == ENOSYS)
5617     /* Function not implemented.  */
5618     return;
5619   feclearexcept (FE_ALL_EXCEPT);
5621   START (tgamma);
5623   TEST_f_f (tgamma, plus_infty, plus_infty);
5624   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5625   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5626   /* tgamma (x) == NaN plus invalid exception for integer x <= 0.  */
5627   TEST_f_f (tgamma, -2, nan_value, INVALID_EXCEPTION);
5628   TEST_f_f (tgamma, minus_infty, nan_value, INVALID_EXCEPTION);
5629   TEST_f_f (tgamma, nan_value, nan_value);
5631   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
5632   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
5634   TEST_f_f (tgamma, 1, 1);
5635   TEST_f_f (tgamma, 4, 6);
5637   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
5638   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
5640   END (tgamma);
5644 static void
5645 trunc_test (void)
5647   START (trunc);
5649   TEST_f_f (trunc, plus_infty, plus_infty);
5650   TEST_f_f (trunc, minus_infty, minus_infty);
5651   TEST_f_f (trunc, nan_value, nan_value);
5653   TEST_f_f (trunc, 0, 0);
5654   TEST_f_f (trunc, minus_zero, minus_zero);
5655   TEST_f_f (trunc, 0.1, 0);
5656   TEST_f_f (trunc, 0.25, 0);
5657   TEST_f_f (trunc, 0.625, 0);
5658   TEST_f_f (trunc, -0.1, minus_zero);
5659   TEST_f_f (trunc, -0.25, minus_zero);
5660   TEST_f_f (trunc, -0.625, minus_zero);
5661   TEST_f_f (trunc, 1, 1);
5662   TEST_f_f (trunc, -1, -1);
5663   TEST_f_f (trunc, 1.625, 1);
5664   TEST_f_f (trunc, -1.625, -1);
5666   TEST_f_f (trunc, 1048580.625L, 1048580L);
5667   TEST_f_f (trunc, -1048580.625L, -1048580L);
5669   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
5670   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
5672   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
5673   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
5675 #ifdef TEST_LDOUBLE
5676   /* The result can only be represented in long double.  */
5677   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
5678   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
5679   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
5680   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
5681   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
5683 # if LDBL_MANT_DIG > 100
5684   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
5685   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
5686   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
5687 # endif
5689   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
5690   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
5691   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
5692   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
5693   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
5695 # if LDBL_MANT_DIG > 100
5696   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
5697   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
5698   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
5699 # endif
5701   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
5702   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
5703   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
5704   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
5705   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
5707 # if LDBL_MANT_DIG > 100
5708   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
5709   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
5710   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
5711   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
5712   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
5713   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
5714 # endif
5716   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
5717   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
5718   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
5719   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
5720   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
5722 # if LDBL_MANT_DIG > 100
5723   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
5724   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
5725   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
5726   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
5727   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
5728   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
5729 # endif
5731   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
5732   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
5733   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
5734   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
5735   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
5737   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
5738   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
5739   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
5740   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
5741   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
5743   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
5744   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
5745   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
5746   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
5747   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
5748 #endif
5750   END (trunc);
5753 static void
5754 y0_test (void)
5756   FLOAT s, c;
5757   errno = 0;
5758   FUNC (sincos) (0, &s, &c);
5759   if (errno == ENOSYS)
5760     /* Required function not implemented.  */
5761     return;
5762   FUNC(y0) (1);
5763   if (errno == ENOSYS)
5764     /* Function not implemented.  */
5765     return;
5767   /* y0 is the Bessel function of the second kind of order 0 */
5768   START (y0);
5770   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
5771   TEST_f_f (y0, 0.0, minus_infty);
5772   TEST_f_f (y0, nan_value, nan_value);
5773   TEST_f_f (y0, plus_infty, 0);
5775   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
5776   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
5777   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
5778   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
5779   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
5780   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
5781   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
5783   END (y0);
5787 static void
5788 y1_test (void)
5790   FLOAT s, c;
5791   errno = 0;
5792   FUNC (sincos) (0, &s, &c);
5793   if (errno == ENOSYS)
5794     /* Required function not implemented.  */
5795     return;
5796   FUNC(y1) (1);
5797   if (errno == ENOSYS)
5798     /* Function not implemented.  */
5799     return;
5801   /* y1 is the Bessel function of the second kind of order 1 */
5802   START (y1);
5804   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
5805   TEST_f_f (y1, 0.0, minus_infty);
5806   TEST_f_f (y1, plus_infty, 0);
5807   TEST_f_f (y1, nan_value, nan_value);
5809   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
5810   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
5811   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
5812   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
5813   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
5814   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
5815   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
5817   END (y1);
5821 static void
5822 yn_test (void)
5824   FLOAT s, c;
5825   errno = 0;
5826   FUNC (sincos) (0, &s, &c);
5827   if (errno == ENOSYS)
5828     /* Required function not implemented.  */
5829     return;
5830   FUNC(yn) (1, 1);
5831   if (errno == ENOSYS)
5832     /* Function not implemented.  */
5833     return;
5835   /* yn is the Bessel function of the second kind of order n */
5836   START (yn);
5838   /* yn (0, x) == y0 (x)  */
5839   TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
5840   TEST_ff_f (yn, 0, 0.0, minus_infty);
5841   TEST_ff_f (yn, 0, nan_value, nan_value);
5842   TEST_ff_f (yn, 0, plus_infty, 0);
5844   TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
5845   TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
5846   TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
5847   TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
5848   TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
5849   TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
5850   TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
5852   /* yn (1, x) == y1 (x)  */
5853   TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
5854   TEST_ff_f (yn, 1, 0.0, minus_infty);
5855   TEST_ff_f (yn, 1, plus_infty, 0);
5856   TEST_ff_f (yn, 1, nan_value, nan_value);
5858   TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
5859   TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
5860   TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
5861   TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
5862   TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
5863   TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
5864   TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
5866   /* yn (3, x)  */
5867   TEST_ff_f (yn, 3, plus_infty, 0);
5868   TEST_ff_f (yn, 3, nan_value, nan_value);
5870   TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
5871   TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
5872   TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
5873   TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
5874   TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
5876   /* yn (10, x)  */
5877   TEST_ff_f (yn, 10, plus_infty, 0);
5878   TEST_ff_f (yn, 10, nan_value, nan_value);
5880   TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
5881   TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
5882   TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
5883   TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
5884   TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
5886   END (yn);
5891 static void
5892 significand_test (void)
5894   /* significand returns the mantissa of the exponential representation.  */
5895   START (significand);
5897   TEST_f_f (significand, 4.0, 1.0);
5898   TEST_f_f (significand, 6.0, 1.5);
5899   TEST_f_f (significand, 8.0, 1.0);
5901   END (significand);
5905 static void
5906 initialize (void)
5908   fpstack_test ("start *init*");
5909   plus_zero = 0.0;
5910   nan_value = plus_zero / plus_zero;    /* Suppress GCC warning */
5912   minus_zero = FUNC(copysign) (0.0, -1.0);
5913   plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
5914                        HUGE_VALL, HUGE_VAL, HUGE_VALF);
5915   minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
5916                         -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
5917   max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
5918                       LDBL_MAX, DBL_MAX, FLT_MAX);
5919   min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
5920                       LDBL_MIN, DBL_MIN, FLT_MIN);
5922   (void) &plus_zero;
5923   (void) &nan_value;
5924   (void) &minus_zero;
5925   (void) &plus_infty;
5926   (void) &minus_infty;
5927   (void) &max_value;
5928   (void) &min_value;
5930   /* Clear all exceptions.  From now on we must not get random exceptions.  */
5931   feclearexcept (FE_ALL_EXCEPT);
5933   /* Test to make sure we start correctly.  */
5934   fpstack_test ("end *init*");
5937 /* Definitions of arguments for argp functions.  */
5938 static const struct argp_option options[] =
5940   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
5941   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
5942   { "no-max-error", 'f', NULL, 0,
5943     "Don't output maximal errors of functions"},
5944   { "no-points", 'p', NULL, 0,
5945     "Don't output results of functions invocations"},
5946   { "ignore-max-ulp", 'i', "yes/no", 0,
5947     "Ignore given maximal errors"},
5948   { NULL, 0, NULL, 0, NULL }
5951 /* Short description of program.  */
5952 static const char doc[] = "Math test suite: " TEST_MSG ;
5954 /* Prototype for option handler.  */
5955 static error_t parse_opt (int key, char *arg, struct argp_state *state);
5957 /* Data structure to communicate with argp functions.  */
5958 static struct argp argp =
5960   options, parse_opt, NULL, doc,
5964 /* Handle program arguments.  */
5965 static error_t
5966 parse_opt (int key, char *arg, struct argp_state *state)
5968   switch (key)
5969     {
5970     case 'f':
5971       output_max_error = 0;
5972       break;
5973     case 'i':
5974       if (strcmp (arg, "yes") == 0)
5975         ignore_max_ulp = 1;
5976       else if (strcmp (arg, "no") == 0)
5977         ignore_max_ulp = 0;
5978       break;
5979     case 'p':
5980       output_points = 0;
5981       break;
5982     case 'u':
5983       output_ulps = 1;
5984       break;
5985     case 'v':
5986       if (optarg)
5987         verbose = (unsigned int) strtoul (optarg, NULL, 0);
5988       else
5989         verbose = 3;
5990       break;
5991     default:
5992       return ARGP_ERR_UNKNOWN;
5993     }
5994   return 0;
5997 #if 0
5998 /* function to check our ulp calculation.  */
5999 void
6000 check_ulp (void)
6002   int i;
6004   FLOAT u, diff, ulp;
6005   /* This gives one ulp.  */
6006   u = FUNC(nextafter) (10, 20);
6007   check_equal (10.0, u, 1, &diff, &ulp);
6008   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
6010   /* This gives one more ulp.  */
6011   u = FUNC(nextafter) (u, 20);
6012   check_equal (10.0, u, 2, &diff, &ulp);
6013   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
6015   /* And now calculate 100 ulp.  */
6016   for (i = 2; i < 100; i++)
6017     u = FUNC(nextafter) (u, 20);
6018   check_equal (10.0, u, 100, &diff, &ulp);
6019   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
6021 #endif
6024 main (int argc, char **argv)
6027   int remaining;
6029   verbose = 1;
6030   output_ulps = 0;
6031   output_max_error = 1;
6032   output_points = 1;
6033   /* XXX set to 0 for releases.  */
6034   ignore_max_ulp = 0;
6036   /* Parse and process arguments.  */
6037   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
6039   if (remaining != argc)
6040     {
6041       fprintf (stderr, "wrong number of arguments");
6042       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
6043       exit (EXIT_FAILURE);
6044     }
6046   if (output_ulps)
6047     {
6048       ulps_file = fopen ("ULPs", "a");
6049       if (ulps_file == NULL)
6050         {
6051           perror ("can't open file `ULPs' for writing: ");
6052           exit (1);
6053         }
6054     }
6057   initialize ();
6058   printf (TEST_MSG);
6060 #if 0
6061   check_ulp ();
6062 #endif
6064   /* Keep the tests a wee bit ordered (according to ISO C99).  */
6065   /* Classification macros:  */
6066   fpclassify_test ();
6067   isfinite_test ();
6068   isnormal_test ();
6069   signbit_test ();
6071   /* Trigonometric functions:  */
6072   acos_test ();
6073   asin_test ();
6074   atan_test ();
6075   atan2_test ();
6076   cos_test ();
6077   sin_test ();
6078   sincos_test ();
6079   tan_test ();
6081   /* Hyperbolic functions:  */
6082   acosh_test ();
6083   asinh_test ();
6084   atanh_test ();
6085   cosh_test ();
6086   sinh_test ();
6087   tanh_test ();
6089   /* Exponential and logarithmic functions:  */
6090   exp_test ();
6091   exp10_test ();
6092   exp2_test ();
6093   expm1_test ();
6094   frexp_test ();
6095   ldexp_test ();
6096   log_test ();
6097   log10_test ();
6098   log1p_test ();
6099   log2_test ();
6100   logb_test ();
6101   modf_test ();
6102   ilogb_test ();
6103   scalb_test ();
6104   scalbn_test ();
6105   scalbln_test ();
6106   significand_test ();
6108   /* Power and absolute value functions:  */
6109   cbrt_test ();
6110   fabs_test ();
6111   hypot_test ();
6112   pow_test ();
6113   sqrt_test ();
6115   /* Error and gamma functions:  */
6116   erf_test ();
6117   erfc_test ();
6118   gamma_test ();
6119   lgamma_test ();
6120   tgamma_test ();
6122   /* Nearest integer functions:  */
6123   ceil_test ();
6124   floor_test ();
6125   nearbyint_test ();
6126   rint_test ();
6127   rint_test_tonearest ();
6128   rint_test_towardzero ();
6129   rint_test_downward ();
6130   rint_test_upward ();
6131   lrint_test ();
6132   lrint_test_tonearest ();
6133   lrint_test_towardzero ();
6134   lrint_test_downward ();
6135   lrint_test_upward ();
6136   llrint_test ();
6137   llrint_test_tonearest ();
6138   llrint_test_towardzero ();
6139   llrint_test_downward ();
6140   llrint_test_upward ();
6141   round_test ();
6142   lround_test ();
6143   llround_test ();
6144   trunc_test ();
6146   /* Remainder functions:  */
6147   fmod_test ();
6148   remainder_test ();
6149   remquo_test ();
6151   /* Manipulation functions:  */
6152   copysign_test ();
6153   nextafter_test ();
6154   nexttoward_test ();
6156   /* maximum, minimum and positive difference functions */
6157   fdim_test ();
6158   fmax_test ();
6159   fmin_test ();
6161   /* Multiply and add:  */
6162   fma_test ();
6164   /* Complex functions:  */
6165   cabs_test ();
6166   cacos_test ();
6167   cacosh_test ();
6168   carg_test ();
6169   casin_test ();
6170   casinh_test ();
6171   catan_test ();
6172   catanh_test ();
6173   ccos_test ();
6174   ccosh_test ();
6175   cexp_test ();
6176   cimag_test ();
6177   clog10_test ();
6178   clog_test ();
6179   conj_test ();
6180   cpow_test ();
6181   cproj_test ();
6182   creal_test ();
6183   csin_test ();
6184   csinh_test ();
6185   csqrt_test ();
6186   ctan_test ();
6187   ctanh_test ();
6189   /* Bessel functions:  */
6190   j0_test ();
6191   j1_test ();
6192   jn_test ();
6193   y0_test ();
6194   y1_test ();
6195   yn_test ();
6197   if (output_ulps)
6198     fclose (ulps_file);
6200   printf ("\nTest suite completed:\n");
6201   printf ("  %d test cases plus %d tests for exception flags executed.\n",
6202           noTests, noExcTests);
6203   if (noXFails)
6204     printf ("  %d expected failures occurred.\n", noXFails);
6205   if (noXPasses)
6206     printf ("  %d unexpected passes occurred.\n", noXPasses);
6207   if (noErrors)
6208     {
6209       printf ("  %d errors occurred.\n", noErrors);
6210       return 1;
6211     }
6212   printf ("  All tests passed successfully.\n");
6214   return 0;
6218  * Local Variables:
6219  * mode:c
6220  * End:
6221  */