b144796f2ab7a5df95841bd2158b728ac8b44735
[kopensolaris-gnu/glibc.git] / math / libm-test.inc
1 /* Copyright (C) 1997-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Andreas Jaeger <aj@suse.de>, 1997.
4
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.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
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.  */
19
20 /* Part of testsuite for libm.
21
22    This file is processed by a perl script.  The resulting file has to
23    be included by a master file that defines:
24
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.  */
40
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
55
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.
59
60    At the moment the following functions aren't tested:
61    drem, nan
62
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  */
71
72 /* "Philosophy":
73
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.
81
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.
85
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.
89
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.
99
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
105
106    With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
107
108
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.  */
114
115 #ifndef _GNU_SOURCE
116 # define _GNU_SOURCE
117 #endif
118
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>
125
126 #include <errno.h>
127 #include <stdlib.h>
128 #include <stdio.h>
129 #include <string.h>
130 #include <argp.h>
131
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
142
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 */
157
158 static FILE *ulps_file; /* File to document difference.  */
159 static int output_ulps; /* Should ulps printed?  */
160
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.  */
166
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?  */
171
172 static FLOAT minus_zero, plus_zero;
173 static FLOAT plus_infty, minus_infty, nan_value, max_value, min_value;
174
175 static FLOAT max_error, real_max_error, imag_max_error;
176
177
178 #define BUILD_COMPLEX(real, imag) \
179   ({ __complex__ FLOAT __retval;                                              \
180      __real__ __retval = (real);                                              \
181      __imag__ __retval = (imag);                                              \
182      __retval; })
183
184 #define BUILD_COMPLEX_INT(real, imag) \
185   ({ __complex__ int __retval;                                                \
186      __real__ __retval = (real);                                              \
187      __imag__ __retval = (imag);                                              \
188      __retval; })
189
190
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))
193
194 static void
195 init_max_error (void)
196 {
197   max_error = 0;
198   real_max_error = 0;
199   imag_max_error = 0;
200   feclearexcept (FE_ALL_EXCEPT);
201 }
202
203 static void
204 set_max_error (FLOAT current, FLOAT *curr_max_error)
205 {
206   if (current > *curr_max_error)
207     *curr_max_error = current;
208 }
209
210
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)
215 {
216   if (output_points
217       && (verbose > 1
218           || (verbose == 1 && ok == xfail)))
219     return 1;
220   return 0;
221 }
222
223
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)
228 {
229   if (output_max_error
230       && (verbose > 1
231           || ((verbose == 1) && (ok == xfail))))
232     return 1;
233   return 0;
234 }
235
236 /* Update statistic counters.  */
237 static void
238 update_stats (int ok, int xfail)
239 {
240   ++noTests;
241   if (ok && xfail)
242     ++noXPasses;
243   else if (!ok && xfail)
244     ++noXFails;
245   else if (!ok && !xfail)
246     ++noErrors;
247 }
248
249 static void
250 print_ulps (const char *test_name, FLOAT ulp)
251 {
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     }
260 }
261
262 static void
263 print_function_ulps (const char *function_name, FLOAT ulp)
264 {
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     }
273 }
274
275
276 static void
277 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
278                              FLOAT imag_ulp)
279 {
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         }
298
299
300     }
301 }
302
303
304
305 /* Test if Floating-Point stack hasn't changed */
306 static void
307 fpstack_test (const char *test_name)
308 {
309 #ifdef i386
310   static int old_stack;
311   int sw;
312
313   asm ("fnstsw" : "=a" (sw));
314   sw >>= 11;
315   sw &= 7;
316
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
325 }
326
327
328 static void
329 print_max_error (const char *func_name, FLOAT allowed, int xfail)
330 {
331   int ok = 0;
332
333   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
334     {
335       ok = 1;
336     }
337
338   if (!ok)
339     print_function_ulps (func_name, max_error);
340
341
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     }
348
349   update_stats (ok, xfail);
350 }
351
352
353 static void
354 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
355                          __complex__ int xfail)
356 {
357   int ok = 0;
358
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     }
366
367   if (!ok)
368     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
369
370
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     }
384
385   update_stats (ok, xfail);
386 }
387
388
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)
396 {
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;
432
433 #endif
434 }
435
436
437 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
438    allowed but not required exceptions.
439 */
440 static void
441 test_exceptions (const char *test_name, int exception)
442 {
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);
456 }
457
458
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)
463 {
464   int ok = 0;
465   int print_diff = 0;
466   FLOAT diff = 0;
467   FLOAT ulp = 0;
468
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       /* ilogb (0) isn't allowed.  */
491       if (expected == 0.0)
492         ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
493       else
494         ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
495       set_max_error (ulp, curr_max_error);
496       print_diff = 1;
497       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
498           && computed == 0.0 && expected == 0.0
499           && signbit(computed) != signbit (expected))
500         ok = 0;
501       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
502         ok = 1;
503       else
504         {
505           ok = 0;
506           print_ulps (test_name, ulp);
507         }
508
509     }
510   if (print_screen (ok, xfail))
511     {
512       if (!ok)
513         printf ("Failure: ");
514       printf ("Test: %s\n", test_name);
515       printf ("Result:\n");
516       printf (" is:         % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n",
517               computed, computed);
518       printf (" should be:  % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n",
519               expected, expected);
520       if (print_diff)
521         {
522           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
523                   "\n", diff, diff);
524           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
525           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
526         }
527     }
528   update_stats (ok, xfail);
529
530   fpstack_test (test_name);
531 }
532
533
534 static void
535 check_float (const char *test_name, FLOAT computed, FLOAT expected,
536              FLOAT max_ulp, int xfail, int exceptions)
537 {
538   check_float_internal (test_name, computed, expected, max_ulp, xfail,
539                         exceptions, &max_error);
540 }
541
542
543 static void
544 check_complex (const char *test_name, __complex__ FLOAT computed,
545                __complex__ FLOAT expected,
546                __complex__ FLOAT max_ulp, __complex__ int xfail,
547                int exception)
548 {
549   FLOAT part_comp, part_exp, part_max_ulp;
550   int part_xfail;
551   char str[200];
552
553   sprintf (str, "Real part of: %s", test_name);
554   part_comp = __real__ computed;
555   part_exp = __real__ expected;
556   part_max_ulp = __real__ max_ulp;
557   part_xfail = __real__ xfail;
558
559   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
560                         exception, &real_max_error);
561
562   sprintf (str, "Imaginary part of: %s", test_name);
563   part_comp = __imag__ computed;
564   part_exp = __imag__ expected;
565   part_max_ulp = __imag__ max_ulp;
566   part_xfail = __imag__ xfail;
567
568   /* Don't check again for exceptions, just pass through the
569      zero/inf sign test.  */
570   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
571                         exception & IGNORE_ZERO_INF_SIGN,
572                         &imag_max_error);
573 }
574
575
576 /* Check that computed and expected values are equal (int values).  */
577 static void
578 check_int (const char *test_name, int computed, int expected, int max_ulp,
579            int xfail, int exceptions)
580 {
581   int diff = computed - expected;
582   int ok = 0;
583
584   test_exceptions (test_name, exceptions);
585   noTests++;
586   if (abs (diff) <= max_ulp)
587     ok = 1;
588
589   if (!ok)
590     print_ulps (test_name, diff);
591
592   if (print_screen (ok, xfail))
593     {
594       if (!ok)
595         printf ("Failure: ");
596       printf ("Test: %s\n", test_name);
597       printf ("Result:\n");
598       printf (" is:         %d\n", computed);
599       printf (" should be:  %d\n", expected);
600     }
601
602   update_stats (ok, xfail);
603   fpstack_test (test_name);
604 }
605
606
607 /* Check that computed and expected values are equal (long int values).  */
608 static void
609 check_long (const char *test_name, long int computed, long int expected,
610             long int max_ulp, int xfail, int exceptions)
611 {
612   long int diff = computed - expected;
613   int ok = 0;
614
615   test_exceptions (test_name, exceptions);
616   noTests++;
617   if (labs (diff) <= max_ulp)
618     ok = 1;
619
620   if (!ok)
621     print_ulps (test_name, diff);
622
623   if (print_screen (ok, xfail))
624     {
625       if (!ok)
626         printf ("Failure: ");
627       printf ("Test: %s\n", test_name);
628       printf ("Result:\n");
629       printf (" is:         %ld\n", computed);
630       printf (" should be:  %ld\n", expected);
631     }
632
633   update_stats (ok, xfail);
634   fpstack_test (test_name);
635 }
636
637
638 /* Check that computed value is true/false.  */
639 static void
640 check_bool (const char *test_name, int computed, int expected,
641             long int max_ulp, int xfail, int exceptions)
642 {
643   int ok = 0;
644
645   test_exceptions (test_name, exceptions);
646   noTests++;
647   if ((computed == 0) == (expected == 0))
648     ok = 1;
649
650   if (print_screen (ok, xfail))
651     {
652       if (!ok)
653         printf ("Failure: ");
654       printf ("Test: %s\n", test_name);
655       printf ("Result:\n");
656       printf (" is:         %d\n", computed);
657       printf (" should be:  %d\n", expected);
658     }
659
660   update_stats (ok, xfail);
661   fpstack_test (test_name);
662 }
663
664
665 /* check that computed and expected values are equal (long int values) */
666 static void
667 check_longlong (const char *test_name, long long int computed,
668                 long long int expected,
669                 long long int max_ulp, int xfail,
670                 int exceptions)
671 {
672   long long int diff = computed - expected;
673   int ok = 0;
674
675   test_exceptions (test_name, exceptions);
676   noTests++;
677   if (llabs (diff) <= max_ulp)
678     ok = 1;
679
680   if (!ok)
681     print_ulps (test_name, diff);
682
683   if (print_screen (ok, xfail))
684     {
685       if (!ok)
686         printf ("Failure:");
687       printf ("Test: %s\n", test_name);
688       printf ("Result:\n");
689       printf (" is:         %lld\n", computed);
690       printf (" should be:  %lld\n", expected);
691     }
692
693   update_stats (ok, xfail);
694   fpstack_test (test_name);
695 }
696
697
698
699 /* This is to prevent messages from the SVID libm emulation.  */
700 int
701 matherr (struct exception *x __attribute__ ((unused)))
702 {
703   return 1;
704 }
705
706
707 /****************************************************************************
708   Tests for single functions of libm.
709   Please keep them alphabetically sorted!
710 ****************************************************************************/
711
712 static void
713 acos_test (void)
714 {
715   errno = 0;
716   FUNC(acos) (0);
717   if (errno == ENOSYS)
718     /* Function not implemented.  */
719     return;
720
721   START (acos);
722
723   TEST_f_f (acos, plus_infty, nan_value, INVALID_EXCEPTION);
724   TEST_f_f (acos, minus_infty, nan_value, INVALID_EXCEPTION);
725   TEST_f_f (acos, nan_value, nan_value);
726
727   /* |x| > 1: */
728   TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
729   TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
730
731   TEST_f_f (acos, 0, M_PI_2l);
732   TEST_f_f (acos, minus_zero, M_PI_2l);
733   TEST_f_f (acos, 1, 0);
734   TEST_f_f (acos, -1, M_PIl);
735   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
736   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
737   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
738   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
739   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
740   END (acos);
741 }
742
743 static void
744 acosh_test (void)
745 {
746   errno = 0;
747   FUNC(acosh) (7);
748   if (errno == ENOSYS)
749     /* Function not implemented.  */
750     return;
751
752   START (acosh);
753
754   TEST_f_f (acosh, plus_infty, plus_infty);
755   TEST_f_f (acosh, minus_infty, nan_value, INVALID_EXCEPTION);
756
757   /* x < 1:  */
758   TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
759
760   TEST_f_f (acosh, 1, 0);
761   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
762
763   END (acosh);
764 }
765
766 static void
767 asin_test (void)
768 {
769   errno = 0;
770   FUNC(asin) (0);
771   if (errno == ENOSYS)
772     /* Function not implemented.  */
773     return;
774
775   START (asin);
776
777   TEST_f_f (asin, plus_infty, nan_value, INVALID_EXCEPTION);
778   TEST_f_f (asin, minus_infty, nan_value, INVALID_EXCEPTION);
779   TEST_f_f (asin, nan_value, nan_value);
780
781   /* asin x == NaN plus invalid exception for |x| > 1.  */
782   TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
783   TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
784
785   TEST_f_f (asin, 0, 0);
786   TEST_f_f (asin, minus_zero, minus_zero);
787   TEST_f_f (asin, 0.5, M_PI_6l);
788   TEST_f_f (asin, -0.5, -M_PI_6l);
789   TEST_f_f (asin, 1.0, M_PI_2l);
790   TEST_f_f (asin, -1.0, -M_PI_2l);
791   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
792
793   END (asin);
794 }
795
796 static void
797 asinh_test (void)
798 {
799   errno = 0;
800   FUNC(asinh) (0.7L);
801   if (errno == ENOSYS)
802     /* Function not implemented.  */
803     return;
804
805   START (asinh);
806
807   TEST_f_f (asinh, 0, 0);
808   TEST_f_f (asinh, minus_zero, minus_zero);
809 #ifndef TEST_INLINE
810   TEST_f_f (asinh, plus_infty, plus_infty);
811   TEST_f_f (asinh, minus_infty, minus_infty);
812 #endif
813   TEST_f_f (asinh, nan_value, nan_value);
814   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
815
816   END (asinh);
817 }
818
819 static void
820 atan_test (void)
821 {
822   errno = 0;
823   FUNC(atan) (0);
824   if (errno == ENOSYS)
825     /* Function not implemented.  */
826     return;
827
828   START (atan);
829
830   TEST_f_f (atan, 0, 0);
831   TEST_f_f (atan, minus_zero, minus_zero);
832
833   TEST_f_f (atan, plus_infty, M_PI_2l);
834   TEST_f_f (atan, minus_infty, -M_PI_2l);
835   TEST_f_f (atan, nan_value, nan_value);
836
837   TEST_f_f (atan, 1, M_PI_4l);
838   TEST_f_f (atan, -1, -M_PI_4l);
839
840   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
841
842   END (atan);
843 }
844
845
846
847 static void
848 atanh_test (void)
849 {
850   errno = 0;
851   FUNC(atanh) (0.7L);
852   if (errno == ENOSYS)
853     /* Function not implemented.  */
854     return;
855
856   START (atanh);
857
858
859   TEST_f_f (atanh, 0, 0);
860   TEST_f_f (atanh, minus_zero, minus_zero);
861
862   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
863   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
864   TEST_f_f (atanh, nan_value, nan_value);
865
866   /* atanh (x) == NaN plus invalid exception if |x| > 1.  */
867   TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
868   TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
869
870   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
871
872   END (atanh);
873 }
874
875 static void
876 atan2_test (void)
877 {
878   errno = 0;
879   FUNC(atan2) (-0, 1);
880   if (errno == ENOSYS)
881     /* Function not implemented.  */
882     return;
883
884   START (atan2);
885
886   /* atan2 (0,x) == 0 for x > 0.  */
887   TEST_ff_f (atan2, 0, 1, 0);
888
889   /* atan2 (-0,x) == -0 for x > 0.  */
890   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
891
892   TEST_ff_f (atan2, 0, 0, 0);
893   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
894
895   /* atan2 (+0,x) == +pi for x < 0.  */
896   TEST_ff_f (atan2, 0, -1, M_PIl);
897
898   /* atan2 (-0,x) == -pi for x < 0.  */
899   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
900
901   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
902   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
903
904   /* atan2 (y,+0) == pi/2 for y > 0.  */
905   TEST_ff_f (atan2, 1, 0, M_PI_2l);
906
907   /* atan2 (y,-0) == pi/2 for y > 0.  */
908   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
909
910   /* atan2 (y,+0) == -pi/2 for y < 0.  */
911   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
912
913   /* atan2 (y,-0) == -pi/2 for y < 0.  */
914   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
915
916   /* atan2 (y,inf) == +0 for finite y > 0.  */
917   TEST_ff_f (atan2, 1, plus_infty, 0);
918
919   /* atan2 (y,inf) == -0 for finite y < 0.  */
920   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
921
922   /* atan2(+inf, x) == pi/2 for finite x.  */
923   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
924
925   /* atan2(-inf, x) == -pi/2 for finite x.  */
926   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
927
928   /* atan2 (y,-inf) == +pi for finite y > 0.  */
929   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
930
931   /* atan2 (y,-inf) == -pi for finite y < 0.  */
932   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
933
934   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
935   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
936   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
937   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
938   TEST_ff_f (atan2, nan_value, nan_value, nan_value);
939
940   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
941   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
942   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
943   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
944   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
945   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
946
947   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
948
949   END (atan2);
950 }
951
952 static void
953 cabs_test (void)
954 {
955   errno = 0;
956   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
957   if (errno == ENOSYS)
958     /* Function not implemented.  */
959     return;
960
961   START (cabs);
962
963   /* cabs (x + iy) is specified as hypot (x,y) */
964
965   /* cabs (+inf + i x) == +inf.  */
966   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
967   /* cabs (-inf + i x) == +inf.  */
968   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
969
970   TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
971   TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
972
973   TEST_c_f (cabs, nan_value, nan_value, nan_value);
974
975   /* cabs (x,y) == cabs (y,x).  */
976   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
977   /* cabs (x,y) == cabs (-x,y).  */
978   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
979   /* cabs (x,y) == cabs (-y,x).  */
980   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
981   /* cabs (x,y) == cabs (-x,-y).  */
982   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
983   /* cabs (x,y) == cabs (-y,-x).  */
984   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
985   /* cabs (x,0) == fabs (x).  */
986   TEST_c_f (cabs, -0.75L, 0, 0.75L);
987   TEST_c_f (cabs, 0.75L, 0, 0.75L);
988   TEST_c_f (cabs, -1.0L, 0, 1.0L);
989   TEST_c_f (cabs, 1.0L, 0, 1.0L);
990   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
991   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
992
993   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
994
995   END (cabs);
996 }
997
998
999 static void
1000 cacos_test (void)
1001 {
1002   errno = 0;
1003   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1004   if (errno == ENOSYS)
1005     /* Function not implemented.  */
1006     return;
1007
1008   START (cacos);
1009
1010
1011   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1012   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1013   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1014   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1015
1016   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1017   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1018
1019   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1020   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1021
1022   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1023   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1024   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1025   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1026   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1027   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1028
1029   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1030   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1031   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1032   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1033
1034   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1035   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1036   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1037   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1038
1039   TEST_c_c (cacos, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1040   TEST_c_c (cacos, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1041
1042   TEST_c_c (cacos, 0, nan_value, M_PI_2l, nan_value);
1043   TEST_c_c (cacos, minus_zero, nan_value, M_PI_2l, nan_value);
1044
1045   TEST_c_c (cacos, nan_value, plus_infty, nan_value, minus_infty);
1046   TEST_c_c (cacos, nan_value, minus_infty, nan_value, plus_infty);
1047
1048   TEST_c_c (cacos, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1049   TEST_c_c (cacos, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1050
1051   TEST_c_c (cacos, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1052   TEST_c_c (cacos, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1053
1054   TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
1055
1056   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
1057   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
1058
1059   END (cacos, complex);
1060 }
1061
1062 static void
1063 cacosh_test (void)
1064 {
1065   errno = 0;
1066   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
1067   if (errno == ENOSYS)
1068     /* Function not implemented.  */
1069     return;
1070
1071   START (cacosh);
1072
1073
1074   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
1075   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
1076   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
1077   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
1078   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
1079   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1080
1081   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1082   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1083
1084   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
1085   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
1086   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
1087   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
1088   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1089   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1090
1091   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
1092   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
1093   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
1094   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
1095
1096   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
1097   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
1098   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
1099   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
1100
1101   TEST_c_c (cacosh, plus_infty, nan_value, plus_infty, nan_value);
1102   TEST_c_c (cacosh, minus_infty, nan_value, plus_infty, nan_value);
1103
1104   TEST_c_c (cacosh, 0, nan_value, nan_value, nan_value);
1105   TEST_c_c (cacosh, minus_zero, nan_value, nan_value, nan_value);
1106
1107   TEST_c_c (cacosh, nan_value, plus_infty, plus_infty, nan_value);
1108   TEST_c_c (cacosh, nan_value, minus_infty, plus_infty, nan_value);
1109
1110   TEST_c_c (cacosh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1111   TEST_c_c (cacosh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1112
1113   TEST_c_c (cacosh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1114   TEST_c_c (cacosh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1115
1116   TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
1117
1118   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
1119   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
1120
1121   END (cacosh, complex);
1122 }
1123
1124
1125 static void
1126 carg_test (void)
1127 {
1128   START (carg);
1129
1130   /* carg (x + iy) is specified as atan2 (y, x) */
1131
1132   /* carg (x + i 0) == 0 for x > 0.  */
1133   TEST_c_f (carg, 2.0, 0, 0);
1134   /* carg (x - i 0) == -0 for x > 0.  */
1135   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
1136
1137   TEST_c_f (carg, 0, 0, 0);
1138   TEST_c_f (carg, 0, minus_zero, minus_zero);
1139
1140   /* carg (x + i 0) == +pi for x < 0.  */
1141   TEST_c_f (carg, -2.0, 0, M_PIl);
1142
1143   /* carg (x - i 0) == -pi for x < 0.  */
1144   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
1145
1146   TEST_c_f (carg, minus_zero, 0, M_PIl);
1147   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
1148
1149   /* carg (+0 + i y) == pi/2 for y > 0.  */
1150   TEST_c_f (carg, 0, 2.0, M_PI_2l);
1151
1152   /* carg (-0 + i y) == pi/2 for y > 0.  */
1153   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
1154
1155   /* carg (+0 + i y) == -pi/2 for y < 0.  */
1156   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
1157
1158   /* carg (-0 + i y) == -pi/2 for y < 0.  */
1159   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
1160
1161   /* carg (inf + i y) == +0 for finite y > 0.  */
1162   TEST_c_f (carg, plus_infty, 2.0, 0);
1163
1164   /* carg (inf + i y) == -0 for finite y < 0.  */
1165   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
1166
1167   /* carg(x + i inf) == pi/2 for finite x.  */
1168   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
1169
1170   /* carg(x - i inf) == -pi/2 for finite x.  */
1171   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
1172
1173   /* carg (-inf + i y) == +pi for finite y > 0.  */
1174   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
1175
1176   /* carg (-inf + i y) == -pi for finite y < 0.  */
1177   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
1178
1179   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
1180
1181   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
1182
1183   TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
1184
1185   TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
1186
1187   TEST_c_f (carg, nan_value, nan_value, nan_value);
1188
1189   END (carg);
1190 }
1191
1192 static void
1193 casin_test (void)
1194 {
1195   errno = 0;
1196   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
1197   if (errno == ENOSYS)
1198     /* Function not implemented.  */
1199     return;
1200
1201   START (casin);
1202
1203   TEST_c_c (casin, 0, 0, 0.0, 0.0);
1204   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
1205   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
1206   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
1207
1208   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
1209   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
1210   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
1211   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
1212
1213   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
1214   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
1215   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
1216   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
1217   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
1218   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
1219   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
1220   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
1221
1222   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
1223   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
1224   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
1225   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
1226
1227   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
1228   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
1229   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
1230   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
1231
1232   TEST_c_c (casin, nan_value, plus_infty, nan_value, plus_infty);
1233   TEST_c_c (casin, nan_value, minus_infty, nan_value, minus_infty);
1234
1235   TEST_c_c (casin, 0.0, nan_value, 0.0, nan_value);
1236   TEST_c_c (casin, minus_zero, nan_value, minus_zero, nan_value);
1237
1238   TEST_c_c (casin, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1239   TEST_c_c (casin, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1240
1241   TEST_c_c (casin, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1242   TEST_c_c (casin, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1243
1244   TEST_c_c (casin, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1245   TEST_c_c (casin, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1246
1247   TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
1248
1249   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
1250   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
1251
1252   END (casin, complex);
1253 }
1254
1255
1256 static void
1257 casinh_test (void)
1258 {
1259   errno = 0;
1260   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
1261   if (errno == ENOSYS)
1262     /* Function not implemented.  */
1263     return;
1264
1265   START (casinh);
1266
1267   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
1268   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
1269   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
1270   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
1271
1272   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1273   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1274   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
1275   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
1276
1277   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
1278   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
1279   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
1280   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
1281   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
1282   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
1283   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1284   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1285
1286   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
1287   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
1288   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
1289   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
1290
1291   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
1292   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
1293   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
1294   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
1295
1296   TEST_c_c (casinh, plus_infty, nan_value, plus_infty, nan_value);
1297   TEST_c_c (casinh, minus_infty, nan_value, minus_infty, nan_value);
1298
1299   TEST_c_c (casinh, nan_value, 0, nan_value, 0.0);
1300   TEST_c_c (casinh, nan_value, minus_zero, nan_value, minus_zero);
1301
1302   TEST_c_c (casinh, nan_value, plus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1303   TEST_c_c (casinh, nan_value, minus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1304
1305   TEST_c_c (casinh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1306   TEST_c_c (casinh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1307
1308   TEST_c_c (casinh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1309   TEST_c_c (casinh, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1310
1311   TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
1312
1313   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
1314   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
1315
1316   END (casinh, complex);
1317 }
1318
1319
1320 static void
1321 catan_test (void)
1322 {
1323   errno = 0;
1324   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
1325   if (errno == ENOSYS)
1326     /* Function not implemented.  */
1327     return;
1328
1329   START (catan);
1330
1331   TEST_c_c (catan, 0, 0, 0, 0);
1332   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
1333   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
1334   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
1335
1336   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
1337   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
1338   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
1339   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
1340
1341
1342   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
1343   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
1344   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
1345   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
1346   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
1347   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
1348   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
1349   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
1350
1351   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
1352   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
1353   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
1354   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
1355
1356   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
1357   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
1358   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
1359   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
1360
1361   TEST_c_c (catan, nan_value, 0.0, nan_value, 0);
1362   TEST_c_c (catan, nan_value, minus_zero, nan_value, minus_zero);
1363
1364   TEST_c_c (catan, nan_value, plus_infty, nan_value, 0);
1365   TEST_c_c (catan, nan_value, minus_infty, nan_value, minus_zero);
1366
1367   TEST_c_c (catan, 0.0, nan_value, nan_value, nan_value);
1368   TEST_c_c (catan, minus_zero, nan_value, nan_value, nan_value);
1369
1370   TEST_c_c (catan, plus_infty, nan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1371   TEST_c_c (catan, minus_infty, nan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1372
1373   TEST_c_c (catan, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1374   TEST_c_c (catan, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1375
1376   TEST_c_c (catan, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1377   TEST_c_c (catan, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1378
1379   TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value);
1380
1381   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
1382   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
1383
1384   END (catan, complex);
1385 }
1386
1387 static void
1388 catanh_test (void)
1389 {
1390   errno = 0;
1391   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
1392   if (errno == ENOSYS)
1393     /* Function not implemented.  */
1394     return;
1395
1396   START (catanh);
1397
1398   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
1399   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
1400   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
1401   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
1402
1403   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
1404   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
1405   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
1406   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
1407
1408   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
1409   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
1410   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
1411   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
1412   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
1413   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
1414   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
1415   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
1416
1417   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
1418   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
1419   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
1420   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
1421
1422   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
1423   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
1424   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
1425   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
1426
1427   TEST_c_c (catanh, 0, nan_value, 0.0, nan_value);
1428   TEST_c_c (catanh, minus_zero, nan_value, minus_zero, nan_value);
1429
1430   TEST_c_c (catanh, plus_infty, nan_value, 0.0, nan_value);
1431   TEST_c_c (catanh, minus_infty, nan_value, minus_zero, nan_value);
1432
1433   TEST_c_c (catanh, nan_value, 0, nan_value, nan_value);
1434   TEST_c_c (catanh, nan_value, minus_zero, nan_value, nan_value);
1435
1436   TEST_c_c (catanh, nan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
1437   TEST_c_c (catanh, nan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
1438
1439   TEST_c_c (catanh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1440   TEST_c_c (catanh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1441
1442   TEST_c_c (catanh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1443   TEST_c_c (catanh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1444
1445   TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value);
1446
1447   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
1448   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
1449
1450   END (catanh, complex);
1451 }
1452
1453 static void
1454 cbrt_test (void)
1455 {
1456   errno = 0;
1457   FUNC(cbrt) (8);
1458   if (errno == ENOSYS)
1459     /* Function not implemented.  */
1460     return;
1461
1462   START (cbrt);
1463
1464   TEST_f_f (cbrt, 0.0, 0.0);
1465   TEST_f_f (cbrt, minus_zero, minus_zero);
1466
1467   TEST_f_f (cbrt, plus_infty, plus_infty);
1468   TEST_f_f (cbrt, minus_infty, minus_infty);
1469   TEST_f_f (cbrt, nan_value, nan_value);
1470
1471   TEST_f_f (cbrt, -0.001L, -0.1L);
1472   TEST_f_f (cbrt, 8, 2);
1473   TEST_f_f (cbrt, -27.0, -3.0);
1474   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
1475   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
1476
1477   END (cbrt);
1478 }
1479
1480
1481 static void
1482 ccos_test (void)
1483 {
1484   errno = 0;
1485   FUNC(ccos) (BUILD_COMPLEX (0, 0));
1486   if (errno == ENOSYS)
1487     /* Function not implemented.  */
1488     return;
1489
1490   START (ccos);
1491
1492   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
1493   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
1494   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
1495   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
1496
1497   TEST_c_c (ccos, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1498   TEST_c_c (ccos, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1499   TEST_c_c (ccos, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1500   TEST_c_c (ccos, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1501
1502   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
1503   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
1504   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
1505   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
1506
1507   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1508   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1509   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1510   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1511
1512   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
1513   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
1514   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
1515   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
1516
1517   TEST_c_c (ccos, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1518   TEST_c_c (ccos, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1519   TEST_c_c (ccos, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1520   TEST_c_c (ccos, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1521
1522   TEST_c_c (ccos, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1523   TEST_c_c (ccos, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1524
1525   TEST_c_c (ccos, nan_value, plus_infty, plus_infty, nan_value);
1526   TEST_c_c (ccos, nan_value, minus_infty, plus_infty, nan_value);
1527
1528   TEST_c_c (ccos, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1529   TEST_c_c (ccos, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1530
1531   TEST_c_c (ccos, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1532   TEST_c_c (ccos, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1533
1534   TEST_c_c (ccos, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1535   TEST_c_c (ccos, -10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1536
1537   TEST_c_c (ccos, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1538   TEST_c_c (ccos, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1539
1540   TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
1541
1542   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
1543   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
1544
1545   END (ccos, complex);
1546 }
1547
1548
1549 static void
1550 ccosh_test (void)
1551 {
1552   errno = 0;
1553   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
1554   if (errno == ENOSYS)
1555     /* Function not implemented.  */
1556     return;
1557
1558   START (ccosh);
1559
1560   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
1561   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
1562   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
1563   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
1564
1565   TEST_c_c (ccosh, 0.0, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1566   TEST_c_c (ccosh, minus_zero, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1567   TEST_c_c (ccosh, 0.0, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1568   TEST_c_c (ccosh, minus_zero, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1569
1570   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
1571   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
1572   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
1573   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
1574
1575   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1576   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1577   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1578   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1579
1580   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
1581   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
1582   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
1583   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
1584
1585   TEST_c_c (ccosh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1586   TEST_c_c (ccosh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1587   TEST_c_c (ccosh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1588   TEST_c_c (ccosh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1589
1590   TEST_c_c (ccosh, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1591   TEST_c_c (ccosh, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1592
1593   TEST_c_c (ccosh, plus_infty, nan_value, plus_infty, nan_value);
1594   TEST_c_c (ccosh, minus_infty, nan_value, plus_infty, nan_value);
1595
1596   TEST_c_c (ccosh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1597   TEST_c_c (ccosh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1598
1599   TEST_c_c (ccosh, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1600   TEST_c_c (ccosh, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1601
1602   TEST_c_c (ccosh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1603   TEST_c_c (ccosh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1604
1605   TEST_c_c (ccosh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1606   TEST_c_c (ccosh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1607
1608   TEST_c_c (ccosh, nan_value, nan_value, nan_value, nan_value);
1609
1610   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
1611
1612   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
1613
1614   END (ccosh, complex);
1615 }
1616
1617
1618 static void
1619 ceil_test (void)
1620 {
1621   START (ceil);
1622
1623   TEST_f_f (ceil, 0.0, 0.0);
1624   TEST_f_f (ceil, minus_zero, minus_zero);
1625   TEST_f_f (ceil, plus_infty, plus_infty);
1626   TEST_f_f (ceil, minus_infty, minus_infty);
1627   TEST_f_f (ceil, nan_value, nan_value);
1628
1629   TEST_f_f (ceil, M_PIl, 4.0);
1630   TEST_f_f (ceil, -M_PIl, -3.0);
1631   TEST_f_f (ceil, 0.1, 1.0);
1632   TEST_f_f (ceil, 0.25, 1.0);
1633   TEST_f_f (ceil, 0.625, 1.0);
1634   TEST_f_f (ceil, -0.1, minus_zero);
1635   TEST_f_f (ceil, -0.25, minus_zero);
1636   TEST_f_f (ceil, -0.625, minus_zero);
1637
1638 #ifdef TEST_LDOUBLE
1639   /* The result can only be represented in long double.  */
1640   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
1641   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
1642   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
1643   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
1644   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
1645
1646   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
1647   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
1648   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
1649   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
1650   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
1651
1652 # if LDBL_MANT_DIG > 100
1653   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
1654   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
1655   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
1656   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
1657   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
1658   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
1659 # endif
1660
1661   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
1662   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
1663   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
1664   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
1665   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
1666
1667   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
1668   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
1669   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
1670   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
1671   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
1672
1673 # if LDBL_MANT_DIG > 100
1674   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
1675   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
1676   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
1677   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
1678   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
1679   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
1680
1681   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
1682   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
1683   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
1684   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
1685   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
1686   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
1687 # endif
1688
1689   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
1690   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
1691   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
1692   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
1693   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
1694
1695   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
1696   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
1697   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
1698   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
1699   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
1700
1701   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
1702   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
1703   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
1704   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
1705   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
1706 #endif
1707
1708   END (ceil);
1709 }
1710
1711
1712 static void
1713 cexp_test (void)
1714 {
1715   errno = 0;
1716   FUNC(cexp) (BUILD_COMPLEX (0, 0));
1717   if (errno == ENOSYS)
1718     /* Function not implemented.  */
1719     return;
1720
1721   START (cexp);
1722
1723   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
1724   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
1725   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
1726   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
1727
1728   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
1729   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
1730
1731   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
1732   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
1733
1734   TEST_c_c (cexp, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1735   TEST_c_c (cexp, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1736
1737   TEST_c_c (cexp, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1738   TEST_c_c (cexp, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1739
1740   TEST_c_c (cexp, 100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1741   TEST_c_c (cexp, -100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1742
1743   TEST_c_c (cexp, 100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1744   TEST_c_c (cexp, -100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1745
1746   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
1747   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
1748   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
1749   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
1750
1751   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1752   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1753
1754   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
1755   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
1756
1757   TEST_c_c (cexp, minus_infty, nan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
1758
1759   TEST_c_c (cexp, plus_infty, nan_value, plus_infty, nan_value);
1760
1761   TEST_c_c (cexp, nan_value, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1762   TEST_c_c (cexp, nan_value, 1.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1763
1764   TEST_c_c (cexp, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1765   TEST_c_c (cexp, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1766   TEST_c_c (cexp, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1767   TEST_c_c (cexp, nan_value, nan_value, nan_value, nan_value);
1768
1769   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
1770   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
1771
1772   END (cexp, complex);
1773 }
1774
1775
1776 static void
1777 cimag_test (void)
1778 {
1779   START (cimag);
1780   TEST_c_f (cimag, 1.0, 0.0, 0.0);
1781   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
1782   TEST_c_f (cimag, 1.0, nan_value, nan_value);
1783   TEST_c_f (cimag, nan_value, nan_value, nan_value);
1784   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
1785   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
1786   TEST_c_f (cimag, 2.0, 3.0, 3.0);
1787
1788   END (cimag);
1789 }
1790
1791 static void
1792 clog_test (void)
1793 {
1794   errno = 0;
1795   FUNC(clog) (BUILD_COMPLEX (-2, -3));
1796   if (errno == ENOSYS)
1797     /* Function not implemented.  */
1798     return;
1799
1800   START (clog);
1801
1802   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1803   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1804
1805   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1806   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1807
1808   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
1809   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1810
1811   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
1812   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1813
1814   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
1815   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
1816   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
1817   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
1818   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
1819   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
1820   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
1821   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
1822
1823   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
1824   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
1825   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
1826   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
1827
1828   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
1829   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
1830   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
1831   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
1832
1833   TEST_c_c (clog, plus_infty, nan_value, plus_infty, nan_value);
1834   TEST_c_c (clog, minus_infty, nan_value, plus_infty, nan_value);
1835
1836   TEST_c_c (clog, nan_value, plus_infty, plus_infty, nan_value);
1837   TEST_c_c (clog, nan_value, minus_infty, plus_infty, nan_value);
1838
1839   TEST_c_c (clog, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1840   TEST_c_c (clog, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1841   TEST_c_c (clog, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1842   TEST_c_c (clog, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1843
1844   TEST_c_c (clog, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1845   TEST_c_c (clog, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1846   TEST_c_c (clog, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1847   TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1848
1849   TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value);
1850
1851   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
1852   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
1853
1854   END (clog, complex);
1855 }
1856
1857
1858 static void
1859 clog10_test (void)
1860 {
1861   errno = 0;
1862   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
1863   if (errno == ENOSYS)
1864     /* Function not implemented.  */
1865     return;
1866
1867   START (clog10);
1868
1869   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1870   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1871
1872   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1873   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1874
1875   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
1876
1877   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
1878   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
1879
1880   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
1881   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
1882   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
1883   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
1884   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
1885   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
1886   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
1887   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
1888
1889   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
1890   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
1891   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
1892   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
1893
1894   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
1895   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
1896   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
1897   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
1898
1899   TEST_c_c (clog10, plus_infty, nan_value, plus_infty, nan_value);
1900   TEST_c_c (clog10, minus_infty, nan_value, plus_infty, nan_value);
1901
1902   TEST_c_c (clog10, nan_value, plus_infty, plus_infty, nan_value);
1903   TEST_c_c (clog10, nan_value, minus_infty, plus_infty, nan_value);
1904
1905   TEST_c_c (clog10, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1906   TEST_c_c (clog10, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1907   TEST_c_c (clog10, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1908   TEST_c_c (clog10, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1909
1910   TEST_c_c (clog10, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1911   TEST_c_c (clog10, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1912   TEST_c_c (clog10, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1913   TEST_c_c (clog10, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1914
1915   TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
1916
1917   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
1918   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
1919
1920   END (clog10, complex);
1921 }
1922
1923
1924 static void
1925 conj_test (void)
1926 {
1927   START (conj);
1928   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
1929   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
1930   TEST_c_c (conj, nan_value, nan_value, nan_value, nan_value);
1931   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
1932   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
1933   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
1934   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
1935
1936   END (conj, complex);
1937 }
1938
1939
1940 static void
1941 copysign_test (void)
1942 {
1943   START (copysign);
1944
1945   TEST_ff_f (copysign, 0, 4, 0);
1946   TEST_ff_f (copysign, 0, -4, minus_zero);
1947   TEST_ff_f (copysign, minus_zero, 4, 0);
1948   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
1949
1950   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
1951   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
1952   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
1953   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
1954
1955   TEST_ff_f (copysign, 0, plus_infty, 0);
1956   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
1957   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
1958   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
1959
1960   /* XXX More correctly we would have to check the sign of the NaN.  */
1961   TEST_ff_f (copysign, nan_value, 0, nan_value);
1962   TEST_ff_f (copysign, nan_value, minus_zero, nan_value);
1963   TEST_ff_f (copysign, -nan_value, 0, nan_value);
1964   TEST_ff_f (copysign, -nan_value, minus_zero, nan_value);
1965
1966   END (copysign);
1967 }
1968
1969
1970 static void
1971 cos_test (void)
1972 {
1973   errno = 0;
1974   FUNC(cos) (0);
1975   if (errno == ENOSYS)
1976     /* Function not implemented.  */
1977     return;
1978
1979   START (cos);
1980
1981   TEST_f_f (cos, 0, 1);
1982   TEST_f_f (cos, minus_zero, 1);
1983   TEST_f_f (cos, plus_infty, nan_value, INVALID_EXCEPTION);
1984   TEST_f_f (cos, minus_infty, nan_value, INVALID_EXCEPTION);
1985   TEST_f_f (cos, nan_value, nan_value);
1986
1987   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
1988   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
1989   TEST_f_f (cos, M_PI_2l, 0);
1990
1991   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
1992
1993 #ifdef TEST_DOUBLE
1994   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
1995 #endif
1996
1997   END (cos);
1998 }
1999
2000
2001 static void
2002 cosh_test (void)
2003 {
2004   errno = 0;
2005   FUNC(cosh) (0.7L);
2006   if (errno == ENOSYS)
2007     /* Function not implemented.  */
2008     return;
2009
2010   START (cosh);
2011   TEST_f_f (cosh, 0, 1);
2012   TEST_f_f (cosh, minus_zero, 1);
2013
2014 #ifndef TEST_INLINE
2015   TEST_f_f (cosh, plus_infty, plus_infty);
2016   TEST_f_f (cosh, minus_infty, plus_infty);
2017 #endif
2018   TEST_f_f (cosh, nan_value, nan_value);
2019
2020   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
2021
2022   END (cosh);
2023 }
2024
2025
2026 static void
2027 cpow_test (void)
2028 {
2029   errno = 0;
2030   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
2031   if (errno == ENOSYS)
2032     /* Function not implemented.  */
2033     return;
2034
2035   START (cpow);
2036
2037   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
2038   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
2039
2040   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
2041   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
2042
2043   TEST_cc_c (cpow, nan_value, nan_value, nan_value, nan_value, nan_value, nan_value);
2044
2045   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
2046   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
2047   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
2048   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
2049
2050   END (cpow, complex);
2051 }
2052
2053
2054 static void
2055 cproj_test (void)
2056 {
2057   START (cproj);
2058   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
2059   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
2060   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
2061   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
2062
2063   TEST_c_c (cproj, nan_value, nan_value, nan_value, nan_value);
2064
2065   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
2066   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
2067   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
2068   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
2069
2070   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
2071   TEST_c_c (cproj, 2.0, 3.0, 0.2857142857142857142857142857142857L, 0.42857142857142857142857142857142855L);
2072
2073   END (cproj, complex);
2074 }
2075
2076
2077 static void
2078 creal_test (void)
2079 {
2080   START (creal);
2081   TEST_c_f (creal, 0.0, 1.0, 0.0);
2082   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
2083   TEST_c_f (creal, nan_value, 1.0, nan_value);
2084   TEST_c_f (creal, nan_value, nan_value, nan_value);
2085   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
2086   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
2087   TEST_c_f (creal, 2.0, 3.0, 2.0);
2088
2089   END (creal);
2090 }
2091
2092 static void
2093 csin_test (void)
2094 {
2095   errno = 0;
2096   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
2097   if (errno == ENOSYS)
2098     /* Function not implemented.  */
2099     return;
2100
2101   START (csin);
2102
2103   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
2104   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
2105   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
2106   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
2107
2108   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
2109   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
2110   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
2111   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
2112
2113   TEST_c_c (csin, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2114   TEST_c_c (csin, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2115   TEST_c_c (csin, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2116   TEST_c_c (csin, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2117
2118   TEST_c_c (csin, plus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2119   TEST_c_c (csin, minus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2120   TEST_c_c (csin, plus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2121   TEST_c_c (csin, minus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2122
2123   TEST_c_c (csin, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2124   TEST_c_c (csin, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2125   TEST_c_c (csin, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2126   TEST_c_c (csin, minus_infty, -6.75,  nan_value, nan_value, INVALID_EXCEPTION);
2127
2128   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
2129   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
2130   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
2131   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
2132
2133   TEST_c_c (csin, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2134   TEST_c_c (csin, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2135
2136   TEST_c_c (csin, nan_value, plus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2137   TEST_c_c (csin, nan_value, minus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2138
2139   TEST_c_c (csin, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2140   TEST_c_c (csin, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2141
2142   TEST_c_c (csin, 0.0, nan_value, 0.0, nan_value);
2143   TEST_c_c (csin, minus_zero, nan_value, minus_zero, nan_value);
2144
2145   TEST_c_c (csin, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2146   TEST_c_c (csin, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2147
2148   TEST_c_c (csin, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2149   TEST_c_c (csin, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2150
2151   TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
2152
2153   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
2154   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
2155
2156   END (csin, complex);
2157 }
2158
2159
2160 static void
2161 csinh_test (void)
2162 {
2163   errno = 0;
2164   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
2165   if (errno == ENOSYS)
2166     /* Function not implemented.  */
2167     return;
2168
2169   START (csinh);
2170
2171   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
2172   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
2173   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
2174   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
2175
2176   TEST_c_c (csinh, 0.0, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2177   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2178   TEST_c_c (csinh, 0.0, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2179   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2180
2181   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
2182   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
2183   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
2184   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
2185
2186   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2187   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2188   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2189   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2190
2191   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
2192   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
2193   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
2194   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
2195
2196   TEST_c_c (csinh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2197   TEST_c_c (csinh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2198   TEST_c_c (csinh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2199   TEST_c_c (csinh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2200
2201   TEST_c_c (csinh, 0.0, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2202   TEST_c_c (csinh, minus_zero, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2203
2204   TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2205   TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2206
2207   TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2208   TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2209
2210   TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
2211   TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
2212
2213   TEST_c_c (csinh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2214   TEST_c_c (csinh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2215
2216   TEST_c_c (csinh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2217   TEST_c_c (csinh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2218
2219   TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
2220
2221   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
2222   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
2223
2224   END (csinh, complex);
2225 }
2226
2227
2228 static void
2229 csqrt_test (void)
2230 {
2231   errno = 0;
2232   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
2233   if (errno == ENOSYS)
2234     /* Function not implemented.  */
2235     return;
2236
2237   START (csqrt);
2238
2239   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
2240   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
2241   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
2242   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
2243
2244   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
2245   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
2246   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
2247   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
2248
2249   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
2250   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
2251   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
2252   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
2253
2254   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
2255   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
2256   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
2257   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
2258   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
2259   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
2260   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
2261   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
2262   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
2263   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
2264   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
2265   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
2266
2267   TEST_c_c (csqrt, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2268
2269   TEST_c_c (csqrt, plus_infty, nan_value, plus_infty, nan_value);
2270
2271   TEST_c_c (csqrt, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2272   TEST_c_c (csqrt, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2273   TEST_c_c (csqrt, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2274   TEST_c_c (csqrt, -1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2275
2276   TEST_c_c (csqrt, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2277   TEST_c_c (csqrt, nan_value, 8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2278   TEST_c_c (csqrt, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2279   TEST_c_c (csqrt, nan_value, -8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2280
2281   TEST_c_c (csqrt, nan_value, nan_value, nan_value, nan_value);
2282
2283   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
2284   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
2285   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
2286   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
2287   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
2288   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
2289   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
2290   /* Principal square root should be returned (i.e., non-negative real
2291      part).  */
2292   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
2293
2294   END (csqrt, complex);
2295 }
2296
2297 static void
2298 ctan_test (void)
2299 {
2300   errno = 0;
2301   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
2302   if (errno == ENOSYS)
2303     /* Function not implemented.  */
2304     return;
2305
2306   START (ctan);
2307
2308   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
2309   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
2310   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
2311   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
2312
2313   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
2314   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
2315   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
2316   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
2317
2318   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
2319   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
2320   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
2321   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
2322
2323   TEST_c_c (ctan, plus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2324   TEST_c_c (ctan, plus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2325   TEST_c_c (ctan, minus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2326   TEST_c_c (ctan, minus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2327   TEST_c_c (ctan, plus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2328   TEST_c_c (ctan, plus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2329   TEST_c_c (ctan, minus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2330   TEST_c_c (ctan, minus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2331
2332   TEST_c_c (ctan, nan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
2333   TEST_c_c (ctan, nan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
2334
2335   TEST_c_c (ctan, 0, nan_value, 0.0, nan_value);
2336   TEST_c_c (ctan, minus_zero, nan_value, minus_zero, nan_value);
2337
2338   TEST_c_c (ctan, 0.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2339   TEST_c_c (ctan, -4.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2340
2341   TEST_c_c (ctan, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2342   TEST_c_c (ctan, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2343   TEST_c_c (ctan, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2344   TEST_c_c (ctan, nan_value, -0.25, nan_value, nan_value, INVALID_EXCEPTION_OK);
2345
2346   TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
2347
2348   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
2349   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
2350
2351   END (ctan, complex);
2352 }
2353
2354
2355 static void
2356 ctanh_test (void)
2357 {
2358   errno = 0;
2359   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
2360   if (errno == ENOSYS)
2361     /* Function not implemented.  */
2362     return;
2363
2364   START (ctanh);
2365
2366   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
2367   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
2368   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
2369   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
2370
2371   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
2372   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
2373   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
2374   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
2375   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
2376   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
2377   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
2378   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
2379
2380   TEST_c_c (ctanh, 0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2381   TEST_c_c (ctanh, 2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2382   TEST_c_c (ctanh, 0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2383   TEST_c_c (ctanh, 2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2384   TEST_c_c (ctanh, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2385   TEST_c_c (ctanh, -2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2386   TEST_c_c (ctanh, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2387   TEST_c_c (ctanh, -2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2388
2389   TEST_c_c (ctanh, plus_infty, nan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2390   TEST_c_c (ctanh, minus_infty, nan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2391
2392   TEST_c_c (ctanh, nan_value, 0, nan_value, 0.0);
2393   TEST_c_c (ctanh, nan_value, minus_zero, nan_value, minus_zero);
2394
2395   TEST_c_c (ctanh, nan_value, 0.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2396   TEST_c_c (ctanh, nan_value, -4.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2397
2398   TEST_c_c (ctanh, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2399   TEST_c_c (ctanh, 5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2400   TEST_c_c (ctanh, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2401   TEST_c_c (ctanh, -0.25, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2402
2403   TEST_c_c (ctanh, nan_value, nan_value, nan_value, nan_value);
2404
2405   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
2406
2407   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
2408   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
2409
2410   END (ctanh, complex);
2411 }
2412
2413
2414 static void
2415 erf_test (void)
2416 {
2417   errno = 0;
2418   FUNC(erf) (0);
2419   if (errno == ENOSYS)
2420     /* Function not implemented.  */
2421     return;
2422
2423   START (erf);
2424
2425   TEST_f_f (erf, 0, 0);
2426   TEST_f_f (erf, minus_zero, minus_zero);
2427   TEST_f_f (erf, plus_infty, 1);
2428   TEST_f_f (erf, minus_infty, -1);
2429   TEST_f_f (erf, nan_value, nan_value);
2430
2431   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
2432   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
2433   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
2434   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
2435   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
2436   TEST_f_f (erf, 27.0L, 1.0L);
2437
2438   END (erf);
2439 }
2440
2441
2442 static void
2443 erfc_test (void)
2444 {
2445   errno = 0;
2446   FUNC(erfc) (0);
2447   if (errno == ENOSYS)
2448     /* Function not implemented.  */
2449     return;
2450
2451   START (erfc);
2452
2453   TEST_f_f (erfc, plus_infty, 0.0);
2454   TEST_f_f (erfc, minus_infty, 2.0);
2455   TEST_f_f (erfc, 0.0, 1.0);
2456   TEST_f_f (erfc, minus_zero, 1.0);
2457   TEST_f_f (erfc, nan_value, nan_value);
2458
2459   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
2460   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
2461   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
2462   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
2463   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
2464 #ifdef TEST_LDOUBLE
2465   /* The result can only be represented in long double.  */
2466 # if LDBL_MIN_10_EXP < -319
2467   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
2468 # endif
2469 #endif
2470
2471   END (erfc);
2472 }
2473
2474
2475 static void
2476 exp_test (void)
2477 {
2478   errno = 0;
2479   FUNC(exp) (0);
2480   if (errno == ENOSYS)
2481     /* Function not implemented.  */
2482     return;
2483
2484   START (exp);
2485
2486   TEST_f_f (exp, 0, 1);
2487   TEST_f_f (exp, minus_zero, 1);
2488
2489 #ifndef TEST_INLINE
2490   TEST_f_f (exp, plus_infty, plus_infty);
2491   TEST_f_f (exp, minus_infty, 0);
2492 #endif
2493   TEST_f_f (exp, nan_value, nan_value);
2494   TEST_f_f (exp, 1, M_El);
2495
2496   TEST_f_f (exp, 2, M_E2l);
2497   TEST_f_f (exp, 3, M_E3l);
2498   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
2499   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
2500 #ifdef TEST_LDOUBLE
2501   /* The result can only be represented in long double.  */
2502   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
2503 #endif
2504
2505   END (exp);
2506 }
2507
2508
2509 static void
2510 exp10_test (void)
2511 {
2512   errno = 0;
2513   FUNC(exp10) (0);
2514   if (errno == ENOSYS)
2515     /* Function not implemented.  */
2516     return;
2517
2518   START (exp10);
2519
2520   TEST_f_f (exp10, 0, 1);
2521   TEST_f_f (exp10, minus_zero, 1);
2522
2523   TEST_f_f (exp10, plus_infty, plus_infty);
2524   TEST_f_f (exp10, minus_infty, 0);
2525   TEST_f_f (exp10, nan_value, nan_value);
2526   TEST_f_f (exp10, 3, 1000);
2527   TEST_f_f (exp10, -1, 0.1L);
2528   TEST_f_f (exp10, 1e6, plus_infty);
2529   TEST_f_f (exp10, -1e6, 0);
2530   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
2531
2532   END (exp10);
2533 }
2534
2535
2536 static void
2537 exp2_test (void)
2538 {
2539   errno = 0;
2540   FUNC(exp2) (0);
2541   if (errno == ENOSYS)
2542     /* Function not implemented.  */
2543     return;
2544
2545   START (exp2);
2546
2547   TEST_f_f (exp2, 0, 1);
2548   TEST_f_f (exp2, minus_zero, 1);
2549   TEST_f_f (exp2, plus_infty, plus_infty);
2550   TEST_f_f (exp2, minus_infty, 0);
2551   TEST_f_f (exp2, nan_value, nan_value);
2552
2553   TEST_f_f (exp2, 10, 1024);
2554   TEST_f_f (exp2, -1, 0.5);
2555   TEST_f_f (exp2, 1e6, plus_infty);
2556   TEST_f_f (exp2, -1e6, 0);
2557   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
2558
2559   END (exp2);
2560 }
2561
2562
2563 static void
2564 expm1_test (void)
2565 {
2566   errno = 0;
2567   FUNC(expm1) (0);
2568   if (errno == ENOSYS)
2569     /* Function not implemented.  */
2570     return;
2571
2572   START (expm1);
2573
2574   TEST_f_f (expm1, 0, 0);
2575   TEST_f_f (expm1, minus_zero, minus_zero);
2576
2577 #ifndef TEST_INLINE
2578   TEST_f_f (expm1, plus_infty, plus_infty);
2579   TEST_f_f (expm1, minus_infty, -1);
2580 #endif
2581   TEST_f_f (expm1, nan_value, nan_value);
2582
2583   TEST_f_f (expm1, 1, M_El - 1.0);
2584   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
2585
2586   END (expm1);
2587 }
2588
2589
2590 static void
2591 fabs_test (void)
2592 {
2593   START (fabs);
2594
2595   TEST_f_f (fabs, 0, 0);
2596   TEST_f_f (fabs, minus_zero, 0);
2597
2598   TEST_f_f (fabs, plus_infty, plus_infty);
2599   TEST_f_f (fabs, minus_infty, plus_infty);
2600   TEST_f_f (fabs, nan_value, nan_value);
2601
2602   TEST_f_f (fabs, 38.0, 38.0);
2603   TEST_f_f (fabs, -M_El, M_El);
2604
2605   END (fabs);
2606 }
2607
2608
2609 static void
2610 fdim_test (void)
2611 {
2612   START (fdim);
2613
2614   TEST_ff_f (fdim, 0, 0, 0);
2615   TEST_ff_f (fdim, 9, 0, 9);
2616   TEST_ff_f (fdim, 0, 9, 0);
2617   TEST_ff_f (fdim, -9, 0, 0);
2618   TEST_ff_f (fdim, 0, -9, 9);
2619
2620   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
2621   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
2622   TEST_ff_f (fdim, minus_infty, 9, 0);
2623   TEST_ff_f (fdim, minus_infty, -9, 0);
2624   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
2625   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
2626   TEST_ff_f (fdim, 9, plus_infty, 0);
2627   TEST_ff_f (fdim, -9, plus_infty, 0);
2628
2629   TEST_ff_f (fdim, 0, nan_value, nan_value);
2630   TEST_ff_f (fdim, 9, nan_value, nan_value);
2631   TEST_ff_f (fdim, -9, nan_value, nan_value);
2632   TEST_ff_f (fdim, nan_value, 9, nan_value);
2633   TEST_ff_f (fdim, nan_value, -9, nan_value);
2634   TEST_ff_f (fdim, plus_infty, nan_value, nan_value);
2635   TEST_ff_f (fdim, minus_infty, nan_value, nan_value);
2636   TEST_ff_f (fdim, nan_value, plus_infty, nan_value);
2637   TEST_ff_f (fdim, nan_value, minus_infty, nan_value);
2638   TEST_ff_f (fdim, nan_value, nan_value, nan_value);
2639
2640   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
2641
2642   END (fdim);
2643 }
2644
2645
2646 static void
2647 floor_test (void)
2648 {
2649   START (floor);
2650
2651   TEST_f_f (floor, 0.0, 0.0);
2652   TEST_f_f (floor, minus_zero, minus_zero);
2653   TEST_f_f (floor, plus_infty, plus_infty);
2654   TEST_f_f (floor, minus_infty, minus_infty);
2655   TEST_f_f (floor, nan_value, nan_value);
2656
2657   TEST_f_f (floor, M_PIl, 3.0);
2658   TEST_f_f (floor, -M_PIl, -4.0);
2659
2660   TEST_f_f (floor, 0.1, 0.0);
2661   TEST_f_f (floor, 0.25, 0.0);
2662   TEST_f_f (floor, 0.625, 0.0);
2663   TEST_f_f (floor, -0.1, -1.0);
2664   TEST_f_f (floor, -0.25, -1.0);
2665   TEST_f_f (floor, -0.625, -1.0);
2666
2667 #ifdef TEST_LDOUBLE
2668   /* The result can only be represented in long double.  */
2669   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
2670   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
2671   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
2672   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
2673   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
2674 # if LDBL_MANT_DIG > 100
2675   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
2676   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
2677   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
2678 # endif
2679
2680   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
2681   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
2682   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
2683   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
2684   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
2685 # if LDBL_MANT_DIG > 100
2686   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
2687   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
2688   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
2689 # endif
2690
2691   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
2692   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
2693   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
2694   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
2695   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
2696
2697 # if LDBL_MANT_DIG > 100
2698   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
2699   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
2700   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
2701   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
2702   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
2703   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
2704 # endif
2705
2706   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
2707   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
2708   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
2709   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
2710   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
2711
2712 # if LDBL_MANT_DIG > 100
2713   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
2714   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
2715   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
2716   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
2717   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
2718   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
2719 # endif
2720
2721   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
2722   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
2723   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
2724   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
2725   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
2726
2727   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
2728   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
2729   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
2730   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
2731   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
2732
2733   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
2734   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
2735   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
2736   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
2737   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
2738 #endif
2739
2740   END (floor);
2741 }
2742
2743
2744 static void
2745 fma_test (void)
2746 {
2747   START (fma);
2748
2749   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
2750   TEST_fff_f (fma, nan_value, 2.0, 3.0, nan_value);
2751   TEST_fff_f (fma, 1.0, nan_value, 3.0, nan_value);
2752   TEST_fff_f (fma, 1.0, 2.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2753   TEST_fff_f (fma, plus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2754   TEST_fff_f (fma, minus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2755   TEST_fff_f (fma, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2756   TEST_fff_f (fma, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2757   TEST_fff_f (fma, plus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
2758   TEST_fff_f (fma, minus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
2759   TEST_fff_f (fma, 0.0, plus_infty, 1.0, nan_value, INVALID_EXCEPTION);
2760   TEST_fff_f (fma, 0.0, minus_infty, 1.0, nan_value, INVALID_EXCEPTION);
2761
2762   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
2763   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2764   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
2765   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
2766
2767   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
2768
2769   END (fma);
2770 }
2771
2772
2773 static void
2774 fmax_test (void)
2775 {
2776   START (fmax);
2777
2778   TEST_ff_f (fmax, 0, 0, 0);
2779   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
2780   TEST_ff_f (fmax, 9, 0, 9);
2781   TEST_ff_f (fmax, 0, 9, 9);
2782   TEST_ff_f (fmax, -9, 0, 0);
2783   TEST_ff_f (fmax, 0, -9, 0);
2784
2785   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
2786   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
2787   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
2788   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
2789
2790   TEST_ff_f (fmax, minus_infty, 9, 9);
2791   TEST_ff_f (fmax, minus_infty, -9, -9);
2792   TEST_ff_f (fmax, 9, minus_infty, 9);
2793   TEST_ff_f (fmax, -9, minus_infty, -9);
2794
2795   TEST_ff_f (fmax, 0, nan_value, 0);
2796   TEST_ff_f (fmax, 9, nan_value, 9);
2797   TEST_ff_f (fmax, -9, nan_value, -9);
2798   TEST_ff_f (fmax, nan_value, 0, 0);
2799   TEST_ff_f (fmax, nan_value, 9, 9);
2800   TEST_ff_f (fmax, nan_value, -9, -9);
2801   TEST_ff_f (fmax, plus_infty, nan_value, plus_infty);
2802   TEST_ff_f (fmax, minus_infty, nan_value, minus_infty);
2803   TEST_ff_f (fmax, nan_value, plus_infty, plus_infty);
2804   TEST_ff_f (fmax, nan_value, minus_infty, minus_infty);
2805   TEST_ff_f (fmax, nan_value, nan_value, nan_value);
2806
2807   END (fmax);
2808 }
2809
2810
2811 static void
2812 fmin_test (void)
2813 {
2814   START (fmin);
2815
2816   TEST_ff_f (fmin, 0, 0, 0);
2817   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
2818   TEST_ff_f (fmin, 9, 0, 0);
2819   TEST_ff_f (fmin, 0, 9, 0);
2820   TEST_ff_f (fmin, -9, 0, -9);
2821   TEST_ff_f (fmin, 0, -9, -9);
2822
2823   TEST_ff_f (fmin, plus_infty, 9, 9);
2824   TEST_ff_f (fmin, 9, plus_infty, 9);
2825   TEST_ff_f (fmin, plus_infty, -9, -9);
2826   TEST_ff_f (fmin, -9, plus_infty, -9);
2827   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
2828   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
2829   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
2830   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
2831
2832   TEST_ff_f (fmin, 0, nan_value, 0);
2833   TEST_ff_f (fmin, 9, nan_value, 9);
2834   TEST_ff_f (fmin, -9, nan_value, -9);
2835   TEST_ff_f (fmin, nan_value, 0, 0);
2836   TEST_ff_f (fmin, nan_value, 9, 9);
2837   TEST_ff_f (fmin, nan_value, -9, -9);
2838   TEST_ff_f (fmin, plus_infty, nan_value, plus_infty);
2839   TEST_ff_f (fmin, minus_infty, nan_value, minus_infty);
2840   TEST_ff_f (fmin, nan_value, plus_infty, plus_infty);
2841   TEST_ff_f (fmin, nan_value, minus_infty, minus_infty);
2842   TEST_ff_f (fmin, nan_value, nan_value, nan_value);
2843
2844   END (fmin);
2845 }
2846
2847
2848 static void
2849 fmod_test (void)
2850 {
2851   errno = 0;
2852   FUNC(fmod) (6.5, 2.3L);
2853   if (errno == ENOSYS)
2854     /* Function not implemented.  */
2855     return;
2856
2857   START (fmod);
2858
2859   /* fmod (+0, y) == +0 for y != 0.  */
2860   TEST_ff_f (fmod, 0, 3, 0);
2861
2862   /* fmod (-0, y) == -0 for y != 0.  */
2863   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
2864
2865   /* fmod (+inf, y) == NaN plus invalid exception.  */
2866   TEST_ff_f (fmod, plus_infty, 3, nan_value, INVALID_EXCEPTION);
2867   /* fmod (-inf, y) == NaN plus invalid exception.  */
2868   TEST_ff_f (fmod, minus_infty, 3, nan_value, INVALID_EXCEPTION);
2869   /* fmod (x, +0) == NaN plus invalid exception.  */
2870   TEST_ff_f (fmod, 3, 0, nan_value, INVALID_EXCEPTION);
2871   /* fmod (x, -0) == NaN plus invalid exception.  */
2872   TEST_ff_f (fmod, 3, minus_zero, nan_value, INVALID_EXCEPTION);
2873
2874   /* fmod (x, +inf) == x for x not infinite.  */
2875   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
2876   /* fmod (x, -inf) == x for x not infinite.  */
2877   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
2878
2879   TEST_ff_f (fmod, nan_value, nan_value, nan_value);
2880
2881   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
2882   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
2883   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
2884   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
2885
2886   END (fmod);
2887 }
2888
2889
2890 static void
2891 fpclassify_test (void)
2892 {
2893   START (fpclassify);
2894
2895   TEST_f_i (fpclassify, nan_value, FP_NAN);
2896   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
2897   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
2898   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
2899   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
2900   TEST_f_i (fpclassify, 1000, FP_NORMAL);
2901
2902   END (fpclassify);
2903 }
2904
2905
2906 static void
2907 frexp_test (void)
2908 {
2909   int x;
2910
2911   START (frexp);
2912
2913   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
2914   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
2915   TEST_fI_f1 (frexp, nan_value, nan_value, IGNORE);
2916
2917   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
2918   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
2919
2920   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
2921   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
2922
2923   END (frexp);
2924 }
2925
2926
2927 static void
2928 gamma_test (void)
2929 {
2930   errno = 0;
2931   FUNC(gamma) (1);
2932
2933   if (errno == ENOSYS)
2934     /* Function not implemented.  */
2935     return;
2936   feclearexcept (FE_ALL_EXCEPT);
2937
2938   START (gamma);
2939
2940   TEST_f_f (gamma, plus_infty, plus_infty);
2941   TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
2942   TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
2943   TEST_f_f (gamma, minus_infty, plus_infty);
2944   TEST_f_f (gamma, nan_value, nan_value);
2945
2946   TEST_f_f1 (gamma, 1, 0, 1);
2947   TEST_f_f1 (gamma, 3, M_LN2l, 1);
2948
2949   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
2950   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
2951
2952   END (gamma);
2953 }
2954
2955 static void
2956 hypot_test (void)
2957 {
2958   errno = 0;
2959   FUNC(hypot) (0.7L, 12.4L);
2960   if (errno == ENOSYS)
2961     /* Function not implemented.  */
2962     return;
2963
2964   START (hypot);
2965
2966   TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
2967   TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
2968
2969 #ifndef TEST_INLINE
2970   TEST_ff_f (hypot, plus_infty, nan_value, plus_infty);
2971   TEST_ff_f (hypot, minus_infty, nan_value, plus_infty);
2972   TEST_ff_f (hypot, nan_value, plus_infty, plus_infty);
2973   TEST_ff_f (hypot, nan_value, minus_infty, plus_infty);
2974 #endif
2975
2976   TEST_ff_f (hypot, nan_value, nan_value, nan_value);
2977
2978   /* hypot (x,y) == hypot (+-x, +-y)  */
2979   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
2980   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
2981   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
2982   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
2983   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
2984   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
2985   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
2986   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
2987
2988   /*  hypot (x,0) == fabs (x)  */
2989   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
2990   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
2991   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
2992
2993   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
2994
2995   END (hypot);
2996 }
2997
2998
2999 static void
3000 ilogb_test (void)
3001 {
3002   START (ilogb);
3003
3004   TEST_f_i (ilogb, 1, 0);
3005   TEST_f_i (ilogb, M_El, 1);
3006   TEST_f_i (ilogb, 1024, 10);
3007   TEST_f_i (ilogb, -2000, 10);
3008
3009   /* XXX We have a problem here: the standard does not tell us whether
3010      exceptions are allowed/required.  ignore them for now.  */
3011
3012   TEST_f_i (ilogb, 0.0, FP_ILOGB0, EXCEPTIONS_OK);
3013   TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, EXCEPTIONS_OK);
3014   TEST_f_i (ilogb, plus_infty, INT_MAX, EXCEPTIONS_OK);
3015   TEST_f_i (ilogb, minus_infty, INT_MAX, EXCEPTIONS_OK);
3016
3017   END (ilogb);
3018 }
3019
3020 static void
3021 isfinite_test (void)
3022 {
3023   START (isfinite);
3024
3025   TEST_f_b (isfinite, 0, 1);
3026   TEST_f_b (isfinite, minus_zero, 1);
3027   TEST_f_b (isfinite, 10, 1);
3028   TEST_f_b (isfinite, plus_infty, 0);
3029   TEST_f_b (isfinite, minus_infty, 0);
3030   TEST_f_b (isfinite, nan_value, 0);
3031
3032   END (isfinite);
3033 }
3034
3035 static void
3036 isnormal_test (void)
3037 {
3038   START (isnormal);
3039
3040   TEST_f_b (isnormal, 0, 0);
3041   TEST_f_b (isnormal, minus_zero, 0);
3042   TEST_f_b (isnormal, 10, 1);
3043   TEST_f_b (isnormal, plus_infty, 0);
3044   TEST_f_b (isnormal, minus_infty, 0);
3045   TEST_f_b (isnormal, nan_value, 0);
3046
3047   END (isnormal);
3048 }
3049
3050 static void
3051 j0_test (void)
3052 {
3053   FLOAT s, c;
3054   errno = 0;
3055   FUNC (sincos) (0, &s, &c);
3056   if (errno == ENOSYS)
3057     /* Required function not implemented.  */
3058     return;
3059   FUNC(j0) (0);
3060   if (errno == ENOSYS)
3061     /* Function not implemented.  */
3062     return;
3063
3064   START (j0);
3065
3066   /* j0 is the Bessel function of the first kind of order 0 */
3067   TEST_f_f (j0, nan_value, nan_value);
3068   TEST_f_f (j0, plus_infty, 0);
3069   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
3070   TEST_f_f (j0, 0.0, 1.0);
3071   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
3072   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
3073   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
3074   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
3075   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
3076   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
3077   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
3078   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3079   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3080
3081   END (j0);
3082 }
3083
3084
3085 static void
3086 j1_test (void)
3087 {
3088   FLOAT s, c;
3089   errno = 0;
3090   FUNC (sincos) (0, &s, &c);
3091   if (errno == ENOSYS)
3092     /* Required function not implemented.  */
3093     return;
3094   FUNC(j1) (0);
3095   if (errno == ENOSYS)
3096     /* Function not implemented.  */
3097     return;
3098
3099   /* j1 is the Bessel function of the first kind of order 1 */
3100
3101   START (j1);
3102
3103   TEST_f_f (j1, nan_value, nan_value);
3104   TEST_f_f (j1, plus_infty, 0);
3105
3106   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
3107   TEST_f_f (j1, 0.0, 0.0);
3108   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
3109   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
3110   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
3111   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
3112   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
3113   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
3114   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
3115
3116   END (j1);
3117 }
3118
3119 static void
3120 jn_test (void)
3121 {
3122   FLOAT s, c;
3123   errno = 0;
3124   FUNC (sincos) (0, &s, &c);
3125   if (errno == ENOSYS)
3126     /* Required function not implemented.  */
3127     return;
3128   FUNC(jn) (1, 1);
3129   if (errno == ENOSYS)
3130     /* Function not implemented.  */
3131     return;
3132
3133   /* jn is the Bessel function of the first kind of order n.  */
3134   START (jn);
3135
3136   /* jn (0, x) == j0 (x)  */
3137   TEST_ff_f (jn, 0, nan_value, nan_value);
3138   TEST_ff_f (jn, 0, plus_infty, 0);
3139   TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
3140   TEST_ff_f (jn, 0, 0.0, 1.0);
3141   TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
3142   TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
3143   TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
3144   TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
3145   TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
3146   TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
3147   TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
3148   TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3149   TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3150
3151   /* jn (1, x) == j1 (x)  */
3152   TEST_ff_f (jn, 1, nan_value, nan_value);
3153   TEST_ff_f (jn, 1, plus_infty, 0);
3154   TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
3155   TEST_ff_f (jn, 1, 0.0, 0.0);
3156   TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
3157   TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
3158   TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
3159   TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
3160   TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
3161   TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
3162   TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
3163
3164   /* jn (3, x)  */
3165   TEST_ff_f (jn, 3, nan_value, nan_value);
3166   TEST_ff_f (jn, 3, plus_infty, 0);
3167
3168   TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
3169   TEST_ff_f (jn, 3, 0.0, 0.0);
3170   TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
3171   TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
3172   TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
3173   TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
3174   TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
3175
3176   /*  jn (10, x)  */
3177   TEST_ff_f (jn, 10, nan_value, nan_value);
3178   TEST_ff_f (jn, 10, plus_infty, 0);
3179
3180   TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
3181   TEST_ff_f (jn, 10, 0.0, 0.0);
3182   TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
3183   TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
3184   TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
3185   TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
3186   TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
3187
3188   END (jn);
3189 }
3190
3191
3192 static void
3193 ldexp_test (void)
3194 {
3195   TEST_ff_f (ldexp, 0, 0, 0);
3196   TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
3197
3198   TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
3199   TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
3200   TEST_ff_f (ldexp, nan_value, 1, nan_value);
3201
3202   TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
3203   TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
3204
3205   /* ldexp (x, 0) == x.  */
3206   TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
3207 }
3208
3209
3210 static void
3211 lgamma_test (void)
3212 {
3213   errno = 0;
3214   FUNC(lgamma) (0);
3215   if (errno == ENOSYS)
3216     /* Function not implemented.  */
3217     return;
3218   feclearexcept (FE_ALL_EXCEPT);
3219
3220   START (lgamma);
3221
3222   TEST_f_f (lgamma, plus_infty, plus_infty);
3223   TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3224   TEST_f_f (lgamma, nan_value, nan_value);
3225
3226   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
3227   TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3228   TEST_f_f (lgamma, minus_infty, plus_infty);
3229
3230   TEST_f_f1 (lgamma, 1, 0, 1);
3231
3232   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
3233
3234   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
3235   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3236   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
3237   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
3238
3239   END (lgamma);
3240 }
3241
3242
3243 static void
3244 lrint_test (void)
3245 {
3246   /* XXX this test is incomplete.  We need to have a way to specifiy
3247      the rounding method and test the critical cases.  So far, only
3248      unproblematic numbers are tested.  */
3249
3250   START (lrint);
3251
3252   TEST_f_l (lrint, 0.0, 0);
3253   TEST_f_l (lrint, minus_zero, 0);
3254   TEST_f_l (lrint, 0.2L, 0);
3255   TEST_f_l (lrint, -0.2L, 0);
3256
3257   TEST_f_l (lrint, 1.4L, 1);
3258   TEST_f_l (lrint, -1.4L, -1);
3259
3260   TEST_f_l (lrint, 8388600.3L, 8388600);
3261   TEST_f_l (lrint, -8388600.3L, -8388600);
3262
3263   TEST_f_l (lrint, 1071930.0008, 1071930);
3264 #ifndef TEST_FLOAT
3265   TEST_f_l (lrint, 1073741824.01, 1073741824);
3266 # if LONG_MAX > 281474976710656
3267   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3268 # endif
3269 #endif
3270
3271   END (lrint);
3272 }
3273
3274
3275 static void
3276 llrint_test (void)
3277 {
3278   /* XXX this test is incomplete.  We need to have a way to specifiy
3279      the rounding method and test the critical cases.  So far, only
3280      unproblematic numbers are tested.  */
3281
3282   START (llrint);
3283
3284   TEST_f_L (llrint, 0.0, 0);
3285   TEST_f_L (llrint, minus_zero, 0);
3286   TEST_f_L (llrint, 0.2L, 0);
3287   TEST_f_L (llrint, -0.2L, 0);
3288
3289   TEST_f_L (llrint, 1.4L, 1);
3290   TEST_f_L (llrint, -1.4L, -1);
3291
3292   TEST_f_L (llrint, 8388600.3L, 8388600);
3293   TEST_f_L (llrint, -8388600.3L, -8388600);
3294
3295   TEST_f_l (llrint, 1071930.0008, 1071930);
3296
3297   /* Test boundary conditions.  */
3298   /* 0x1FFFFF */
3299   TEST_f_L (llrint, 2097151.0,2097151LL);
3300   /* 0x800000 */
3301   TEST_f_L (llrint, 8388608.0, 8388608LL);
3302   /* 0x1000000 */
3303   TEST_f_L (llrint, 16777216.0, 16777216LL);
3304   /* 0x20000000000 */
3305   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
3306   /* 0x40000000000 */
3307   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
3308   /* 0x1000000000000 */
3309   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
3310   /* 0x10000000000000 */
3311   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
3312   /* 0x10000080000000 */
3313   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
3314   /* 0x20000000000000 */
3315   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
3316   /* 0x80000000000000 */
3317   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
3318   /* 0x100000000000000 */
3319   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
3320 #ifdef TEST_LDOUBLE
3321   /* The input can only be represented in long double.  */
3322   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
3323   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
3324   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
3325   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
3326   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
3327
3328   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
3329   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
3330   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
3331   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
3332   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
3333
3334   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
3335   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
3336   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
3337   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
3338   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
3339
3340   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
3341   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
3342   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
3343   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
3344   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
3345
3346   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
3347   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
3348   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
3349   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
3350   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
3351
3352   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
3353   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
3354   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
3355   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
3356   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
3357 #endif
3358
3359   END (llrint);
3360 }
3361
3362
3363 static void
3364 log_test (void)
3365 {
3366   errno = 0;
3367   FUNC(log) (1);
3368   if (errno == ENOSYS)
3369     /* Function not implemented.  */
3370     return;
3371   START (log);
3372
3373   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3374   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3375
3376   TEST_f_f (log, 1, 0);
3377
3378   TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
3379   TEST_f_f (log, plus_infty, plus_infty);
3380
3381   TEST_f_f (log, M_El, 1);
3382   TEST_f_f (log, 1.0 / M_El, -1);
3383   TEST_f_f (log, 2, M_LN2l);
3384   TEST_f_f (log, 10, M_LN10l);
3385   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
3386
3387   END (log);
3388 }
3389
3390
3391 static void
3392 log10_test (void)
3393 {
3394   errno = 0;
3395   FUNC(log10) (1);
3396   if (errno == ENOSYS)
3397     /* Function not implemented.  */
3398     return;
3399
3400   START (log10);
3401
3402   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3403   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3404
3405   TEST_f_f (log10, 1, 0);
3406
3407   /* log10 (x) == NaN plus invalid exception if x < 0.  */
3408   TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
3409
3410   TEST_f_f (log10, plus_infty, plus_infty);
3411   TEST_f_f (log10, nan_value, nan_value);
3412
3413   TEST_f_f (log10, 0.1L, -1);
3414   TEST_f_f (log10, 10.0, 1);
3415   TEST_f_f (log10, 100.0, 2);
3416   TEST_f_f (log10, 10000.0, 4);
3417   TEST_f_f (log10, M_El, M_LOG10El);
3418   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
3419
3420   END (log10);
3421 }
3422
3423
3424 static void
3425 log1p_test (void)
3426 {
3427   errno = 0;
3428   FUNC(log1p) (0);
3429   if (errno == ENOSYS)
3430     /* Function not implemented.  */
3431     return;
3432
3433   START (log1p);
3434
3435   TEST_f_f (log1p, 0, 0);
3436   TEST_f_f (log1p, minus_zero, minus_zero);
3437
3438   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3439   TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
3440
3441   TEST_f_f (log1p, plus_infty, plus_infty);
3442   TEST_f_f (log1p, nan_value, nan_value);
3443
3444   TEST_f_f (log1p, M_El - 1.0, 1);
3445
3446   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
3447   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
3448
3449   END (log1p);
3450 }
3451
3452
3453 static void
3454 log2_test (void)
3455 {
3456   errno = 0;
3457   FUNC(log2) (1);
3458   if (errno == ENOSYS)
3459     /* Function not implemented.  */
3460     return;
3461
3462   START (log2);
3463
3464   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3465   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3466
3467   TEST_f_f (log2, 1, 0);
3468
3469   TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
3470
3471   TEST_f_f (log2, plus_infty, plus_infty);
3472   TEST_f_f (log2, nan_value, nan_value);
3473
3474   TEST_f_f (log2, M_El, M_LOG2El);
3475   TEST_f_f (log2, 2.0, 1);
3476   TEST_f_f (log2, 16.0, 4);
3477   TEST_f_f (log2, 256.0, 8);
3478   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
3479
3480   END (log2);
3481 }
3482
3483
3484 static void
3485 logb_test (void)
3486 {
3487   START (logb);
3488
3489   TEST_f_f (logb, plus_infty, plus_infty);
3490   TEST_f_f (logb, minus_infty, plus_infty);
3491
3492   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3493
3494   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3495   TEST_f_f (logb, nan_value, nan_value);
3496
3497   TEST_f_f (logb, 1, 0);
3498   TEST_f_f (logb, M_El, 1);
3499   TEST_f_f (logb, 1024, 10);
3500   TEST_f_f (logb, -2000, 10);
3501
3502   END (logb);
3503 }
3504
3505
3506 static void
3507 lround_test (void)
3508 {
3509   START (lround);
3510
3511   TEST_f_l (lround, 0, 0);
3512   TEST_f_l (lround, minus_zero, 0);
3513   TEST_f_l (lround, 0.2L, 0.0);
3514   TEST_f_l (lround, -0.2L, 0);
3515   TEST_f_l (lround, 0.5, 1);
3516   TEST_f_l (lround, -0.5, -1);
3517   TEST_f_l (lround, 0.8L, 1);
3518   TEST_f_l (lround, -0.8L, -1);
3519   TEST_f_l (lround, 1.5, 2);
3520   TEST_f_l (lround, -1.5, -2);
3521   TEST_f_l (lround, 22514.5, 22515);
3522   TEST_f_l (lround, -22514.5, -22515);
3523   TEST_f_l (lround, 1071930.0008, 1071930);
3524 #ifndef TEST_FLOAT
3525   TEST_f_l (lround, 1073741824.01, 1073741824);
3526 # if LONG_MAX > 281474976710656
3527   TEST_f_l (lround, 281474976710656.025, 281474976710656);
3528 # endif
3529   TEST_f_l (lround, 2097152.5, 2097153);
3530   TEST_f_l (lround, -2097152.5, -2097153);
3531 #endif
3532   END (lround);
3533 }
3534
3535
3536 static void
3537 llround_test (void)
3538 {
3539   START (llround);
3540
3541   TEST_f_L (llround, 0, 0);
3542   TEST_f_L (llround, minus_zero, 0);
3543   TEST_f_L (llround, 0.2L, 0.0);
3544   TEST_f_L (llround, -0.2L, 0);
3545   TEST_f_L (llround, 0.5, 1);
3546   TEST_f_L (llround, -0.5, -1);
3547   TEST_f_L (llround, 0.8L, 1);
3548   TEST_f_L (llround, -0.8L, -1);
3549   TEST_f_L (llround, 1.5, 2);
3550   TEST_f_L (llround, -1.5, -2);
3551   TEST_f_L (llround, 22514.5, 22515);
3552   TEST_f_L (llround, -22514.5, -22515);
3553   TEST_f_l (llround, 1071930.0008, 1071930);
3554 #ifndef TEST_FLOAT
3555   TEST_f_L (llround, 2097152.5, 2097153);
3556   TEST_f_L (llround, -2097152.5, -2097153);
3557   TEST_f_L (llround, 34359738368.5, 34359738369ll);
3558   TEST_f_L (llround, -34359738368.5, -34359738369ll);
3559 #endif
3560
3561   /* Test boundary conditions.  */
3562   /* 0x1FFFFF */
3563   TEST_f_L (llround, 2097151.0, 2097151LL);
3564   /* 0x800000 */
3565   TEST_f_L (llround, 8388608.0, 8388608LL);
3566   /* 0x1000000 */
3567   TEST_f_L (llround, 16777216.0, 16777216LL);
3568   /* 0x20000000000 */
3569   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
3570   /* 0x40000000000 */
3571   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
3572   /* 0x1000000000000 */
3573   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
3574   /* 0x10000000000000 */
3575   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
3576   /* 0x10000080000000 */
3577   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
3578   /* 0x20000000000000 */
3579   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
3580   /* 0x80000000000000 */
3581   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
3582   /* 0x100000000000000 */
3583   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
3584
3585 #ifndef TEST_FLOAT
3586   /* 0x100000000 */
3587   TEST_f_L (llround, 4294967295.5, 4294967296LL);
3588   /* 0x200000000 */
3589   TEST_f_L (llround, 8589934591.5, 8589934592LL);
3590 #endif
3591
3592 #ifdef TEST_LDOUBLE
3593   /* The input can only be represented in long double.  */
3594   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
3595   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
3596   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
3597   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
3598   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
3599
3600   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
3601   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
3602   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
3603   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
3604   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
3605
3606   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
3607   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
3608   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
3609   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
3610   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
3611
3612   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
3613   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
3614   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
3615   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
3616   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
3617
3618   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
3619   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
3620   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
3621   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
3622   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
3623
3624   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
3625   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
3626   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
3627   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
3628   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
3629
3630   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
3631   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
3632   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
3633   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
3634   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
3635   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
3636 #endif
3637
3638   END (llround);
3639 }
3640
3641 static void
3642 modf_test (void)
3643 {
3644   FLOAT x;
3645
3646   START (modf);
3647
3648   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
3649   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
3650   TEST_fF_f1 (modf, nan_value, nan_value, nan_value);
3651   TEST_fF_f1 (modf, 0, 0, 0);
3652   TEST_fF_f1 (modf, 1.5, 0.5, 1);
3653   TEST_fF_f1 (modf, 2.5, 0.5, 2);
3654   TEST_fF_f1 (modf, -2.5, -0.5, -2);
3655   TEST_fF_f1 (modf, 20, 0, 20);
3656   TEST_fF_f1 (modf, 21, 0, 21);
3657   TEST_fF_f1 (modf, 89.5, 0.5, 89);
3658
3659   END (modf);
3660 }
3661
3662
3663 static void
3664 nearbyint_test (void)
3665 {
3666   START (nearbyint);
3667
3668   TEST_f_f (nearbyint, 0.0, 0.0);
3669   TEST_f_f (nearbyint, minus_zero, minus_zero);
3670   TEST_f_f (nearbyint, plus_infty, plus_infty);
3671   TEST_f_f (nearbyint, minus_infty, minus_infty);
3672   TEST_f_f (nearbyint, nan_value, nan_value);
3673
3674   /* Default rounding mode is round to nearest.  */
3675   TEST_f_f (nearbyint, 0.5, 0.0);
3676   TEST_f_f (nearbyint, 1.5, 2.0);
3677   TEST_f_f (nearbyint, -0.5, minus_zero);
3678   TEST_f_f (nearbyint, -1.5, -2.0);
3679
3680   END (nearbyint);
3681 }
3682
3683 static void
3684 nextafter_test (void)
3685 {
3686
3687   START (nextafter);
3688
3689   TEST_ff_f (nextafter, 0, 0, 0);
3690   TEST_ff_f (nextafter, minus_zero, 0, 0);
3691   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
3692   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
3693
3694   TEST_ff_f (nextafter, 9, 9, 9);
3695   TEST_ff_f (nextafter, -9, -9, -9);
3696   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
3697   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
3698
3699   TEST_ff_f (nextafter, nan_value, 1.1L, nan_value);
3700   TEST_ff_f (nextafter, 1.1L, nan_value, nan_value);
3701   TEST_ff_f (nextafter, nan_value, nan_value, nan_value);
3702
3703   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
3704                          LDBL_MAX, DBL_MAX, FLT_MAX);
3705   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty);
3706   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty);
3707
3708 #ifdef TEST_LDOUBLE
3709   // XXX Enable once gcc is fixed.
3710   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
3711 #endif
3712
3713   /* XXX We need the hexadecimal FP number representation here for further
3714      tests.  */
3715
3716   END (nextafter);
3717 }
3718
3719
3720 static void
3721 nexttoward_test (void)
3722 {
3723   START (nexttoward);
3724   TEST_ff_f (nexttoward, 0, 0, 0);
3725   TEST_ff_f (nexttoward, minus_zero, 0, 0);
3726   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
3727   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
3728
3729   TEST_ff_f (nexttoward, 9, 9, 9);
3730   TEST_ff_f (nexttoward, -9, -9, -9);
3731   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
3732   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
3733
3734   TEST_ff_f (nexttoward, nan_value, 1.1L, nan_value);
3735   TEST_ff_f (nexttoward, 1.1L, nan_value, nan_value);
3736   TEST_ff_f (nexttoward, nan_value, nan_value, nan_value);
3737
3738   /* XXX We need the hexadecimal FP number representation here for further
3739      tests.  */
3740
3741   END (nexttoward);
3742 }
3743
3744
3745 static void
3746 pow_test (void)
3747 {
3748
3749   errno = 0;
3750   FUNC(pow) (0, 0);
3751   if (errno == ENOSYS)
3752     /* Function not implemented.  */
3753     return;
3754
3755   START (pow);
3756
3757   TEST_ff_f (pow, 0, 0, 1);
3758   TEST_ff_f (pow, 0, minus_zero, 1);
3759   TEST_ff_f (pow, minus_zero, 0, 1);
3760   TEST_ff_f (pow, minus_zero, minus_zero, 1);
3761
3762   TEST_ff_f (pow, 10, 0, 1);
3763   TEST_ff_f (pow, 10, minus_zero, 1);
3764   TEST_ff_f (pow, -10, 0, 1);
3765   TEST_ff_f (pow, -10, minus_zero, 1);
3766
3767   TEST_ff_f (pow, nan_value, 0, 1);
3768   TEST_ff_f (pow, nan_value, minus_zero, 1);