]> git.ipfire.org Git - thirdparty/glibc.git/blame - math/libm-test.inc
Fix atan2 spurious exceptions (bug 11451).
[thirdparty/glibc.git] / math / libm-test.inc
CommitLineData
cfdc0dd7 1/* Copyright (C) 1997-2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
8847214f 2 This file is part of the GNU C Library.
18394a08 3 Contributed by Andreas Jaeger <aj@suse.de>, 1997.
8847214f
UD
4
5 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
8847214f
UD
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 13 Lesser General Public License for more details.
8847214f 14
41bdb6e2 15 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
8847214f
UD
18
19/* Part of testsuite for libm.
20
21 This file is processed by a perl script. The resulting file has to
22 be included by a master file that defines:
23
f964490f 24 Macros:
8847214f
UD
25 FUNC(function): converts general function name (like cos) to
26 name with correct suffix (e.g. cosl or cosf)
27 MATHCONST(x): like FUNC but for constants (e.g convert 0.0 to 0.0L)
28 FLOAT: floating point type to test
29 - TEST_MSG: informal message to be displayed
30 CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
31 chooses one of the parameters as delta for testing
32 equality
33 PRINTF_EXPR Floating point conversion specification to print a variable
34 of type FLOAT with printf. PRINTF_EXPR just contains
35 the specifier, not the percent and width arguments,
36 e.g. "f".
37 PRINTF_XEXPR Like PRINTF_EXPR, but print in hexadecimal format.
38 PRINTF_NEXPR Like PRINTF_EXPR, but print nice. */
39
40/* This testsuite has currently tests for:
41 acos, acosh, asin, asinh, atan, atan2, atanh,
42 cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1,
43 fabs, fdim, floor, fma, fmax, fmin, fmod, fpclassify,
44 frexp, gamma, hypot,
45 ilogb, isfinite, isinf, isnan, isnormal,
46 isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
47 j0, j1, jn,
48 ldexp, lgamma, log, log10, log1p, log2, logb,
49 modf, nearbyint, nextafter,
50 pow, remainder, remquo, rint, lrint, llrint,
51 round, lround, llround,
52 scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
e9c7764e 53 y0, y1, yn, significand
8847214f
UD
54
55 and for the following complex math functions:
56 cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
57 ccos, ccosh, cexp, clog, cpow, cproj, csin, csinh, csqrt, ctan, ctanh.
58
59 At the moment the following functions aren't tested:
e9c7764e 60 drem, nan
8847214f
UD
61
62 Parameter handling is primitive in the moment:
63 --verbose=[0..3] for different levels of output:
64 0: only error count
65 1: basic report on failed tests (default)
66 2: full report on all tests
67 -v for full output (equals --verbose=3)
68 -u for generation of an ULPs file
69 */
70
71/* "Philosophy":
72
73 This suite tests some aspects of the correct implementation of
74 mathematical functions in libm. Some simple, specific parameters
75 are tested for correctness but there's no exhaustive
76 testing. Handling of specific inputs (e.g. infinity, not-a-number)
77 is also tested. Correct handling of exceptions is checked
78 against. These implemented tests should check all cases that are
ec751a23 79 specified in ISO C99.
8847214f
UD
80
81 Exception testing: At the moment only divide-by-zero and invalid
82 exceptions are tested. Overflow/underflow and inexact exceptions
83 aren't checked at the moment.
84
85 NaN values: There exist signalling and quiet NaNs. This implementation
18394a08 86 only uses quiet NaN as parameter but does not differenciate
8847214f
UD
87 between the two kinds of NaNs as result.
88
89 Inline functions: Inlining functions should give an improvement in
90 speed - but not in precission. The inlined functions return
91 reasonable values for a reasonable range of input values. The
92 result is not necessarily correct for all values and exceptions are
93 not correctly raised in all cases. Problematic input and return
94 values are infinity, not-a-number and minus zero. This suite
95 therefore does not check these specific inputs and the exception
96 handling for inlined mathematical functions - just the "reasonable"
97 values are checked.
98
99 Beware: The tests might fail for any of the following reasons:
100 - Tests are wrong
101 - Functions are wrong
102 - Floating Point Unit not working properly
103 - Compiler has errors
104
105 With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
33996419
AJ
106
107
108 To Do: All parameter should be numbers that can be represented as
2550dfe9
AJ
109 exact floating point values. Currently some values cannot be
110 represented exactly and therefore the result is not the expected
111 result. For this we will use 36 digits so that numbers can be
112 represented exactly. */
8847214f
UD
113
114#ifndef _GNU_SOURCE
115# define _GNU_SOURCE
116#endif
117
118#include "libm-test-ulps.h"
119#include <complex.h>
120#include <math.h>
121#include <float.h>
122#include <fenv.h>
601d2942 123#include <limits.h>
8847214f
UD
124
125#include <errno.h>
126#include <stdlib.h>
127#include <stdio.h>
bdf09fab 128#include <string.h>
8847214f
UD
129#include <argp.h>
130
131/* Possible exceptions */
132#define NO_EXCEPTION 0x0
133#define INVALID_EXCEPTION 0x1
134#define DIVIDE_BY_ZERO_EXCEPTION 0x2
135/* The next flags signals that those exceptions are allowed but not required. */
136#define INVALID_EXCEPTION_OK 0x4
137#define DIVIDE_BY_ZERO_EXCEPTION_OK 0x8
138#define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
139/* Some special test flags, passed togther with exceptions. */
140#define IGNORE_ZERO_INF_SIGN 0x10
141
142/* Various constants (we must supply them precalculated for accuracy). */
42be70d4
UD
143#define M_PI_6l .52359877559829887307710723054658383L
144#define M_E2l 7.389056098930650227230427460575008L
145#define M_E3l 20.085536923187667740928529654581719L
146#define M_2_SQRT_PIl 3.5449077018110320545963349666822903L /* 2 sqrt (M_PIl) */
147#define M_SQRT_PIl 1.7724538509055160272981674833411451L /* sqrt (M_PIl) */
3c6cad26
UD
148#define M_LOG_SQRT_PIl 0.57236494292470008707171367567652933L /* log(sqrt(M_PIl)) */
149#define M_LOG_2_SQRT_PIl 1.265512123484645396488945797134706L /* log(2*sqrt(M_PIl)) */
8847214f
UD
150#define M_PI_34l (M_PIl - M_PI_4l) /* 3*pi/4 */
151#define M_PI_34_LOG10El (M_PIl - M_PI_4l) * M_LOG10El
152#define M_PI2_LOG10El M_PI_2l * M_LOG10El
153#define M_PI4_LOG10El M_PI_4l * M_LOG10El
154#define M_PI_LOG10El M_PIl * M_LOG10El
72c7a71d 155#define M_SQRT_2_2 0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
8847214f
UD
156
157static FILE *ulps_file; /* File to document difference. */
158static int output_ulps; /* Should ulps printed? */
159
160static int noErrors; /* number of errors */
161static int noTests; /* number of tests (without testing exceptions) */
162static int noExcTests; /* number of tests for exception flags */
163static int noXFails; /* number of expected failures. */
164static int noXPasses; /* number of unexpected passes. */
165
166static int verbose;
167static int output_max_error; /* Should the maximal errors printed? */
168static int output_points; /* Should the single function results printed? */
cd33623e 169static int ignore_max_ulp; /* Should we ignore max_ulp? */
8847214f
UD
170
171static FLOAT minus_zero, plus_zero;
164f863e 172static FLOAT plus_infty, minus_infty, nan_value, max_value, min_value;
8847214f 173
6815fabc 174static FLOAT max_error, real_max_error, imag_max_error;
8847214f
UD
175
176
177#define BUILD_COMPLEX(real, imag) \
178 ({ __complex__ FLOAT __retval; \
179 __real__ __retval = (real); \
180 __imag__ __retval = (imag); \
181 __retval; })
182
6815fabc
UD
183#define BUILD_COMPLEX_INT(real, imag) \
184 ({ __complex__ int __retval; \
185 __real__ __retval = (real); \
186 __imag__ __retval = (imag); \
187 __retval; })
188
8847214f
UD
189
190#define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
bf582445 191 (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
8847214f
UD
192
193static void
194init_max_error (void)
195{
196 max_error = 0;
6815fabc
UD
197 real_max_error = 0;
198 imag_max_error = 0;
aaca11d8 199 feclearexcept (FE_ALL_EXCEPT);
8847214f
UD
200}
201
202static void
6815fabc 203set_max_error (FLOAT current, FLOAT *curr_max_error)
8847214f 204{
6815fabc
UD
205 if (current > *curr_max_error)
206 *curr_max_error = current;
8847214f
UD
207}
208
209
210/* Should the message print to screen? This depends on the verbose flag,
211 and the test status. */
212static int
213print_screen (int ok, int xfail)
214{
215 if (output_points
216 && (verbose > 1
15daa639 217 || (verbose == 1 && ok == xfail)))
8847214f
UD
218 return 1;
219 return 0;
220}
221
222
223/* Should the message print to screen? This depends on the verbose flag,
224 and the test status. */
225static int
226print_screen_max_error (int ok, int xfail)
227{
228 if (output_max_error
229 && (verbose > 1
230 || ((verbose == 1) && (ok == xfail))))
231 return 1;
232 return 0;
233}
234
235/* Update statistic counters. */
236static void
237update_stats (int ok, int xfail)
238{
239 ++noTests;
240 if (ok && xfail)
241 ++noXPasses;
242 else if (!ok && xfail)
243 ++noXFails;
244 else if (!ok && !xfail)
245 ++noErrors;
246}
247
248static void
249print_ulps (const char *test_name, FLOAT ulp)
250{
251 if (output_ulps)
252 {
253 fprintf (ulps_file, "Test \"%s\":\n", test_name);
303f1335 254 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
8847214f 255 CHOOSE("ldouble", "double", "float",
303f1335
AS
256 "ildouble", "idouble", "ifloat"),
257 FUNC(ceil) (ulp));
8847214f
UD
258 }
259}
260
261static void
262print_function_ulps (const char *function_name, FLOAT ulp)
263{
264 if (output_ulps)
265 {
6815fabc 266 fprintf (ulps_file, "Function: \"%s\":\n", function_name);
303f1335 267 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
8847214f 268 CHOOSE("ldouble", "double", "float",
303f1335
AS
269 "ildouble", "idouble", "ifloat"),
270 FUNC(ceil) (ulp));
8847214f
UD
271 }
272}
273
274
6815fabc
UD
275static void
276print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
277 FLOAT imag_ulp)
278{
279 if (output_ulps)
280 {
281 if (real_ulp != 0.0)
282 {
283 fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
303f1335 284 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
6815fabc 285 CHOOSE("ldouble", "double", "float",
303f1335
AS
286 "ildouble", "idouble", "ifloat"),
287 FUNC(ceil) (real_ulp));
6815fabc
UD
288 }
289 if (imag_ulp != 0.0)
290 {
291 fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
303f1335 292 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
6815fabc 293 CHOOSE("ldouble", "double", "float",
303f1335
AS
294 "ildouble", "idouble", "ifloat"),
295 FUNC(ceil) (imag_ulp));
6815fabc 296 }
15daa639
UD
297
298
6815fabc
UD
299 }
300}
301
302
8847214f
UD
303
304/* Test if Floating-Point stack hasn't changed */
305static void
306fpstack_test (const char *test_name)
307{
308#ifdef i386
309 static int old_stack;
310 int sw;
311
312 asm ("fnstsw" : "=a" (sw));
313 sw >>= 11;
314 sw &= 7;
315
316 if (sw != old_stack)
317 {
318 printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
319 test_name, sw, old_stack);
320 ++noErrors;
321 old_stack = sw;
322 }
323#endif
324}
325
326
327static void
328print_max_error (const char *func_name, FLOAT allowed, int xfail)
329{
8847214f
UD
330 int ok = 0;
331
cd33623e 332 if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
8847214f
UD
333 {
334 ok = 1;
335 }
336
337 if (!ok)
338 print_function_ulps (func_name, max_error);
339
340
341 if (print_screen_max_error (ok, xfail))
342 {
6815fabc 343 printf ("Maximal error of `%s'\n", func_name);
303f1335
AS
344 printf (" is : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
345 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
8847214f
UD
346 }
347
348 update_stats (ok, xfail);
349}
350
351
6815fabc
UD
352static void
353print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
354 __complex__ int xfail)
355{
356 int ok = 0;
357
303f1335
AS
358 if ((real_max_error == 0 && imag_max_error == 0)
359 || (real_max_error <= __real__ allowed
360 && imag_max_error <= __imag__ allowed
361 && !ignore_max_ulp))
6815fabc
UD
362 {
363 ok = 1;
364 }
365
366 if (!ok)
367 print_complex_function_ulps (func_name, real_max_error, imag_max_error);
368
369
370 if (print_screen_max_error (ok, xfail))
371 {
372 printf ("Maximal error of real part of: %s\n", func_name);
303f1335
AS
373 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
374 FUNC(ceil) (real_max_error));
375 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
376 FUNC(ceil) (__real__ allowed));
6815fabc 377 printf ("Maximal error of imaginary part of: %s\n", func_name);
303f1335
AS
378 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
379 FUNC(ceil) (imag_max_error));
380 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
381 FUNC(ceil) (__imag__ allowed));
6815fabc
UD
382 }
383
384 update_stats (ok, xfail);
385}
386
387
8847214f
UD
388/* Test whether a given exception was raised. */
389static void
390test_single_exception (const char *test_name,
391 int exception,
392 int exc_flag,
393 int fe_flag,
394 const char *flag_name)
395{
396#ifndef TEST_INLINE
397 int ok = 1;
398 if (exception & exc_flag)
399 {
400 if (fetestexcept (fe_flag))
401 {
402 if (print_screen (1, 0))
403 printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
404 }
405 else
406 {
407 ok = 0;
408 if (print_screen (0, 0))
409 printf ("Failure: %s: Exception \"%s\" not set\n",
410 test_name, flag_name);
411 }
412 }
413 else
414 {
415 if (fetestexcept (fe_flag))
416 {
417 ok = 0;
418 if (print_screen (0, 0))
419 printf ("Failure: %s: Exception \"%s\" set\n",
420 test_name, flag_name);
421 }
422 else
423 {
424 if (print_screen (1, 0))
425 printf ("%s: Exception \"%s\" not set\n", test_name,
426 flag_name);
427 }
428 }
429 if (!ok)
430 ++noErrors;
431
432#endif
433}
434
435
436/* Test whether exceptions given by EXCEPTION are raised. Ignore thereby
437 allowed but not required exceptions.
438*/
439static void
440test_exceptions (const char *test_name, int exception)
441{
442 ++noExcTests;
443#ifdef FE_DIVBYZERO
444 if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
445 test_single_exception (test_name, exception,
446 DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
447 "Divide by zero");
448#endif
449#ifdef FE_INVALID
450 if ((exception & INVALID_EXCEPTION_OK) == 0)
451 test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
452 "Invalid operation");
453#endif
454 feclearexcept (FE_ALL_EXCEPT);
455}
456
457
458static void
6815fabc
UD
459check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
460 FLOAT max_ulp, int xfail, int exceptions,
461 FLOAT *curr_max_error)
8847214f
UD
462{
463 int ok = 0;
464 int print_diff = 0;
465 FLOAT diff = 0;
466 FLOAT ulp = 0;
467
468 test_exceptions (test_name, exceptions);
469 if (isnan (computed) && isnan (expected))
470 ok = 1;
471 else if (isinf (computed) && isinf (expected))
472 {
473 /* Test for sign of infinities. */
ba3752d5
UD
474 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
475 && signbit (computed) != signbit (expected))
8847214f
UD
476 {
477 ok = 0;
478 printf ("infinity has wrong sign.\n");
479 }
480 else
481 ok = 1;
482 }
483 /* Don't calc ulp for NaNs or infinities. */
484 else if (isinf (computed) || isnan (computed) || isinf (expected) || isnan (expected))
485 ok = 0;
486 else
487 {
488 diff = FUNC(fabs) (computed - expected);
e6b29af8
UD
489 switch (fpclassify (expected))
490 {
491 case FP_ZERO:
492 /* ilogb (0) isn't allowed. */
493 ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
494 break;
495 case FP_NORMAL:
496 ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
497 break;
498 case FP_SUBNORMAL:
499 ulp = (FUNC(ldexp) (diff, MANT_DIG)
500 / FUNC(ldexp) (1.0, FUNC(ilogb) (expected)));
501 break;
502 default:
503 /* It should never happen. */
504 abort ();
505 break;
506 }
6815fabc 507 set_max_error (ulp, curr_max_error);
8847214f 508 print_diff = 1;
ba3752d5
UD
509 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
510 && computed == 0.0 && expected == 0.0
511 && signbit(computed) != signbit (expected))
3a8e65a0 512 ok = 0;
f964490f 513 else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
8847214f
UD
514 ok = 1;
515 else
516 {
517 ok = 0;
518 print_ulps (test_name, ulp);
519 }
520
521 }
522 if (print_screen (ok, xfail))
523 {
524 if (!ok)
525 printf ("Failure: ");
526 printf ("Test: %s\n", test_name);
527 printf ("Result:\n");
528 printf (" is: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
529 computed, computed);
530 printf (" should be: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
531 expected, expected);
532 if (print_diff)
533 {
534 printf (" difference: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR
535 "\n", diff, diff);
536 printf (" ulp : % .4" PRINTF_NEXPR "\n", ulp);
537 printf (" max.ulp : % .4" PRINTF_NEXPR "\n", max_ulp);
538 }
539 }
540 update_stats (ok, xfail);
541
542 fpstack_test (test_name);
543}
544
545
546static void
6815fabc
UD
547check_float (const char *test_name, FLOAT computed, FLOAT expected,
548 FLOAT max_ulp, int xfail, int exceptions)
549{
550 check_float_internal (test_name, computed, expected, max_ulp, xfail,
551 exceptions, &max_error);
552}
553
554
555static void
556check_complex (const char *test_name, __complex__ FLOAT computed,
557 __complex__ FLOAT expected,
558 __complex__ FLOAT max_ulp, __complex__ int xfail,
559 int exception)
8847214f 560{
6815fabc
UD
561 FLOAT part_comp, part_exp, part_max_ulp;
562 int part_xfail;
8847214f
UD
563 char str[200];
564
565 sprintf (str, "Real part of: %s", test_name);
566 part_comp = __real__ computed;
567 part_exp = __real__ expected;
6815fabc
UD
568 part_max_ulp = __real__ max_ulp;
569 part_xfail = __real__ xfail;
15daa639 570
6815fabc
UD
571 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
572 exception, &real_max_error);
8847214f 573
f30e0cd3 574 sprintf (str, "Imaginary part of: %s", test_name);
8847214f
UD
575 part_comp = __imag__ computed;
576 part_exp = __imag__ expected;
6815fabc
UD
577 part_max_ulp = __imag__ max_ulp;
578 part_xfail = __imag__ xfail;
15daa639 579
8847214f
UD
580 /* Don't check again for exceptions, just pass through the
581 zero/inf sign test. */
6815fabc
UD
582 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
583 exception & IGNORE_ZERO_INF_SIGN,
584 &imag_max_error);
8847214f
UD
585}
586
587
588/* Check that computed and expected values are equal (int values). */
589static void
590check_int (const char *test_name, int computed, int expected, int max_ulp,
591 int xfail, int exceptions)
592{
593 int diff = computed - expected;
594 int ok = 0;
595
596 test_exceptions (test_name, exceptions);
597 noTests++;
598 if (abs (diff) <= max_ulp)
599 ok = 1;
600
601 if (!ok)
602 print_ulps (test_name, diff);
603
604 if (print_screen (ok, xfail))
605 {
606 if (!ok)
607 printf ("Failure: ");
608 printf ("Test: %s\n", test_name);
609 printf ("Result:\n");
610 printf (" is: %d\n", computed);
611 printf (" should be: %d\n", expected);
612 }
613
614 update_stats (ok, xfail);
615 fpstack_test (test_name);
616}
617
618
619/* Check that computed and expected values are equal (long int values). */
620static void
621check_long (const char *test_name, long int computed, long int expected,
622 long int max_ulp, int xfail, int exceptions)
623{
624 long int diff = computed - expected;
625 int ok = 0;
626
627 test_exceptions (test_name, exceptions);
628 noTests++;
629 if (labs (diff) <= max_ulp)
630 ok = 1;
631
632 if (!ok)
633 print_ulps (test_name, diff);
634
635 if (print_screen (ok, xfail))
636 {
637 if (!ok)
638 printf ("Failure: ");
639 printf ("Test: %s\n", test_name);
640 printf ("Result:\n");
641 printf (" is: %ld\n", computed);
642 printf (" should be: %ld\n", expected);
643 }
644
645 update_stats (ok, xfail);
646 fpstack_test (test_name);
647}
648
649
650/* Check that computed value is true/false. */
651static void
652check_bool (const char *test_name, int computed, int expected,
653 long int max_ulp, int xfail, int exceptions)
654{
655 int ok = 0;
656
657 test_exceptions (test_name, exceptions);
658 noTests++;
659 if ((computed == 0) == (expected == 0))
660 ok = 1;
661
662 if (print_screen (ok, xfail))
663 {
664 if (!ok)
665 printf ("Failure: ");
666 printf ("Test: %s\n", test_name);
667 printf ("Result:\n");
668 printf (" is: %d\n", computed);
669 printf (" should be: %d\n", expected);
670 }
671
672 update_stats (ok, xfail);
673 fpstack_test (test_name);
674}
675
676
677/* check that computed and expected values are equal (long int values) */
678static void
679check_longlong (const char *test_name, long long int computed,
680 long long int expected,
681 long long int max_ulp, int xfail,
682 int exceptions)
683{
684 long long int diff = computed - expected;
685 int ok = 0;
686
687 test_exceptions (test_name, exceptions);
688 noTests++;
689 if (llabs (diff) <= max_ulp)
690 ok = 1;
691
692 if (!ok)
693 print_ulps (test_name, diff);
694
695 if (print_screen (ok, xfail))
696 {
697 if (!ok)
698 printf ("Failure:");
699 printf ("Test: %s\n", test_name);
700 printf ("Result:\n");
701 printf (" is: %lld\n", computed);
702 printf (" should be: %lld\n", expected);
703 }
704
705 update_stats (ok, xfail);
706 fpstack_test (test_name);
707}
708
709
710
711/* This is to prevent messages from the SVID libm emulation. */
712int
713matherr (struct exception *x __attribute__ ((unused)))
714{
715 return 1;
716}
717
718
719/****************************************************************************
720 Tests for single functions of libm.
721 Please keep them alphabetically sorted!
722****************************************************************************/
723
724static void
725acos_test (void)
726{
e6d3c4a7
AJ
727 errno = 0;
728 FUNC(acos) (0);
729 if (errno == ENOSYS)
730 /* Function not implemented. */
731 return;
732
8847214f
UD
733 START (acos);
734
735 TEST_f_f (acos, plus_infty, nan_value, INVALID_EXCEPTION);
736 TEST_f_f (acos, minus_infty, nan_value, INVALID_EXCEPTION);
737 TEST_f_f (acos, nan_value, nan_value);
738
739 /* |x| > 1: */
2550dfe9
AJ
740 TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
741 TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
8847214f
UD
742
743 TEST_f_f (acos, 0, M_PI_2l);
744 TEST_f_f (acos, minus_zero, M_PI_2l);
745 TEST_f_f (acos, 1, 0);
746 TEST_f_f (acos, -1, M_PIl);
747 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
748 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
2550dfe9
AJ
749 TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
750 TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
96d10bdf 751 TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
8847214f
UD
752 END (acos);
753}
754
755static void
756acosh_test (void)
757{
aaca11d8
UD
758 errno = 0;
759 FUNC(acosh) (7);
760 if (errno == ENOSYS)
761 /* Function not implemented. */
762 return;
763
8847214f
UD
764 START (acosh);
765
766 TEST_f_f (acosh, plus_infty, plus_infty);
767 TEST_f_f (acosh, minus_infty, nan_value, INVALID_EXCEPTION);
768
769 /* x < 1: */
2550dfe9 770 TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
8847214f
UD
771
772 TEST_f_f (acosh, 1, 0);
2550dfe9 773 TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
8847214f
UD
774
775 END (acosh);
776}
777
778static void
779asin_test (void)
780{
e6d3c4a7
AJ
781 errno = 0;
782 FUNC(asin) (0);
783 if (errno == ENOSYS)
784 /* Function not implemented. */
785 return;
8847214f
UD
786
787 START (asin);
788
789 TEST_f_f (asin, plus_infty, nan_value, INVALID_EXCEPTION);
790 TEST_f_f (asin, minus_infty, nan_value, INVALID_EXCEPTION);
791 TEST_f_f (asin, nan_value, nan_value);
792
793 /* asin x == NaN plus invalid exception for |x| > 1. */
2550dfe9
AJ
794 TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
795 TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
8847214f
UD
796
797 TEST_f_f (asin, 0, 0);
798 TEST_f_f (asin, minus_zero, minus_zero);
799 TEST_f_f (asin, 0.5, M_PI_6l);
800 TEST_f_f (asin, -0.5, -M_PI_6l);
801 TEST_f_f (asin, 1.0, M_PI_2l);
802 TEST_f_f (asin, -1.0, -M_PI_2l);
2550dfe9 803 TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
8847214f
UD
804
805 END (asin);
806}
807
808static void
809asinh_test (void)
810{
aaca11d8 811 errno = 0;
3c6cad26 812 FUNC(asinh) (0.7L);
aaca11d8
UD
813 if (errno == ENOSYS)
814 /* Function not implemented. */
815 return;
816
8847214f
UD
817 START (asinh);
818
819 TEST_f_f (asinh, 0, 0);
820 TEST_f_f (asinh, minus_zero, minus_zero);
15daa639 821#ifndef TEST_INLINE
8847214f
UD
822 TEST_f_f (asinh, plus_infty, plus_infty);
823 TEST_f_f (asinh, minus_infty, minus_infty);
15daa639
UD
824#endif
825 TEST_f_f (asinh, nan_value, nan_value);
2550dfe9 826 TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
8847214f
UD
827
828 END (asinh);
829}
830
831static void
832atan_test (void)
833{
e6d3c4a7
AJ
834 errno = 0;
835 FUNC(atan) (0);
836 if (errno == ENOSYS)
837 /* Function not implemented. */
838 return;
8847214f
UD
839
840 START (atan);
841
842 TEST_f_f (atan, 0, 0);
843 TEST_f_f (atan, minus_zero, minus_zero);
844
845 TEST_f_f (atan, plus_infty, M_PI_2l);
846 TEST_f_f (atan, minus_infty, -M_PI_2l);
15daa639 847 TEST_f_f (atan, nan_value, nan_value);
8847214f
UD
848
849 TEST_f_f (atan, 1, M_PI_4l);
850 TEST_f_f (atan, -1, -M_PI_4l);
851
2550dfe9 852 TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
8847214f
UD
853
854 END (atan);
855}
856
857
858
859static void
860atanh_test (void)
861{
aaca11d8 862 errno = 0;
3c6cad26 863 FUNC(atanh) (0.7L);
aaca11d8
UD
864 if (errno == ENOSYS)
865 /* Function not implemented. */
866 return;
8847214f
UD
867
868 START (atanh);
869
870
871 TEST_f_f (atanh, 0, 0);
872 TEST_f_f (atanh, minus_zero, minus_zero);
873
874 TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
875 TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
15daa639 876 TEST_f_f (atanh, nan_value, nan_value);
8847214f
UD
877
878 /* atanh (x) == NaN plus invalid exception if |x| > 1. */
2550dfe9
AJ
879 TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
880 TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
8847214f 881
2550dfe9 882 TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
8847214f
UD
883
884 END (atanh);
885}
886
887static void
888atan2_test (void)
889{
aaca11d8
UD
890 errno = 0;
891 FUNC(atan2) (-0, 1);
892 if (errno == ENOSYS)
893 /* Function not implemented. */
894 return;
895
8847214f
UD
896 START (atan2);
897
898 /* atan2 (0,x) == 0 for x > 0. */
899 TEST_ff_f (atan2, 0, 1, 0);
900
901 /* atan2 (-0,x) == -0 for x > 0. */
902 TEST_ff_f (atan2, minus_zero, 1, minus_zero);
903
904 TEST_ff_f (atan2, 0, 0, 0);
905 TEST_ff_f (atan2, minus_zero, 0, minus_zero);
906
907 /* atan2 (+0,x) == +pi for x < 0. */
908 TEST_ff_f (atan2, 0, -1, M_PIl);
909
910 /* atan2 (-0,x) == -pi for x < 0. */
911 TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
912
913 TEST_ff_f (atan2, 0, minus_zero, M_PIl);
914 TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
915
916 /* atan2 (y,+0) == pi/2 for y > 0. */
917 TEST_ff_f (atan2, 1, 0, M_PI_2l);
918
919 /* atan2 (y,-0) == pi/2 for y > 0. */
920 TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
921
922 /* atan2 (y,+0) == -pi/2 for y < 0. */
923 TEST_ff_f (atan2, -1, 0, -M_PI_2l);
924
925 /* atan2 (y,-0) == -pi/2 for y < 0. */
926 TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
927
928 /* atan2 (y,inf) == +0 for finite y > 0. */
929 TEST_ff_f (atan2, 1, plus_infty, 0);
930
931 /* atan2 (y,inf) == -0 for finite y < 0. */
932 TEST_ff_f (atan2, -1, plus_infty, minus_zero);
933
934 /* atan2(+inf, x) == pi/2 for finite x. */
935 TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
936
937 /* atan2(-inf, x) == -pi/2 for finite x. */
938 TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
939
940 /* atan2 (y,-inf) == +pi for finite y > 0. */
941 TEST_ff_f (atan2, 1, minus_infty, M_PIl);
942
943 /* atan2 (y,-inf) == -pi for finite y < 0. */
944 TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
945
946 TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
947 TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
948 TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
949 TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
15daa639 950 TEST_ff_f (atan2, nan_value, nan_value, nan_value);
8847214f 951
7726d6a9
JM
952 TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
953
2550dfe9
AJ
954 TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
955 TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
956 TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
957 TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
958 TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
959 TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
8847214f 960
3c8605c7 961 TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
bb3f4825 962
8847214f
UD
963 END (atan2);
964}
965
8847214f
UD
966static void
967cabs_test (void)
968{
aaca11d8 969 errno = 0;
3c6cad26 970 FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
aaca11d8
UD
971 if (errno == ENOSYS)
972 /* Function not implemented. */
973 return;
974
8847214f
UD
975 START (cabs);
976
977 /* cabs (x + iy) is specified as hypot (x,y) */
978
979 /* cabs (+inf + i x) == +inf. */
980 TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
981 /* cabs (-inf + i x) == +inf. */
982 TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
983
984 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
985 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
986
987 TEST_c_f (cabs, nan_value, nan_value, nan_value);
988
989 /* cabs (x,y) == cabs (y,x). */
2550dfe9 990 TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
8847214f 991 /* cabs (x,y) == cabs (-x,y). */
2550dfe9 992 TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
8847214f 993 /* cabs (x,y) == cabs (-y,x). */
2550dfe9 994 TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
8847214f 995 /* cabs (x,y) == cabs (-x,-y). */
2550dfe9 996 TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
8847214f 997 /* cabs (x,y) == cabs (-y,-x). */
2550dfe9 998 TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
8847214f 999 /* cabs (x,0) == fabs (x). */
2550dfe9
AJ
1000 TEST_c_f (cabs, -0.75L, 0, 0.75L);
1001 TEST_c_f (cabs, 0.75L, 0, 0.75L);
8847214f
UD
1002 TEST_c_f (cabs, -1.0L, 0, 1.0L);
1003 TEST_c_f (cabs, 1.0L, 0, 1.0L);
1004 TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1005 TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1006
2550dfe9 1007 TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
8847214f
UD
1008
1009 END (cabs);
1010}
1011
2550dfe9 1012
8847214f
UD
1013static void
1014cacos_test (void)
1015{
aaca11d8 1016 errno = 0;
3c6cad26 1017 FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1018 if (errno == ENOSYS)
1019 /* Function not implemented. */
1020 return;
1021
8847214f
UD
1022 START (cacos);
1023
1024
1025 TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1026 TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1027 TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1028 TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1029
1030 TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1031 TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1032
1033 TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1034 TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1035
1036 TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1037 TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1038 TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1039 TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
3c6cad26
UD
1040 TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1041 TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
8847214f
UD
1042
1043 TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1044 TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1045 TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1046 TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1047
1048 TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1049 TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1050 TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1051 TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1052
1053 TEST_c_c (cacos, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1054 TEST_c_c (cacos, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1055
1056 TEST_c_c (cacos, 0, nan_value, M_PI_2l, nan_value);
1057 TEST_c_c (cacos, minus_zero, nan_value, M_PI_2l, nan_value);
1058
1059 TEST_c_c (cacos, nan_value, plus_infty, nan_value, minus_infty);
1060 TEST_c_c (cacos, nan_value, minus_infty, nan_value, plus_infty);
1061
1062 TEST_c_c (cacos, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1063 TEST_c_c (cacos, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1064
1065 TEST_c_c (cacos, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1066 TEST_c_c (cacos, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1067
1068 TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
1069
d1d3431a
JM
1070 TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1071 TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1072 TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1073 TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1074 TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1075 TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1076 TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1077 TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1078 TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1079 TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1080 TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1081 TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1082
1083 TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1084 TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1085 TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1086 TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1087 TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1088 TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1089 TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1090 TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1091 TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1092 TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1093 TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1094 TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1095
2550dfe9 1096 TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
33e885db 1097 TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
8847214f 1098
6815fabc 1099 END (cacos, complex);
8847214f
UD
1100}
1101
8847214f
UD
1102static void
1103cacosh_test (void)
1104{
aaca11d8 1105 errno = 0;
3c6cad26 1106 FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1107 if (errno == ENOSYS)
1108 /* Function not implemented. */
1109 return;
1110
8847214f
UD
1111 START (cacosh);
1112
1113
1114 TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
1115 TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
1116 TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
1117 TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
1118 TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
1119 TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1120
1121 TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1122 TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1123
1124 TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
1125 TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
1126 TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
1127 TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
3c6cad26
UD
1128 TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1129 TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
8847214f
UD
1130
1131 TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
1132 TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
1133 TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
1134 TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
1135
1136 TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
1137 TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
1138 TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
1139 TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
1140
1141 TEST_c_c (cacosh, plus_infty, nan_value, plus_infty, nan_value);
1142 TEST_c_c (cacosh, minus_infty, nan_value, plus_infty, nan_value);
1143
1144 TEST_c_c (cacosh, 0, nan_value, nan_value, nan_value);
1145 TEST_c_c (cacosh, minus_zero, nan_value, nan_value, nan_value);
1146
1147 TEST_c_c (cacosh, nan_value, plus_infty, plus_infty, nan_value);
1148 TEST_c_c (cacosh, nan_value, minus_infty, plus_infty, nan_value);
1149
1150 TEST_c_c (cacosh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1151 TEST_c_c (cacosh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1152
1153 TEST_c_c (cacosh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1154 TEST_c_c (cacosh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1155
1156 TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
1157
d1d3431a
JM
1158 TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1159 TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1160 TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1161 TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1162 TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1163 TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1164 TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1165 TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1166 TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1167 TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1168 TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1169 TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1170
1171 TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
1172 TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
1173 TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
1174 TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
1175 TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
1176 TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
1177 TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
1178 TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
1179 TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
1180 TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
1181 TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
1182 TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
1183
2550dfe9 1184 TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
4f7e7f8e 1185 TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
8847214f 1186
6815fabc 1187 END (cacosh, complex);
8847214f
UD
1188}
1189
2550dfe9 1190
8847214f
UD
1191static void
1192carg_test (void)
1193{
1194 START (carg);
1195
1196 /* carg (x + iy) is specified as atan2 (y, x) */
1197
1198 /* carg (x + i 0) == 0 for x > 0. */
1199 TEST_c_f (carg, 2.0, 0, 0);
1200 /* carg (x - i 0) == -0 for x > 0. */
1201 TEST_c_f (carg, 2.0, minus_zero, minus_zero);
1202
1203 TEST_c_f (carg, 0, 0, 0);
1204 TEST_c_f (carg, 0, minus_zero, minus_zero);
1205
1206 /* carg (x + i 0) == +pi for x < 0. */
1207 TEST_c_f (carg, -2.0, 0, M_PIl);
1208
1209 /* carg (x - i 0) == -pi for x < 0. */
1210 TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
1211
1212 TEST_c_f (carg, minus_zero, 0, M_PIl);
1213 TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
1214
1215 /* carg (+0 + i y) == pi/2 for y > 0. */
1216 TEST_c_f (carg, 0, 2.0, M_PI_2l);
1217
1218 /* carg (-0 + i y) == pi/2 for y > 0. */
1219 TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
1220
1221 /* carg (+0 + i y) == -pi/2 for y < 0. */
1222 TEST_c_f (carg, 0, -2.0, -M_PI_2l);
1223
1224 /* carg (-0 + i y) == -pi/2 for y < 0. */
1225 TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
1226
1227 /* carg (inf + i y) == +0 for finite y > 0. */
1228 TEST_c_f (carg, plus_infty, 2.0, 0);
1229
1230 /* carg (inf + i y) == -0 for finite y < 0. */
1231 TEST_c_f (carg, plus_infty, -2.0, minus_zero);
1232
1233 /* carg(x + i inf) == pi/2 for finite x. */
1234 TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
1235
1236 /* carg(x - i inf) == -pi/2 for finite x. */
1237 TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
1238
1239 /* carg (-inf + i y) == +pi for finite y > 0. */
1240 TEST_c_f (carg, minus_infty, 10.0, M_PIl);
1241
1242 /* carg (-inf + i y) == -pi for finite y < 0. */
1243 TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
1244
1245 TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
1246
1247 TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
1248
1249 TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
1250
1251 TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
1252
15daa639
UD
1253 TEST_c_f (carg, nan_value, nan_value, nan_value);
1254
8847214f
UD
1255 END (carg);
1256}
1257
1258static void
1259casin_test (void)
1260{
aaca11d8 1261 errno = 0;
3c6cad26 1262 FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1263 if (errno == ENOSYS)
1264 /* Function not implemented. */
1265 return;
1266
8847214f
UD
1267 START (casin);
1268
1269 TEST_c_c (casin, 0, 0, 0.0, 0.0);
1270 TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
1271 TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
1272 TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
1273
1274 TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
1275 TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
1276 TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
1277 TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
1278
1279 TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
1280 TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
1281 TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
1282 TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
1283 TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
1284 TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
3c6cad26
UD
1285 TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
1286 TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
8847214f
UD
1287
1288 TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
1289 TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
1290 TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
1291 TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
1292
1293 TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
1294 TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
1295 TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
1296 TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
1297
1298 TEST_c_c (casin, nan_value, plus_infty, nan_value, plus_infty);
1299 TEST_c_c (casin, nan_value, minus_infty, nan_value, minus_infty);
1300
1301 TEST_c_c (casin, 0.0, nan_value, 0.0, nan_value);
1302 TEST_c_c (casin, minus_zero, nan_value, minus_zero, nan_value);
1303
1304 TEST_c_c (casin, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1305 TEST_c_c (casin, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1306
1307 TEST_c_c (casin, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1308 TEST_c_c (casin, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1309
1310 TEST_c_c (casin, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1311 TEST_c_c (casin, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1312
1313 TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
1314
d1d3431a
JM
1315 TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
1316 TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
1317 TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
1318 TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
1319 TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
1320 TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
1321 TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
1322 TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
1323 TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
1324 TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
1325 TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
1326 TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
1327
1328 TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
1329 TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
1330 TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
1331 TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
1332 TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
1333 TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
1334 TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
1335 TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
1336 TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
1337 TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
1338 TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
1339 TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
1340
2550dfe9 1341 TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
33e885db 1342 TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
8847214f 1343
6815fabc 1344 END (casin, complex);
8847214f
UD
1345}
1346
1347
1348static void
1349casinh_test (void)
1350{
aaca11d8 1351 errno = 0;
3c6cad26 1352 FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1353 if (errno == ENOSYS)
1354 /* Function not implemented. */
1355 return;
1356
8847214f
UD
1357 START (casinh);
1358
1359 TEST_c_c (casinh, 0, 0, 0.0, 0.0);
1360 TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
1361 TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
1362 TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
1363
1364 TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1365 TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1366 TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
1367 TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
1368
1369 TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
1370 TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
1371 TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
1372 TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
1373 TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
1374 TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3c6cad26
UD
1375 TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1376 TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
8847214f
UD
1377
1378 TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
1379 TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
1380 TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
1381 TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
1382
1383 TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
1384 TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
1385 TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
1386 TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
1387
1388 TEST_c_c (casinh, plus_infty, nan_value, plus_infty, nan_value);
1389 TEST_c_c (casinh, minus_infty, nan_value, minus_infty, nan_value);
1390
1391 TEST_c_c (casinh, nan_value, 0, nan_value, 0.0);
1392 TEST_c_c (casinh, nan_value, minus_zero, nan_value, minus_zero);
1393
1394 TEST_c_c (casinh, nan_value, plus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1395 TEST_c_c (casinh, nan_value, minus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1396
1397 TEST_c_c (casinh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1398 TEST_c_c (casinh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1399
1400 TEST_c_c (casinh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1401 TEST_c_c (casinh, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1402
1403 TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
1404
d1d3431a
JM
1405 TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
1406 TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
1407 TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
1408 TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
1409 TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
1410 TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
1411 TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
1412 TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
1413 TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
1414 TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
1415 TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
1416 TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
1417
1418 TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
1419 TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
1420 TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
1421 TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
1422 TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
1423 TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
1424 TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
1425 TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
1426 TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
1427 TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
1428 TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
1429 TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
1430
2550dfe9 1431 TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
33e885db 1432 TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
8847214f 1433
6815fabc 1434 END (casinh, complex);
8847214f
UD
1435}
1436
1437
1438static void
1439catan_test (void)
1440{
aaca11d8 1441 errno = 0;
3c6cad26 1442 FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1443 if (errno == ENOSYS)
1444 /* Function not implemented. */
1445 return;
1446
8847214f
UD
1447 START (catan);
1448
1449 TEST_c_c (catan, 0, 0, 0, 0);
1450 TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
1451 TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
1452 TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
1453
1454 TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
1455 TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
1456 TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
1457 TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
1458
1459
1460 TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
1461 TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
1462 TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
1463 TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
1464 TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
1465 TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
3c6cad26
UD
1466 TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
1467 TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
8847214f
UD
1468
1469 TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
1470 TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
1471 TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
1472 TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
1473
1474 TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
1475 TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
1476 TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
1477 TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
1478
1479 TEST_c_c (catan, nan_value, 0.0, nan_value, 0);
1480 TEST_c_c (catan, nan_value, minus_zero, nan_value, minus_zero);
1481
1482 TEST_c_c (catan, nan_value, plus_infty, nan_value, 0);
1483 TEST_c_c (catan, nan_value, minus_infty, nan_value, minus_zero);
1484
1485 TEST_c_c (catan, 0.0, nan_value, nan_value, nan_value);
1486 TEST_c_c (catan, minus_zero, nan_value, nan_value, nan_value);
1487
1488 TEST_c_c (catan, plus_infty, nan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1489 TEST_c_c (catan, minus_infty, nan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1490
1491 TEST_c_c (catan, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1492 TEST_c_c (catan, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1493
1494 TEST_c_c (catan, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1495 TEST_c_c (catan, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1496
1497 TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value);
1498
2550dfe9 1499 TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
33e885db 1500 TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
8847214f 1501
6815fabc 1502 END (catan, complex);
8847214f
UD
1503}
1504
1505static void
1506catanh_test (void)
1507{
aaca11d8 1508 errno = 0;
3c6cad26 1509 FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1510 if (errno == ENOSYS)
1511 /* Function not implemented. */
1512 return;
1513
8847214f
UD
1514 START (catanh);
1515
1516 TEST_c_c (catanh, 0, 0, 0.0, 0.0);
1517 TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
1518 TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
1519 TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
1520
1521 TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
1522 TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
1523 TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
1524 TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
1525
1526 TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
1527 TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
1528 TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
1529 TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
1530 TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
1531 TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
3c6cad26
UD
1532 TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
1533 TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
8847214f
UD
1534
1535 TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
1536 TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
1537 TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
1538 TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
1539
1540 TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
1541 TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
1542 TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
1543 TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
1544
1545 TEST_c_c (catanh, 0, nan_value, 0.0, nan_value);
1546 TEST_c_c (catanh, minus_zero, nan_value, minus_zero, nan_value);
1547
1548 TEST_c_c (catanh, plus_infty, nan_value, 0.0, nan_value);
1549 TEST_c_c (catanh, minus_infty, nan_value, minus_zero, nan_value);
1550
1551 TEST_c_c (catanh, nan_value, 0, nan_value, nan_value);
1552 TEST_c_c (catanh, nan_value, minus_zero, nan_value, nan_value);
1553
1554 TEST_c_c (catanh, nan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
1555 TEST_c_c (catanh, nan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
1556
1557 TEST_c_c (catanh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1558 TEST_c_c (catanh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1559
1560 TEST_c_c (catanh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1561 TEST_c_c (catanh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1562
1563 TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value);
1564
2550dfe9 1565 TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
33e885db 1566 TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
8847214f 1567
6815fabc 1568 END (catanh, complex);
8847214f
UD
1569}
1570
1571static void
1572cbrt_test (void)
1573{
42be70d4
UD
1574 errno = 0;
1575 FUNC(cbrt) (8);
1576 if (errno == ENOSYS)
1577 /* Function not implemented. */
1578 return;
1579
8847214f
UD
1580 START (cbrt);
1581
1582 TEST_f_f (cbrt, 0.0, 0.0);
1583 TEST_f_f (cbrt, minus_zero, minus_zero);
1584
1585 TEST_f_f (cbrt, plus_infty, plus_infty);
1586 TEST_f_f (cbrt, minus_infty, minus_infty);
1587 TEST_f_f (cbrt, nan_value, nan_value);
1588
3c6cad26 1589 TEST_f_f (cbrt, -0.001L, -0.1L);
8847214f
UD
1590 TEST_f_f (cbrt, 8, 2);
1591 TEST_f_f (cbrt, -27.0, -3.0);
2550dfe9
AJ
1592 TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
1593 TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
8847214f
UD
1594
1595 END (cbrt);
1596}
1597
2550dfe9 1598
8847214f
UD
1599static void
1600ccos_test (void)
1601{
aaca11d8
UD
1602 errno = 0;
1603 FUNC(ccos) (BUILD_COMPLEX (0, 0));
1604 if (errno == ENOSYS)
1605 /* Function not implemented. */
1606 return;
8847214f
UD
1607
1608 START (ccos);
1609
1610 TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
1611 TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
1612 TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
1613 TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
1614
1615 TEST_c_c (ccos, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1616 TEST_c_c (ccos, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1617 TEST_c_c (ccos, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1618 TEST_c_c (ccos, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1619
1620 TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
1621 TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
1622 TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
1623 TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
1624
1625 TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1626 TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1627 TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1628 TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1629
1630 TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
1631 TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
1632 TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
1633 TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
1634
1635 TEST_c_c (ccos, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1636 TEST_c_c (ccos, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1637 TEST_c_c (ccos, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1638 TEST_c_c (ccos, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1639
1640 TEST_c_c (ccos, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1641 TEST_c_c (ccos, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1642
1643 TEST_c_c (ccos, nan_value, plus_infty, plus_infty, nan_value);
1644 TEST_c_c (ccos, nan_value, minus_infty, plus_infty, nan_value);
1645
1646 TEST_c_c (ccos, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1647 TEST_c_c (ccos, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1648
1649 TEST_c_c (ccos, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1650 TEST_c_c (ccos, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1651
1652 TEST_c_c (ccos, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1653 TEST_c_c (ccos, -10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1654
1655 TEST_c_c (ccos, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1656 TEST_c_c (ccos, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1657
1658 TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
1659
2550dfe9 1660 TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
79df8ce5 1661 TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
8847214f 1662
6815fabc 1663 END (ccos, complex);
8847214f
UD
1664}
1665
1666
1667static void
1668ccosh_test (void)
1669{
aaca11d8 1670 errno = 0;
3c6cad26 1671 FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1672 if (errno == ENOSYS)
1673 /* Function not implemented. */
1674 return;
8847214f
UD
1675
1676 START (ccosh);
1677
1678 TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
1679 TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
1680 TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
1681 TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
1682
1683 TEST_c_c (ccosh, 0.0, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1684 TEST_c_c (ccosh, minus_zero, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1685 TEST_c_c (ccosh, 0.0, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1686 TEST_c_c (ccosh, minus_zero, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1687
1688 TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
1689 TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
1690 TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
1691 TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
1692
1693 TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1694 TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1695 TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1696 TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1697
1698 TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
1699 TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
1700 TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
1701 TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
1702
1703 TEST_c_c (ccosh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1704 TEST_c_c (ccosh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1705 TEST_c_c (ccosh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1706 TEST_c_c (ccosh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1707
1708 TEST_c_c (ccosh, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1709 TEST_c_c (ccosh, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1710
1711 TEST_c_c (ccosh, plus_infty, nan_value, plus_infty, nan_value);
1712 TEST_c_c (ccosh, minus_infty, nan_value, plus_infty, nan_value);
1713
1714 TEST_c_c (ccosh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1715 TEST_c_c (ccosh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1716
1717 TEST_c_c (ccosh, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1718 TEST_c_c (ccosh, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1719
1720 TEST_c_c (ccosh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1721 TEST_c_c (ccosh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1722
1723 TEST_c_c (ccosh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1724 TEST_c_c (ccosh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1725
1726 TEST_c_c (ccosh, nan_value, nan_value, nan_value, nan_value);
1727
2550dfe9 1728 TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
8847214f 1729
79df8ce5 1730 TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
8847214f 1731
6815fabc 1732 END (ccosh, complex);
8847214f
UD
1733}
1734
1735
1736static void
1737ceil_test (void)
1738{
1739 START (ceil);
1740
1741 TEST_f_f (ceil, 0.0, 0.0);
1742 TEST_f_f (ceil, minus_zero, minus_zero);
1743 TEST_f_f (ceil, plus_infty, plus_infty);
1744 TEST_f_f (ceil, minus_infty, minus_infty);
15daa639 1745 TEST_f_f (ceil, nan_value, nan_value);
8847214f
UD
1746
1747 TEST_f_f (ceil, M_PIl, 4.0);
1748 TEST_f_f (ceil, -M_PIl, -3.0);
5c68d401 1749 TEST_f_f (ceil, 0.1, 1.0);
45740f46 1750 TEST_f_f (ceil, 0.25, 1.0);
5c68d401
RM
1751 TEST_f_f (ceil, 0.625, 1.0);
1752 TEST_f_f (ceil, -0.1, minus_zero);
97fd3a30 1753 TEST_f_f (ceil, -0.25, minus_zero);
5c68d401 1754 TEST_f_f (ceil, -0.625, minus_zero);
8847214f 1755
f964490f
RM
1756#ifdef TEST_LDOUBLE
1757 /* The result can only be represented in long double. */
1758 TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
1759 TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
1760 TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
1761 TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
1762 TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
1763
1764 TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
1765 TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
1766 TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
1767 TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
1768 TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
1769
5c68d401
RM
1770# if LDBL_MANT_DIG > 100
1771 TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
1772 TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
1773 TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
1774 TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
1775 TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
1776 TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
1777# endif
1778
f964490f
RM
1779 TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
1780 TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
1781 TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
1782 TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
1783 TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
1784
1785 TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
1786 TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
1787 TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
1788 TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
1789 TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
1790
5c68d401
RM
1791# if LDBL_MANT_DIG > 100
1792 TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
1793 TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
1794 TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
1795 TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
1796 TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
1797 TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
1798
1799 TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
1800 TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
1801 TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
1802 TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
1803 TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
1804 TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
1805# endif
1806
f964490f
RM
1807 TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
1808 TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
1809 TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
1810 TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
1811 TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
1812
1813 TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
1814 TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
1815 TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
1816 TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
1817 TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
1818
1819 TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
1820 TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
1821 TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
1822 TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
1823 TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
1824#endif
1825
8847214f
UD
1826 END (ceil);
1827}
1828
1829
1830static void
1831cexp_test (void)
1832{
aaca11d8
UD
1833 errno = 0;
1834 FUNC(cexp) (BUILD_COMPLEX (0, 0));
1835 if (errno == ENOSYS)
1836 /* Function not implemented. */
1837 return;
1838
8847214f
UD
1839 START (cexp);
1840
1841 TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
1842 TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
1843 TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
1844 TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
1845
1846 TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
1847 TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
1848
1849 TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
1850 TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
1851
1852 TEST_c_c (cexp, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1853 TEST_c_c (cexp, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1854
1855 TEST_c_c (cexp, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1856 TEST_c_c (cexp, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1857
1858 TEST_c_c (cexp, 100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1859 TEST_c_c (cexp, -100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1860
1861 TEST_c_c (cexp, 100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1862 TEST_c_c (cexp, -100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1863
1864 TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
1865 TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
1866 TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
1867 TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
1868
1869 TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1870 TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1871
1872 TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
1873 TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
1874
1875 TEST_c_c (cexp, minus_infty, nan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
1876
1877 TEST_c_c (cexp, plus_infty, nan_value, plus_infty, nan_value);
1878
1879 TEST_c_c (cexp, nan_value, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1880 TEST_c_c (cexp, nan_value, 1.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1881
1882 TEST_c_c (cexp, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1883 TEST_c_c (cexp, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1884 TEST_c_c (cexp, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1885 TEST_c_c (cexp, nan_value, nan_value, nan_value, nan_value);
1886
9d0c92b2 1887 TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
d8337213 1888 TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
8847214f 1889
6815fabc 1890 END (cexp, complex);
8847214f
UD
1891}
1892
2550dfe9 1893
0cdc8e6f
UD
1894static void
1895cimag_test (void)
1896{
1897 START (cimag);
1898 TEST_c_f (cimag, 1.0, 0.0, 0.0);
1899 TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
1900 TEST_c_f (cimag, 1.0, nan_value, nan_value);
1901 TEST_c_f (cimag, nan_value, nan_value, nan_value);
1902 TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
1903 TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
1904 TEST_c_f (cimag, 2.0, 3.0, 3.0);
1905
1906 END (cimag);
1907}
1908
8847214f
UD
1909static void
1910clog_test (void)
1911{
aaca11d8
UD
1912 errno = 0;
1913 FUNC(clog) (BUILD_COMPLEX (-2, -3));
1914 if (errno == ENOSYS)
1915 /* Function not implemented. */
1916 return;
1917
8847214f
UD
1918 START (clog);
1919
1920 TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1921 TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1922
1923 TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1924 TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1925
1926 TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
1927 TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1928
1929 TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
1930 TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1931
1932 TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
1933 TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
1934 TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
1935 TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
1936 TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
1937 TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
1938 TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
1939 TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
1940
1941 TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
1942 TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
1943 TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
1944 TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
1945
1946 TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
1947 TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
1948 TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
1949 TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
1950
1951 TEST_c_c (clog, plus_infty, nan_value, plus_infty, nan_value);
1952 TEST_c_c (clog, minus_infty, nan_value, plus_infty, nan_value);
1953
1954 TEST_c_c (clog, nan_value, plus_infty, plus_infty, nan_value);
1955 TEST_c_c (clog, nan_value, minus_infty, plus_infty, nan_value);
1956
1957 TEST_c_c (clog, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1958 TEST_c_c (clog, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1959 TEST_c_c (clog, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1960 TEST_c_c (clog, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1961
1962 TEST_c_c (clog, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1963 TEST_c_c (clog, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1964 TEST_c_c (clog, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1965 TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1966
1967 TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value);
2550dfe9
AJ
1968
1969 TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
33e885db 1970 TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
8847214f 1971
6815fabc 1972 END (clog, complex);
8847214f
UD
1973}
1974
1975
1976static void
1977clog10_test (void)
1978{
aaca11d8 1979 errno = 0;
3c6cad26 1980 FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
1981 if (errno == ENOSYS)
1982 /* Function not implemented. */
1983 return;
1984
8847214f
UD
1985 START (clog10);
1986
1987 TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1988 TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1989
1990 TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1991 TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1992
1993 TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
1994
1995 TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
1996 TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
1997
1998 TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
1999 TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
2000 TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
2001 TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
2002 TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
2003 TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
2004 TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
2005 TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
2006
2007 TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
2008 TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
2009 TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
2010 TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
2011
2012 TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
2013 TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
2014 TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
2015 TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
2016
2017 TEST_c_c (clog10, plus_infty, nan_value, plus_infty, nan_value);
2018 TEST_c_c (clog10, minus_infty, nan_value, plus_infty, nan_value);
2019
2020 TEST_c_c (clog10, nan_value, plus_infty, plus_infty, nan_value);
2021 TEST_c_c (clog10, nan_value, minus_infty, plus_infty, nan_value);
2022
2023 TEST_c_c (clog10, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2024 TEST_c_c (clog10, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2025 TEST_c_c (clog10, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2026 TEST_c_c (clog10, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2027
2028 TEST_c_c (clog10, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2029 TEST_c_c (clog10, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2030 TEST_c_c (clog10, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2031 TEST_c_c (clog10, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2032
2033 TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
2034
2550dfe9 2035 TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
79df8ce5 2036 TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
8847214f 2037
6815fabc 2038 END (clog10, complex);
8847214f
UD
2039}
2040
2550dfe9 2041
0cdc8e6f
UD
2042static void
2043conj_test (void)
2044{
2045 START (conj);
2046 TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
2047 TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
2048 TEST_c_c (conj, nan_value, nan_value, nan_value, nan_value);
2049 TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
2050 TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
2051 TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
2052 TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
2053
2054 END (conj, complex);
2055}
2056
2057
8847214f
UD
2058static void
2059copysign_test (void)
2060{
2061 START (copysign);
2062
2063 TEST_ff_f (copysign, 0, 4, 0);
2064 TEST_ff_f (copysign, 0, -4, minus_zero);
2065 TEST_ff_f (copysign, minus_zero, 4, 0);
2066 TEST_ff_f (copysign, minus_zero, -4, minus_zero);
2067
2068 TEST_ff_f (copysign, plus_infty, 0, plus_infty);
2069 TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
2070 TEST_ff_f (copysign, minus_infty, 0, plus_infty);
2071 TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
2072
2073 TEST_ff_f (copysign, 0, plus_infty, 0);
2074 TEST_ff_f (copysign, 0, minus_zero, minus_zero);
2075 TEST_ff_f (copysign, minus_zero, plus_infty, 0);
2076 TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
2077
2078 /* XXX More correctly we would have to check the sign of the NaN. */
2079 TEST_ff_f (copysign, nan_value, 0, nan_value);
2080 TEST_ff_f (copysign, nan_value, minus_zero, nan_value);
2081 TEST_ff_f (copysign, -nan_value, 0, nan_value);
2082 TEST_ff_f (copysign, -nan_value, minus_zero, nan_value);
2083
2084 END (copysign);
2085}
2086
2550dfe9 2087
8847214f
UD
2088static void
2089cos_test (void)
2090{
e6d3c4a7
AJ
2091 errno = 0;
2092 FUNC(cos) (0);
2093 if (errno == ENOSYS)
2094 /* Function not implemented. */
2095 return;
2096
8847214f
UD
2097 START (cos);
2098
2099 TEST_f_f (cos, 0, 1);
2100 TEST_f_f (cos, minus_zero, 1);
0c59a196 2101 errno = 0;
8847214f 2102 TEST_f_f (cos, plus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
2103 check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
2104 errno = 0;
8847214f 2105 TEST_f_f (cos, minus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
2106 check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
2107 errno = 0;
15daa639 2108 TEST_f_f (cos, nan_value, nan_value);
0c59a196 2109 check_int ("errno for cos(NaN) unchanged", errno, 0, 0, 0, 0);
8847214f
UD
2110
2111 TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
2112 TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
2113 TEST_f_f (cos, M_PI_2l, 0);
2114
2550dfe9 2115 TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
8847214f 2116
ea40808a
AJ
2117 TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
2118 TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
8c0247db 2119
d32e4346
RM
2120#ifdef TEST_DOUBLE
2121 TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
8848d99d
JM
2122#endif
2123
2124#ifndef TEST_FLOAT
2125 TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
2126 TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
2127#endif
2128
2129#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2130 TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
d32e4346
RM
2131#endif
2132
8847214f
UD
2133 END (cos);
2134}
2135
2550dfe9 2136
804360ed
JM
2137static void
2138cos_test_tonearest (void)
2139{
2140 int save_round_mode;
2141 errno = 0;
2142 FUNC(cos) (0);
2143 if (errno == ENOSYS)
2144 /* Function not implemented. */
2145 return;
2146
2147 START (cos_tonearest);
2148
2149 save_round_mode = fegetround ();
2150
2151 if (!fesetround (FE_TONEAREST))
2152 {
2153 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2154 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2155 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2156 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2157 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2158 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2159 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2160 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2161 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2162 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2163 }
2164
2165 fesetround (save_round_mode);
2166
2167 END (cos_tonearest);
2168}
2169
2170
2171static void
2172cos_test_towardzero (void)
2173{
2174 int save_round_mode;
2175 errno = 0;
2176 FUNC(cos) (0);
2177 if (errno == ENOSYS)
2178 /* Function not implemented. */
2179 return;
2180
2181 START (cos_towardzero);
2182
2183 save_round_mode = fegetround ();
2184
2185 if (!fesetround (FE_TOWARDZERO))
2186 {
2187 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2188 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2189 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2190 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2191 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2192 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2193 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2194 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2195 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2196 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2197 }
2198
2199 fesetround (save_round_mode);
2200
2201 END (cos_towardzero);
2202}
2203
2204
2205static void
2206cos_test_downward (void)
2207{
2208 int save_round_mode;
2209 errno = 0;
2210 FUNC(cos) (0);
2211 if (errno == ENOSYS)
2212 /* Function not implemented. */
2213 return;
2214
2215 START (cos_downward);
2216
2217 save_round_mode = fegetround ();
2218
2219 if (!fesetround (FE_DOWNWARD))
2220 {
2221 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2222 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2223 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2224 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2225 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2226 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2227 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2228 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2229 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2230 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2231 }
2232
2233 fesetround (save_round_mode);
2234
2235 END (cos_downward);
2236}
2237
2238
2239static void
2240cos_test_upward (void)
2241{
2242 int save_round_mode;
2243 errno = 0;
2244 FUNC(cos) (0);
2245 if (errno == ENOSYS)
2246 /* Function not implemented. */
2247 return;
2248
2249 START (cos_upward);
2250
2251 save_round_mode = fegetround ();
2252
2253 if (!fesetround (FE_UPWARD))
2254 {
2255 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2256 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2257 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2258 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2259 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2260 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2261 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2262 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2263 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2264 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2265 }
2266
2267 fesetround (save_round_mode);
2268
2269 END (cos_upward);
2270}
2271
2272
8847214f
UD
2273static void
2274cosh_test (void)
2275{
aaca11d8 2276 errno = 0;
3c6cad26 2277 FUNC(cosh) (0.7L);
aaca11d8
UD
2278 if (errno == ENOSYS)
2279 /* Function not implemented. */
2280 return;
2281
8847214f
UD
2282 START (cosh);
2283 TEST_f_f (cosh, 0, 1);
2284 TEST_f_f (cosh, minus_zero, 1);
2285
15daa639 2286#ifndef TEST_INLINE
8847214f
UD
2287 TEST_f_f (cosh, plus_infty, plus_infty);
2288 TEST_f_f (cosh, minus_infty, plus_infty);
15daa639
UD
2289#endif
2290 TEST_f_f (cosh, nan_value, nan_value);
8847214f 2291
2550dfe9
AJ
2292 TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
2293
8847214f
UD
2294 END (cosh);
2295}
2296
2297
ca811b22
JM
2298static void
2299cosh_test_tonearest (void)
2300{
2301 int save_round_mode;
2302 errno = 0;
2303 FUNC(cosh) (0);
2304 if (errno == ENOSYS)
2305 /* Function not implemented. */
2306 return;
2307
2308 START (cosh_tonearest);
2309
2310 save_round_mode = fegetround ();
2311
2312 if (!fesetround (FE_TONEAREST))
2313 {
2314 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2315 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2316 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2317 }
2318
2319 fesetround (save_round_mode);
2320
2321 END (cosh_tonearest);
2322}
2323
2324
2325static void
2326cosh_test_towardzero (void)
2327{
2328 int save_round_mode;
2329 errno = 0;
2330 FUNC(cosh) (0);
2331 if (errno == ENOSYS)
2332 /* Function not implemented. */
2333 return;
2334
2335 START (cosh_towardzero);
2336
2337 save_round_mode = fegetround ();
2338
2339 if (!fesetround (FE_TOWARDZERO))
2340 {
2341 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2342 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2343 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2344 }
2345
2346 fesetround (save_round_mode);
2347
2348 END (cosh_towardzero);
2349}
2350
2351
2352static void
2353cosh_test_downward (void)
2354{
2355 int save_round_mode;
2356 errno = 0;
2357 FUNC(cosh) (0);
2358 if (errno == ENOSYS)
2359 /* Function not implemented. */
2360 return;
2361
2362 START (cosh_downward);
2363
2364 save_round_mode = fegetround ();
2365
2366 if (!fesetround (FE_DOWNWARD))
2367 {
2368 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2369 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2370 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2371 }
2372
2373 fesetround (save_round_mode);
2374
2375 END (cosh_downward);
2376}
2377
2378
2379static void
2380cosh_test_upward (void)
2381{
2382 int save_round_mode;
2383 errno = 0;
2384 FUNC(cosh) (0);
2385 if (errno == ENOSYS)
2386 /* Function not implemented. */
2387 return;
2388
2389 START (cosh_upward);
2390
2391 save_round_mode = fegetround ();
2392
2393 if (!fesetround (FE_UPWARD))
2394 {
2395 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2396 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2397 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2398 }
2399
2400 fesetround (save_round_mode);
2401
2402 END (cosh_upward);
2403}
2404
2405
8847214f
UD
2406static void
2407cpow_test (void)
2408{
aaca11d8
UD
2409 errno = 0;
2410 FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
2411 if (errno == ENOSYS)
2412 /* Function not implemented. */
2413 return;
2414
8847214f
UD
2415 START (cpow);
2416
2417 TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
2418 TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
2419
2420 TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
2421 TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
2422
15daa639
UD
2423 TEST_cc_c (cpow, nan_value, nan_value, nan_value, nan_value, nan_value, nan_value);
2424
96d10bdf
AJ
2425 TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
2426 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
2550dfe9 2427 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
96d10bdf 2428 TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
2550dfe9 2429
6815fabc 2430 END (cpow, complex);
8847214f
UD
2431}
2432
2550dfe9 2433
8847214f
UD
2434static void
2435cproj_test (void)
2436{
2437 START (cproj);
2438 TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
2439 TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
2440 TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
2441 TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
2442
2443 TEST_c_c (cproj, nan_value, nan_value, nan_value, nan_value);
2444
2445 TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
2446 TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
2447 TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
2448 TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
2449
2450 TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
88e236a6 2451 TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
8847214f 2452
6815fabc 2453 END (cproj, complex);
8847214f
UD
2454}
2455
2550dfe9 2456
0cdc8e6f
UD
2457static void
2458creal_test (void)
2459{
2460 START (creal);
2461 TEST_c_f (creal, 0.0, 1.0, 0.0);
2462 TEST_c_f (creal, minus_zero, 1.0, minus_zero);
2463 TEST_c_f (creal, nan_value, 1.0, nan_value);
2464 TEST_c_f (creal, nan_value, nan_value, nan_value);
2465 TEST_c_f (creal, plus_infty, 1.0, plus_infty);
2466 TEST_c_f (creal, minus_infty, 1.0, minus_infty);
2467 TEST_c_f (creal, 2.0, 3.0, 2.0);
2468
2469 END (creal);
2470}
8847214f
UD
2471
2472static void
2473csin_test (void)
2474{
aaca11d8 2475 errno = 0;
3c6cad26 2476 FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
2477 if (errno == ENOSYS)
2478 /* Function not implemented. */
2479 return;
8847214f
UD
2480
2481 START (csin);
2482
2483 TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
2484 TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
2485 TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
2486 TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
2487
2488 TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
2489 TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
2490 TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
2491 TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
2492
2493 TEST_c_c (csin, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2494 TEST_c_c (csin, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2495 TEST_c_c (csin, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2496 TEST_c_c (csin, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2497
2498 TEST_c_c (csin, plus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2499 TEST_c_c (csin, minus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2500 TEST_c_c (csin, plus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2501 TEST_c_c (csin, minus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2502
2503 TEST_c_c (csin, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2504 TEST_c_c (csin, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2505 TEST_c_c (csin, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2506 TEST_c_c (csin, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2507
2508 TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
2509 TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
2510 TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
2511 TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
2512
2513 TEST_c_c (csin, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2514 TEST_c_c (csin, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2515
2516 TEST_c_c (csin, nan_value, plus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2517 TEST_c_c (csin, nan_value, minus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2518
2519 TEST_c_c (csin, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2520 TEST_c_c (csin, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2521
2522 TEST_c_c (csin, 0.0, nan_value, 0.0, nan_value);
2523 TEST_c_c (csin, minus_zero, nan_value, minus_zero, nan_value);
2524
2525 TEST_c_c (csin, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2526 TEST_c_c (csin, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2527
2528 TEST_c_c (csin, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2529 TEST_c_c (csin, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2530
2531 TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
2532
2550dfe9 2533 TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
79df8ce5 2534 TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
8847214f 2535
6815fabc 2536 END (csin, complex);
8847214f
UD
2537}
2538
2539
2540static void
2541csinh_test (void)
2542{
aaca11d8 2543 errno = 0;
3c6cad26 2544 FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
2545 if (errno == ENOSYS)
2546 /* Function not implemented. */
2547 return;
8847214f
UD
2548
2549 START (csinh);
2550
2551 TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
2552 TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
2553 TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
2554 TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
2555
2556 TEST_c_c (csinh, 0.0, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2557 TEST_c_c (csinh, minus_zero, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2558 TEST_c_c (csinh, 0.0, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2559 TEST_c_c (csinh, minus_zero, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2560
2561 TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
2562 TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
2563 TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
2564 TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
2565
2566 TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2567 TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2568 TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2569 TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2570
2571 TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
2572 TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
2573 TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
2574 TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
2575
2576 TEST_c_c (csinh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2577 TEST_c_c (csinh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2578 TEST_c_c (csinh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2579 TEST_c_c (csinh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2580
2581 TEST_c_c (csinh, 0.0, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2582 TEST_c_c (csinh, minus_zero, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2583
2584 TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2585 TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2586
a16956f3
UD
2587 TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2588 TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
8847214f
UD
2589
2590 TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
2591 TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
2592
2593 TEST_c_c (csinh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2594 TEST_c_c (csinh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2595
2596 TEST_c_c (csinh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2597 TEST_c_c (csinh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2598
2599 TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
2600
2550dfe9 2601 TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
79df8ce5 2602 TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
8847214f 2603
6815fabc 2604 END (csinh, complex);
8847214f
UD
2605}
2606
2550dfe9 2607
8847214f
UD
2608static void
2609csqrt_test (void)
2610{
aaca11d8
UD
2611 errno = 0;
2612 FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
2613 if (errno == ENOSYS)
2614 /* Function not implemented. */
2615 return;
2616
8847214f
UD
2617 START (csqrt);
2618
2619 TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
2620 TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
2621 TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
2622 TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
2623
2624 TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
2625 TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
2626 TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
2627 TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
2628
2629 TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
2630 TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
2631 TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
2632 TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
2633
2634 TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
2635 TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
2636 TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
2637 TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
2638 TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
2639 TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
2640 TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
2641 TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
2642 TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
2643 TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
2644 TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
2645 TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
2646
2647 TEST_c_c (csqrt, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2648
2649 TEST_c_c (csqrt, plus_infty, nan_value, plus_infty, nan_value);
2650
2651 TEST_c_c (csqrt, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2652 TEST_c_c (csqrt, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2653 TEST_c_c (csqrt, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2654 TEST_c_c (csqrt, -1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2655
2656 TEST_c_c (csqrt, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2657 TEST_c_c (csqrt, nan_value, 8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2658 TEST_c_c (csqrt, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2659 TEST_c_c (csqrt, nan_value, -8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2660
2661 TEST_c_c (csqrt, nan_value, nan_value, nan_value, nan_value);
2662
2663 TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
2664 TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
2665 TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
2666 TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
2550dfe9 2667 TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
d8337213
UD
2668 TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
2669 TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
72c7a71d
UD
2670 /* Principal square root should be returned (i.e., non-negative real
2671 part). */
2672 TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
8847214f 2673
e456826d
JM
2674 TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
2675 TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
2676 TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
2677 TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
2678
2679#ifndef TEST_FLOAT
2680 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
2681 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
2682 TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
2683 TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
2684#endif
2685
2686#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2687 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
2688 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
2689 TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L, 8.297059146828716918029689466551384219370e-2476L);
2690#endif
2691
6815fabc 2692 END (csqrt, complex);
8847214f
UD
2693}
2694
2695static void
2696ctan_test (void)
2697{
aaca11d8 2698 errno = 0;
3c6cad26 2699 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
aaca11d8
UD
2700 if (errno == ENOSYS)
2701 /* Function not implemented. */
2702 return;
2703
8847214f
UD
2704 START (ctan);
2705
2706 TEST_c_c (ctan, 0, 0, 0.0, 0.0);
2707 TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
2708 TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
2709 TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
2710
2711 TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
2712 TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
2713 TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
2714 TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
2715
2716 TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
2717 TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
2718 TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
2719 TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
2720
2721 TEST_c_c (ctan, plus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2722 TEST_c_c (ctan, plus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2723 TEST_c_c (ctan, minus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2724 TEST_c_c (ctan, minus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2725 TEST_c_c (ctan, plus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2726 TEST_c_c (ctan, plus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2727 TEST_c_c (ctan, minus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2728 TEST_c_c (ctan, minus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2729
2730 TEST_c_c (ctan, nan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
2731 TEST_c_c (ctan, nan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
2732
2733 TEST_c_c (ctan, 0, nan_value, 0.0, nan_value);
2734 TEST_c_c (ctan, minus_zero, nan_value, minus_zero, nan_value);
2735
2736 TEST_c_c (ctan, 0.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2737 TEST_c_c (ctan, -4.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2738
2739 TEST_c_c (ctan, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2740 TEST_c_c (ctan, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2741 TEST_c_c (ctan, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2742 TEST_c_c (ctan, nan_value, -0.25, nan_value, nan_value, INVALID_EXCEPTION_OK);
2743
2744 TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
2745
2550dfe9 2746 TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
79df8ce5 2747 TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
8847214f 2748
6815fabc 2749 END (ctan, complex);
8847214f
UD
2750}
2751
2752
2753static void
2754ctanh_test (void)
2755{
aaca11d8
UD
2756 errno = 0;
2757 FUNC(ctanh) (BUILD_COMPLEX (0, 0));
2758 if (errno == ENOSYS)
2759 /* Function not implemented. */
2760 return;
2761
8847214f
UD
2762 START (ctanh);
2763
2764 TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
2765 TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
2766 TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
2767 TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
2768
2769 TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
2770 TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
2771 TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
2772 TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
2773 TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
2774 TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
2775 TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
2776 TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
2777
2778 TEST_c_c (ctanh, 0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2779 TEST_c_c (ctanh, 2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2780 TEST_c_c (ctanh, 0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2781 TEST_c_c (ctanh, 2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2782 TEST_c_c (ctanh, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2783 TEST_c_c (ctanh, -2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2784 TEST_c_c (ctanh, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2785 TEST_c_c (ctanh, -2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2786
2787 TEST_c_c (ctanh, plus_infty, nan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2788 TEST_c_c (ctanh, minus_infty, nan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2789
2790 TEST_c_c (ctanh, nan_value, 0, nan_value, 0.0);
2791 TEST_c_c (ctanh, nan_value, minus_zero, nan_value, minus_zero);
2792
2793 TEST_c_c (ctanh, nan_value, 0.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2794 TEST_c_c (ctanh, nan_value, -4.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2795
2796 TEST_c_c (ctanh, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2797 TEST_c_c (ctanh, 5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2798 TEST_c_c (ctanh, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2799 TEST_c_c (ctanh, -0.25, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2800
2801 TEST_c_c (ctanh, nan_value, nan_value, nan_value, nan_value);
2802
2803 TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
2804
2550dfe9 2805 TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
79df8ce5 2806 TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
8847214f 2807
6815fabc 2808 END (ctanh, complex);
8847214f
UD
2809}
2810
2550dfe9 2811
8847214f
UD
2812static void
2813erf_test (void)
2814{
2815 errno = 0;
2816 FUNC(erf) (0);
2817 if (errno == ENOSYS)
2818 /* Function not implemented. */
2819 return;
2820
2821 START (erf);
2822
2823 TEST_f_f (erf, 0, 0);
2824 TEST_f_f (erf, minus_zero, minus_zero);
2825 TEST_f_f (erf, plus_infty, 1);
2826 TEST_f_f (erf, minus_infty, -1);
15daa639 2827 TEST_f_f (erf, nan_value, nan_value);
8847214f 2828
2550dfe9
AJ
2829 TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
2830 TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
2831 TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
2832 TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
2833 TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
2834 TEST_f_f (erf, 27.0L, 1.0L);
8847214f
UD
2835
2836 END (erf);
2837}
2838
2839
2840static void
2841erfc_test (void)
2842{
2843 errno = 0;
2844 FUNC(erfc) (0);
2845 if (errno == ENOSYS)
2846 /* Function not implemented. */
2847 return;
2848
2849 START (erfc);
2850
2851 TEST_f_f (erfc, plus_infty, 0.0);
2852 TEST_f_f (erfc, minus_infty, 2.0);
2853 TEST_f_f (erfc, 0.0, 1.0);
2854 TEST_f_f (erfc, minus_zero, 1.0);
15daa639 2855 TEST_f_f (erfc, nan_value, nan_value);
8847214f 2856
2550dfe9
AJ
2857 TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
2858 TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
2859 TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
2860 TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
7b1902cb 2861 TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
2550dfe9 2862 TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
7b1902cb
JM
2863 TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
2864 TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
2550dfe9
AJ
2865#ifdef TEST_LDOUBLE
2866 /* The result can only be represented in long double. */
f964490f 2867# if LDBL_MIN_10_EXP < -319
2550dfe9 2868 TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
f964490f 2869# endif
7b1902cb
JM
2870# if LDBL_MANT_DIG >= 106
2871 TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
2872# endif
2550dfe9 2873#endif
8847214f
UD
2874
2875 END (erfc);
2876}
2877
2550dfe9 2878
8847214f
UD
2879static void
2880exp_test (void)
2881{
e6d3c4a7
AJ
2882 errno = 0;
2883 FUNC(exp) (0);
2884 if (errno == ENOSYS)
2885 /* Function not implemented. */
2886 return;
2887
8847214f
UD
2888 START (exp);
2889
2890 TEST_f_f (exp, 0, 1);
2891 TEST_f_f (exp, minus_zero, 1);
2892
15daa639 2893#ifndef TEST_INLINE
8847214f
UD
2894 TEST_f_f (exp, plus_infty, plus_infty);
2895 TEST_f_f (exp, minus_infty, 0);
15daa639
UD
2896#endif
2897 TEST_f_f (exp, nan_value, nan_value);
8847214f
UD
2898 TEST_f_f (exp, 1, M_El);
2899
2900 TEST_f_f (exp, 2, M_E2l);
2901 TEST_f_f (exp, 3, M_E3l);
2550dfe9 2902 TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
4c95adde 2903 TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
a7eb802f 2904 TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
8fb0af98
UD
2905#if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
2906 /* The result can only be represented in sane long double. */
4c95adde
AJ
2907 TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
2908#endif
2550dfe9 2909
8847214f
UD
2910 END (exp);
2911}
2912
2913
28afd92d
JM
2914static void
2915exp_test_tonearest (void)
2916{
2917 int save_round_mode;
2918 errno = 0;
2919 FUNC(exp) (0);
2920 if (errno == ENOSYS)
2921 /* Function not implemented. */
2922 return;
2923
2924 START (exp_tonearest);
2925
2926 save_round_mode = fegetround ();
2927
2928 if (!fesetround (FE_TONEAREST))
2929 {
2930 TEST_f_f (exp, 1, M_El);
2931 TEST_f_f (exp, 2, M_E2l);
2932 TEST_f_f (exp, 3, M_E3l);
2933 }
2934
2935 fesetround (save_round_mode);
2936
2937 END (exp_tonearest);
2938}
2939
2940
2941static void
2942exp_test_towardzero (void)
2943{
2944 int save_round_mode;
2945 errno = 0;
2946 FUNC(exp) (0);
2947 if (errno == ENOSYS)
2948 /* Function not implemented. */
2949 return;
2950
2951 START (exp_towardzero);
2952
2953 save_round_mode = fegetround ();
2954
2955 if (!fesetround (FE_TOWARDZERO))
2956 {
2957 TEST_f_f (exp, 1, M_El);
2958 TEST_f_f (exp, 2, M_E2l);
2959 TEST_f_f (exp, 3, M_E3l);
2960 }
2961
2962 fesetround (save_round_mode);
2963
2964 END (exp_towardzero);
2965}
2966
2967
2968static void
2969exp_test_downward (void)
2970{
2971 int save_round_mode;
2972 errno = 0;
2973 FUNC(exp) (0);
2974 if (errno == ENOSYS)
2975 /* Function not implemented. */
2976 return;
2977
2978 START (exp_downward);
2979
2980 save_round_mode = fegetround ();
2981
2982 if (!fesetround (FE_DOWNWARD))
2983 {
2984 TEST_f_f (exp, 1, M_El);
2985 TEST_f_f (exp, 2, M_E2l);
2986 TEST_f_f (exp, 3, M_E3l);
2987 }
2988
2989 fesetround (save_round_mode);
2990
2991 END (exp_downward);
2992}
2993
2994
2995static void
2996exp_test_upward (void)
2997{
2998 int save_round_mode;
2999 errno = 0;
3000 FUNC(exp) (0);
3001 if (errno == ENOSYS)
3002 /* Function not implemented. */
3003 return;
3004
3005 START (exp_upward);
3006
3007 save_round_mode = fegetround ();
3008
3009 if (!fesetround (FE_UPWARD))
3010 {
3011 TEST_f_f (exp, 1, M_El);
3012 TEST_f_f (exp, 2, M_E2l);
3013 TEST_f_f (exp, 3, M_E3l);
3014 }
3015
3016 fesetround (save_round_mode);
3017
3018 END (exp_upward);
3019}
3020
3021
8847214f
UD
3022static void
3023exp10_test (void)
3024{
3025 errno = 0;
3026 FUNC(exp10) (0);
3027 if (errno == ENOSYS)
3028 /* Function not implemented. */
3029 return;
3030
3031 START (exp10);
3032
3033 TEST_f_f (exp10, 0, 1);
3034 TEST_f_f (exp10, minus_zero, 1);
3035
3036 TEST_f_f (exp10, plus_infty, plus_infty);
3037 TEST_f_f (exp10, minus_infty, 0);
15daa639 3038 TEST_f_f (exp10, nan_value, nan_value);
8847214f 3039 TEST_f_f (exp10, 3, 1000);
42be70d4 3040 TEST_f_f (exp10, -1, 0.1L);
8847214f
UD
3041 TEST_f_f (exp10, 1e6, plus_infty);
3042 TEST_f_f (exp10, -1e6, 0);
2550dfe9 3043 TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
8847214f
UD
3044
3045 END (exp10);
3046}
3047
2550dfe9 3048
8847214f
UD
3049static void
3050exp2_test (void)
3051{
3052 errno = 0;
3053 FUNC(exp2) (0);
3054 if (errno == ENOSYS)
3055 /* Function not implemented. */
3056 return;
3057
3058 START (exp2);
3059
3060 TEST_f_f (exp2, 0, 1);
3061 TEST_f_f (exp2, minus_zero, 1);
3062 TEST_f_f (exp2, plus_infty, plus_infty);
3063 TEST_f_f (exp2, minus_infty, 0);
15daa639
UD
3064 TEST_f_f (exp2, nan_value, nan_value);
3065
8847214f
UD
3066 TEST_f_f (exp2, 10, 1024);
3067 TEST_f_f (exp2, -1, 0.5);
3068 TEST_f_f (exp2, 1e6, plus_infty);
3069 TEST_f_f (exp2, -1e6, 0);
2550dfe9 3070 TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
8847214f
UD
3071
3072 END (exp2);
3073}
3074
2550dfe9 3075
8847214f
UD
3076static void
3077expm1_test (void)
3078{
e6d3c4a7
AJ
3079 errno = 0;
3080 FUNC(expm1) (0);
3081 if (errno == ENOSYS)
3082 /* Function not implemented. */
3083 return;
3084
8847214f
UD
3085 START (expm1);
3086
3087 TEST_f_f (expm1, 0, 0);
3088 TEST_f_f (expm1, minus_zero, minus_zero);
3089
15daa639 3090#ifndef TEST_INLINE
8847214f
UD
3091 TEST_f_f (expm1, plus_infty, plus_infty);
3092 TEST_f_f (expm1, minus_infty, -1);
15daa639
UD
3093#endif
3094 TEST_f_f (expm1, nan_value, nan_value);
8847214f
UD
3095
3096 TEST_f_f (expm1, 1, M_El - 1.0);
2550dfe9 3097 TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
8847214f 3098
0fcad3e2
JM
3099#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3100 TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
3101#endif
3102
bbc5d74d
UD
3103 errno = 0;
3104 TEST_f_f (expm1, 100000.0, plus_infty);
3105 check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
3106
8847214f
UD
3107 END (expm1);
3108}
3109
2550dfe9 3110
8847214f
UD
3111static void
3112fabs_test (void)
3113{
3114 START (fabs);
3115
3116 TEST_f_f (fabs, 0, 0);
3117 TEST_f_f (fabs, minus_zero, 0);
3118
3119 TEST_f_f (fabs, plus_infty, plus_infty);
3120 TEST_f_f (fabs, minus_infty, plus_infty);
15daa639 3121 TEST_f_f (fabs, nan_value, nan_value);
8847214f
UD
3122
3123 TEST_f_f (fabs, 38.0, 38.0);
3124 TEST_f_f (fabs, -M_El, M_El);
3125
3126 END (fabs);
3127}
3128
2550dfe9 3129
8847214f
UD
3130static void
3131fdim_test (void)
3132{
3133 START (fdim);
3134
3135 TEST_ff_f (fdim, 0, 0, 0);
3136 TEST_ff_f (fdim, 9, 0, 9);
3137 TEST_ff_f (fdim, 0, 9, 0);
3138 TEST_ff_f (fdim, -9, 0, 0);
3139 TEST_ff_f (fdim, 0, -9, 9);
3140
3141 TEST_ff_f (fdim, plus_infty, 9, plus_infty);
3142 TEST_ff_f (fdim, plus_infty, -9, plus_infty);
3143 TEST_ff_f (fdim, minus_infty, 9, 0);
3144 TEST_ff_f (fdim, minus_infty, -9, 0);
3145 TEST_ff_f (fdim, 9, minus_infty, plus_infty);
3146 TEST_ff_f (fdim, -9, minus_infty, plus_infty);
3147 TEST_ff_f (fdim, 9, plus_infty, 0);
3148 TEST_ff_f (fdim, -9, plus_infty, 0);
3149
3150 TEST_ff_f (fdim, 0, nan_value, nan_value);
3151 TEST_ff_f (fdim, 9, nan_value, nan_value);
3152 TEST_ff_f (fdim, -9, nan_value, nan_value);
3153 TEST_ff_f (fdim, nan_value, 9, nan_value);
3154 TEST_ff_f (fdim, nan_value, -9, nan_value);
3155 TEST_ff_f (fdim, plus_infty, nan_value, nan_value);
3156 TEST_ff_f (fdim, minus_infty, nan_value, nan_value);
3157 TEST_ff_f (fdim, nan_value, plus_infty, nan_value);
3158 TEST_ff_f (fdim, nan_value, minus_infty, nan_value);
3159 TEST_ff_f (fdim, nan_value, nan_value, nan_value);
3160
6497a1d0
UD
3161 TEST_ff_f (fdim, plus_infty, plus_infty, 0);
3162
8847214f
UD
3163 END (fdim);
3164}
3165
2550dfe9 3166
8847214f
UD
3167static void
3168floor_test (void)
3169{
3170 START (floor);
3171
3172 TEST_f_f (floor, 0.0, 0.0);
3173 TEST_f_f (floor, minus_zero, minus_zero);
3174 TEST_f_f (floor, plus_infty, plus_infty);
3175 TEST_f_f (floor, minus_infty, minus_infty);
15daa639 3176 TEST_f_f (floor, nan_value, nan_value);
8847214f
UD
3177
3178 TEST_f_f (floor, M_PIl, 3.0);
3179 TEST_f_f (floor, -M_PIl, -4.0);
3180
5c68d401 3181 TEST_f_f (floor, 0.1, 0.0);
97fd3a30 3182 TEST_f_f (floor, 0.25, 0.0);
5c68d401
RM
3183 TEST_f_f (floor, 0.625, 0.0);
3184 TEST_f_f (floor, -0.1, -1.0);
97fd3a30 3185 TEST_f_f (floor, -0.25, -1.0);
5c68d401 3186 TEST_f_f (floor, -0.625, -1.0);
f964490f
RM
3187
3188#ifdef TEST_LDOUBLE
3189 /* The result can only be represented in long double. */
3190 TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
3191 TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
3192 TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
3193 TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
3194 TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
5c68d401
RM
3195# if LDBL_MANT_DIG > 100
3196 TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
3197 TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
3198 TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
3199# endif
f964490f
RM
3200
3201 TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
3202 TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
3203 TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
3204 TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
3205 TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
5c68d401
RM
3206# if LDBL_MANT_DIG > 100
3207 TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
3208 TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
3209 TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
3210# endif
f964490f
RM
3211
3212 TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
3213 TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
3214 TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
3215 TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
3216 TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
3217
5c68d401
RM
3218# if LDBL_MANT_DIG > 100
3219 TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
3220 TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
3221 TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
3222 TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
3223 TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
3224 TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
3225# endif
3226
f964490f
RM
3227 TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
3228 TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
3229 TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
3230 TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
3231 TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
3232
5c68d401
RM
3233# if LDBL_MANT_DIG > 100
3234 TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
3235 TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
3236 TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
3237 TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
3238 TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
3239 TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
3240# endif
3241
f964490f
RM
3242 TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
3243 TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
3244 TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
3245 TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
3246 TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
3247
3248 TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
3249 TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
3250 TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
3251 TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
3252 TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
3253
3254 TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
3255 TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
3256 TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
3257 TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
3258 TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
3259#endif
3260
8847214f
UD
3261 END (floor);
3262}
3263
2550dfe9 3264
8847214f
UD
3265static void
3266fma_test (void)
3267{
3268 START (fma);
3269
3270 TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
3271 TEST_fff_f (fma, nan_value, 2.0, 3.0, nan_value);
3272 TEST_fff_f (fma, 1.0, nan_value, 3.0, nan_value);
3273 TEST_fff_f (fma, 1.0, 2.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3274 TEST_fff_f (fma, plus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3275 TEST_fff_f (fma, minus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3276 TEST_fff_f (fma, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3277 TEST_fff_f (fma, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3278 TEST_fff_f (fma, plus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3279 TEST_fff_f (fma, minus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3280 TEST_fff_f (fma, 0.0, plus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3281 TEST_fff_f (fma, 0.0, minus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3282
3283 TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3284 TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3285 TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3286 TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3e692e05
JJ
3287 TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3288 TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3289 TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3290 TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, nan_value, INVALID_EXCEPTION);
8847214f 3291
2550dfe9 3292 TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
3e692e05
JJ
3293
3294 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
3295 LDBL_MAX, DBL_MAX, FLT_MAX);
3296 TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
3297 TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
3298 TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
3299 TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
3300 TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
3301 TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
3302 TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
3303 TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
3304
5e908464 3305#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
9ff8d36f
JJ
3306 TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
3307 TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
5e908464
JJ
3308 TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
3309 TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
3310 TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
3311 TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
3312 TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
3313#endif
3314#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
3315 TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
3316 TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
3317 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
3318 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
3319 TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
3320 TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
3321 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
3322 TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
3323 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
f3f7372d
JJ
3324 TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0);
3325 TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022);
3326 TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022);
3327 TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022);
3328 TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022);
3329 TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022);
3330 TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022);
3331 TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022);
3332 TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022);
3333 TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022);
3e692e05
JJ
3334 TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
3335#endif
3336#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
3337 TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
3338 TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
3339 TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
3340 TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
3341 TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
3342 TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L);
9ff8d36f 3343#endif
7c08a05c
JJ
3344#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
3345 TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
3346 TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L);
3347 TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L);
3348 TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
3349 TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
3350 TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
3351 TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
3352 TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
3353 TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
3354 TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
3355 TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
3356 TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
3357 TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
3358#endif
2550dfe9 3359
8847214f
UD
3360 END (fma);
3361}
3362
3363
3364static void
3365fmax_test (void)
3366{
3367 START (fmax);
3368
3369 TEST_ff_f (fmax, 0, 0, 0);
3370 TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
3371 TEST_ff_f (fmax, 9, 0, 9);
3372 TEST_ff_f (fmax, 0, 9, 9);
3373 TEST_ff_f (fmax, -9, 0, 0);
3374 TEST_ff_f (fmax, 0, -9, 0);
3375
3376 TEST_ff_f (fmax, plus_infty, 9, plus_infty);
3377 TEST_ff_f (fmax, 0, plus_infty, plus_infty);
3378 TEST_ff_f (fmax, -9, plus_infty, plus_infty);
3379 TEST_ff_f (fmax, plus_infty, -9, plus_infty);
3380
3381 TEST_ff_f (fmax, minus_infty, 9, 9);
3382 TEST_ff_f (fmax, minus_infty, -9, -9);
3383 TEST_ff_f (fmax, 9, minus_infty, 9);
3384 TEST_ff_f (fmax, -9, minus_infty, -9);
3385
3386 TEST_ff_f (fmax, 0, nan_value, 0);
3387 TEST_ff_f (fmax, 9, nan_value, 9);
3388 TEST_ff_f (fmax, -9, nan_value, -9);
3389 TEST_ff_f (fmax, nan_value, 0, 0);
3390 TEST_ff_f (fmax, nan_value, 9, 9);
3391 TEST_ff_f (fmax, nan_value, -9, -9);
3392 TEST_ff_f (fmax, plus_infty, nan_value, plus_infty);
3393 TEST_ff_f (fmax, minus_infty, nan_value, minus_infty);
3394 TEST_ff_f (fmax, nan_value, plus_infty, plus_infty);
3395 TEST_ff_f (fmax, nan_value, minus_infty, minus_infty);
3396 TEST_ff_f (fmax, nan_value, nan_value, nan_value);
3397
3398 END (fmax);
3399}
3400
3401
3402static void
3403fmin_test (void)
3404{
3405 START (fmin);
3406
3407 TEST_ff_f (fmin, 0, 0, 0);
3408 TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
3409 TEST_ff_f (fmin, 9, 0, 0);
3410 TEST_ff_f (fmin, 0, 9, 0);
3411 TEST_ff_f (fmin, -9, 0, -9);
3412 TEST_ff_f (fmin, 0, -9, -9);
3413
3414 TEST_ff_f (fmin, plus_infty, 9, 9);
3415 TEST_ff_f (fmin, 9, plus_infty, 9);
3416 TEST_ff_f (fmin, plus_infty, -9, -9);
3417 TEST_ff_f (fmin, -9, plus_infty, -9);
3418 TEST_ff_f (fmin, minus_infty, 9, minus_infty);
3419 TEST_ff_f (fmin, minus_infty, -9, minus_infty);
3420 TEST_ff_f (fmin, 9, minus_infty, minus_infty);
3421 TEST_ff_f (fmin, -9, minus_infty, minus_infty);
3422
3423 TEST_ff_f (fmin, 0, nan_value, 0);
3424 TEST_ff_f (fmin, 9, nan_value, 9);
3425 TEST_ff_f (fmin, -9, nan_value, -9);
3426 TEST_ff_f (fmin, nan_value, 0, 0);
3427 TEST_ff_f (fmin, nan_value, 9, 9);
3428 TEST_ff_f (fmin, nan_value, -9, -9);
3429 TEST_ff_f (fmin, plus_infty, nan_value, plus_infty);
3430 TEST_ff_f (fmin, minus_infty, nan_value, minus_infty);
3431 TEST_ff_f (fmin, nan_value, plus_infty, plus_infty);
3432 TEST_ff_f (fmin, nan_value, minus_infty, minus_infty);
3433 TEST_ff_f (fmin, nan_value, nan_value, nan_value);
3434
3435 END (fmin);
3436}
3437
3438
3439static void
3440fmod_test (void)
3441{
aaca11d8 3442 errno = 0;
3c6cad26 3443 FUNC(fmod) (6.5, 2.3L);
aaca11d8
UD
3444 if (errno == ENOSYS)
3445 /* Function not implemented. */
3446 return;
3447
8847214f
UD
3448 START (fmod);
3449
3450 /* fmod (+0, y) == +0 for y != 0. */
3451 TEST_ff_f (fmod, 0, 3, 0);
3452
3453 /* fmod (-0, y) == -0 for y != 0. */
3454 TEST_ff_f (fmod, minus_zero, 3, minus_zero);
3455
3456 /* fmod (+inf, y) == NaN plus invalid exception. */
7095366d 3457 errno = 0;
8847214f 3458 TEST_ff_f (fmod, plus_infty, 3, nan_value, INVALID_EXCEPTION);
7095366d 3459 check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8847214f 3460 /* fmod (-inf, y) == NaN plus invalid exception. */
7095366d 3461 errno = 0;
8847214f 3462 TEST_ff_f (fmod, minus_infty, 3, nan_value, INVALID_EXCEPTION);
7095366d 3463 check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8847214f 3464 /* fmod (x, +0) == NaN plus invalid exception. */
7095366d 3465 errno = 0;
8847214f 3466 TEST_ff_f (fmod, 3, 0, nan_value, INVALID_EXCEPTION);
7095366d 3467 check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
8847214f
UD
3468 /* fmod (x, -0) == NaN plus invalid exception. */
3469 TEST_ff_f (fmod, 3, minus_zero, nan_value, INVALID_EXCEPTION);
3470
3471 /* fmod (x, +inf) == x for x not infinite. */
3472 TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
3473 /* fmod (x, -inf) == x for x not infinite. */
3474 TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
3475
15daa639
UD
3476 TEST_ff_f (fmod, nan_value, nan_value, nan_value);
3477
2550dfe9
AJ
3478 TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
3479 TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
3480 TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
3481 TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
8847214f
UD
3482
3483 END (fmod);
3484}
3485
2550dfe9 3486
8847214f
UD
3487static void
3488fpclassify_test (void)
3489{
3490 START (fpclassify);
3491
3492 TEST_f_i (fpclassify, nan_value, FP_NAN);
3493 TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
3494 TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
3495 TEST_f_i (fpclassify, plus_zero, FP_ZERO);
3496 TEST_f_i (fpclassify, minus_zero, FP_ZERO);
3497 TEST_f_i (fpclassify, 1000, FP_NORMAL);
3498
3499 END (fpclassify);
3500}
3501
3502
3503static void
3504frexp_test (void)
3505{
3506 int x;
3507
3508 START (frexp);
3509
3510 TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
3511 TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
3512 TEST_fI_f1 (frexp, nan_value, nan_value, IGNORE);
3513
3514 TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
3515 TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
3516
b15cb495
UD
3517 TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
3518 TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
8847214f
UD
3519
3520 END (frexp);
3521}
3522
3523
3524static void
3525gamma_test (void)
3526{
3527 errno = 0;
3528 FUNC(gamma) (1);
3529
3530 if (errno == ENOSYS)
3531 /* Function not implemented. */
3532 return;
3533 feclearexcept (FE_ALL_EXCEPT);
3534
3535 START (gamma);
3536
3537 TEST_f_f (gamma, plus_infty, plus_infty);
3538 TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3539 TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
f30e0cd3 3540 TEST_f_f (gamma, minus_infty, plus_infty);
15daa639 3541 TEST_f_f (gamma, nan_value, nan_value);
8847214f
UD
3542
3543 TEST_f_f1 (gamma, 1, 0, 1);
3544 TEST_f_f1 (gamma, 3, M_LN2l, 1);
3545
3546 TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
f30e0cd3 3547 TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
8847214f
UD
3548
3549 END (gamma);
3550}
3551
3552static void
3553hypot_test (void)
3554{
aaca11d8 3555 errno = 0;
3c6cad26 3556 FUNC(hypot) (0.7L, 12.4L);
aaca11d8
UD
3557 if (errno == ENOSYS)
3558 /* Function not implemented. */
3559 return;
3560
8847214f
UD
3561 START (hypot);
3562
3563 TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3564 TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3565
15daa639 3566#ifndef TEST_INLINE
8847214f
UD
3567 TEST_ff_f (hypot, plus_infty, nan_value, plus_infty);
3568 TEST_ff_f (hypot, minus_infty, nan_value, plus_infty);
3569 TEST_ff_f (hypot, nan_value, plus_infty, plus_infty);
3570 TEST_ff_f (hypot, nan_value, minus_infty, plus_infty);
15daa639 3571#endif
8847214f
UD
3572
3573 TEST_ff_f (hypot, nan_value, nan_value, nan_value);
3574
3575 /* hypot (x,y) == hypot (+-x, +-y) */
d8337213
UD
3576 TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
3577 TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
3578 TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
3579 TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
3580 TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
3581 TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
3582 TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
3583 TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
8847214f
UD
3584
3585 /* hypot (x,0) == fabs (x) */
2550dfe9
AJ
3586 TEST_ff_f (hypot, 0.75L, 0, 0.75L);
3587 TEST_ff_f (hypot, -0.75L, 0, 0.75L);
3c6cad26 3588 TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
8847214f 3589
2550dfe9 3590 TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
8847214f 3591
aa4a2ae1
JM
3592#if !(defined TEST_FLOAT && defined TEST_INLINE)
3593 TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
3594 TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
3595#endif
3596
3597#ifndef TEST_FLOAT
3598 TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
3599#endif
3600
3601#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
3602 TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
3603#endif
3604
8847214f
UD
3605 END (hypot);
3606}
3607
3608
3609static void
3610ilogb_test (void)
3611{
3612 START (ilogb);
3613
3614 TEST_f_i (ilogb, 1, 0);
3615 TEST_f_i (ilogb, M_El, 1);
3616 TEST_f_i (ilogb, 1024, 10);
3617 TEST_f_i (ilogb, -2000, 10);
3618
3619 /* XXX We have a problem here: the standard does not tell us whether
3620 exceptions are allowed/required. ignore them for now. */
3621
3622 TEST_f_i (ilogb, 0.0, FP_ILOGB0, EXCEPTIONS_OK);
3623 TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, EXCEPTIONS_OK);
601d2942
UD
3624 TEST_f_i (ilogb, plus_infty, INT_MAX, EXCEPTIONS_OK);
3625 TEST_f_i (ilogb, minus_infty, INT_MAX, EXCEPTIONS_OK);
8847214f
UD
3626
3627 END (ilogb);
3628}
3629
3630static void
3631isfinite_test (void)
3632{
3633 START (isfinite);
3634
3635 TEST_f_b (isfinite, 0, 1);
3636 TEST_f_b (isfinite, minus_zero, 1);
3637 TEST_f_b (isfinite, 10, 1);
3638 TEST_f_b (isfinite, plus_infty, 0);
3639 TEST_f_b (isfinite, minus_infty, 0);
3640 TEST_f_b (isfinite, nan_value, 0);
3641
3642 END (isfinite);
3643}
3644
3645static void
3646isnormal_test (void)
3647{
3648 START (isnormal);
3649
3650 TEST_f_b (isnormal, 0, 0);
3651 TEST_f_b (isnormal, minus_zero, 0);
3652 TEST_f_b (isnormal, 10, 1);
3653 TEST_f_b (isnormal, plus_infty, 0);
3654 TEST_f_b (isnormal, minus_infty, 0);
3655 TEST_f_b (isnormal, nan_value, 0);
3656
3657 END (isnormal);
3658}
3659
3660static void
3661j0_test (void)
3662{
cd53c157 3663 FLOAT s, c;
8847214f 3664 errno = 0;
cd53c157
UD
3665 FUNC (sincos) (0, &s, &c);
3666 if (errno == ENOSYS)
3667 /* Required function not implemented. */
3668 return;
8847214f
UD
3669 FUNC(j0) (0);
3670 if (errno == ENOSYS)
3671 /* Function not implemented. */
3672 return;
3673
3674 START (j0);
3675
3676 /* j0 is the Bessel function of the first kind of order 0 */
3677 TEST_f_f (j0, nan_value, nan_value);
3678 TEST_f_f (j0, plus_infty, 0);
2550dfe9 3679 TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
8847214f 3680 TEST_f_f (j0, 0.0, 1.0);
2550dfe9
AJ
3681 TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
3682 TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
3683 TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
3684 TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
3685 TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
3686 TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
3687 TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
fa9ced58
AJ
3688 TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3689 TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8847214f 3690
c36e1d23
JM
3691 TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
3692
3693#ifndef TEST_FLOAT
3694 TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
3695#endif
3696
8847214f
UD
3697 END (j0);
3698}
3699
3700
3701static void
3702j1_test (void)
3703{
8a216c1b 3704 FLOAT s, c;
8847214f 3705 errno = 0;
cd53c157
UD
3706 FUNC (sincos) (0, &s, &c);
3707 if (errno == ENOSYS)
3708 /* Required function not implemented. */
3709 return;
8847214f
UD
3710 FUNC(j1) (0);
3711 if (errno == ENOSYS)
3712 /* Function not implemented. */
3713 return;
3714
3715 /* j1 is the Bessel function of the first kind of order 1 */
3716
3717 START (j1);
3718
3719 TEST_f_f (j1, nan_value, nan_value);
3720 TEST_f_f (j1, plus_infty, 0);
3721
2550dfe9 3722 TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
8847214f 3723 TEST_f_f (j1, 0.0, 0.0);
2550dfe9
AJ
3724 TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
3725 TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
3726 TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
3727 TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
3728 TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
3729 TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
3730 TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
8847214f 3731
c36e1d23
JM
3732 TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
3733
3734#ifndef TEST_FLOAT
3735 TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
3736#endif
3737
8847214f
UD
3738 END (j1);
3739}
3740
3741static void
3742jn_test (void)
3743{
8a216c1b 3744 FLOAT s, c;
8847214f 3745 errno = 0;
cd53c157
UD
3746 FUNC (sincos) (0, &s, &c);
3747 if (errno == ENOSYS)
3748 /* Required function not implemented. */
3749 return;
8847214f
UD
3750 FUNC(jn) (1, 1);
3751 if (errno == ENOSYS)
3752 /* Function not implemented. */
3753 return;
3754
3755 /* jn is the Bessel function of the first kind of order n. */
3756 START (jn);
3757
3758 /* jn (0, x) == j0 (x) */
3759 TEST_ff_f (jn, 0, nan_value, nan_value);
3760 TEST_ff_f (jn, 0, plus_infty, 0);
2550dfe9 3761 TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
8847214f 3762 TEST_ff_f (jn, 0, 0.0, 1.0);
2550dfe9
AJ
3763 TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
3764 TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
3765 TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
3766 TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
3767 TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
3768 TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
3769 TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
3770 TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3771 TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8847214f
UD
3772
3773 /* jn (1, x) == j1 (x) */
3774 TEST_ff_f (jn, 1, nan_value, nan_value);
3775 TEST_ff_f (jn, 1, plus_infty, 0);
2550dfe9 3776 TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
8847214f 3777 TEST_ff_f (jn, 1, 0.0, 0.0);
2550dfe9
AJ
3778 TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
3779 TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
3780 TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
3781 TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
3782 TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
3783 TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
3784 TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
8847214f
UD
3785
3786 /* jn (3, x) */
3787 TEST_ff_f (jn, 3, nan_value, nan_value);
3788 TEST_ff_f (jn, 3, plus_infty, 0);
3789
2550dfe9 3790 TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
8847214f 3791 TEST_ff_f (jn, 3, 0.0, 0.0);
2550dfe9
AJ
3792 TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
3793 TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
3794 TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
3795 TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
3796 TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
8847214f
UD
3797
3798 /* jn (10, x) */
3799 TEST_ff_f (jn, 10, nan_value, nan_value);
3800 TEST_ff_f (jn, 10, plus_infty, 0);
3801
2550dfe9 3802 TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
8847214f 3803 TEST_ff_f (jn, 10, 0.0, 0.0);
2550dfe9
AJ
3804 TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
3805 TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
3806 TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
3807 TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
3808 TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
8847214f 3809
1248c1c4 3810 /* BZ #11589 .*/
cfdc0dd7
AS
3811 TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
3812 TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
3813 TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
3814 TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
3815 TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
3816 TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
3817 TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
c36e1d23
JM
3818 TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
3819
3820 TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L);
1248c1c4 3821
8847214f
UD
3822 END (jn);
3823}
3824
3825
3826static void
3827ldexp_test (void)
3828{
3829 TEST_ff_f (ldexp, 0, 0, 0);
3830 TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
3831
3832 TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
3833 TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
3834 TEST_ff_f (ldexp, nan_value, 1, nan_value);
3835
3836 TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
3837 TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
3838
3839 /* ldexp (x, 0) == x. */
3840 TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
3841}
3842
2550dfe9 3843
8847214f
UD
3844static void
3845lgamma_test (void)
3846{
3847 errno = 0;
3848 FUNC(lgamma) (0);
3849 if (errno == ENOSYS)
3850 /* Function not implemented. */
3851 return;
3852 feclearexcept (FE_ALL_EXCEPT);
3853
3854 START (lgamma);
3855
3856 TEST_f_f (lgamma, plus_infty, plus_infty);
3857 TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
c039eedd
UD
3858 check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
3859 TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3860 check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
15daa639 3861 TEST_f_f (lgamma, nan_value, nan_value);
8847214f
UD
3862
3863 /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0. */
e971e76d 3864 errno = 0;
8847214f 3865 TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
e971e76d 3866 check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
8847214f
UD
3867 TEST_f_f (lgamma, minus_infty, plus_infty);
3868
3869 TEST_f_f1 (lgamma, 1, 0, 1);
3870
3871 TEST_f_f1 (lgamma, 3, M_LN2l, 1);
3872
3873 TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
3874 TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
79df8ce5
AJ
3875 TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
3876 TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
8847214f
UD
3877
3878 END (lgamma);
3879}
3880
2550dfe9 3881
8847214f
UD
3882static void
3883lrint_test (void)
3884{
3885 /* XXX this test is incomplete. We need to have a way to specifiy
3886 the rounding method and test the critical cases. So far, only
3887 unproblematic numbers are tested. */
3888
3889 START (lrint);
3890
3891 TEST_f_l (lrint, 0.0, 0);
3892 TEST_f_l (lrint, minus_zero, 0);
3c6cad26
UD
3893 TEST_f_l (lrint, 0.2L, 0);
3894 TEST_f_l (lrint, -0.2L, 0);
8847214f 3895
3c6cad26
UD
3896 TEST_f_l (lrint, 1.4L, 1);
3897 TEST_f_l (lrint, -1.4L, -1);
8847214f 3898
3c6cad26
UD
3899 TEST_f_l (lrint, 8388600.3L, 8388600);
3900 TEST_f_l (lrint, -8388600.3L, -8388600);
8847214f 3901
3eb61415
UD
3902 TEST_f_l (lrint, 1071930.0008, 1071930);
3903#ifndef TEST_FLOAT
3904 TEST_f_l (lrint, 1073741824.01, 1073741824);
39007ae3
UD
3905# if LONG_MAX > 281474976710656
3906 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3907# endif
3eb61415
UD
3908#endif
3909
8847214f
UD
3910 END (lrint);
3911}
3912
2550dfe9 3913
6624dbc0
UD
3914static void
3915lrint_test_tonearest (void)
3916{
3917 int save_round_mode;
3918 START (lrint_tonearest);
3919
3920 save_round_mode = fegetround ();
3921
3922 if (!fesetround (FE_TONEAREST))
3923 {
3924 TEST_f_l (lrint, 0.0, 0);
3925 TEST_f_l (lrint, minus_zero, 0);
3926 TEST_f_l (lrint, 0.2L, 0);
3927 TEST_f_l (lrint, -0.2L, 0);
3928 TEST_f_l (lrint, 0.5L, 0);
3929 TEST_f_l (lrint, -0.5L, 0);
3930 TEST_f_l (lrint, 0.8L, 1);
3931 TEST_f_l (lrint, -0.8L, -1);
3932
3933 TEST_f_l (lrint, 1.4L, 1);
3934 TEST_f_l (lrint, -1.4L, -1);
3935
3936 TEST_f_l (lrint, 8388600.3L, 8388600);
3937 TEST_f_l (lrint, -8388600.3L, -8388600);
3938
3939 TEST_f_l (lrint, 1071930.0008, 1071930);
3940#ifndef TEST_FLOAT
3941 TEST_f_l (lrint, 1073741824.01, 1073741824);
3942# if LONG_MAX > 281474976710656
3943 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3944# endif
3945#endif
3946 }
3947
3948 fesetround (save_round_mode);
3949
3950 END (lrint_tonearest);
3951}
3952
3953
3954static void
3955lrint_test_towardzero (void)
3956{
3957 int save_round_mode;
3958 START (lrint_towardzero);
3959
3960 save_round_mode = fegetround ();
3961
3962 if (!fesetround (FE_TOWARDZERO))
3963 {
3964 TEST_f_l (lrint, 0.0, 0);
3965 TEST_f_l (lrint, minus_zero, 0);
3966 TEST_f_l (lrint, 0.2L, 0);
3967 TEST_f_l (lrint, -0.2L, 0);
3968 TEST_f_l (lrint, 0.5L, 0);
3969 TEST_f_l (lrint, -0.5L, 0);
3970 TEST_f_l (lrint, 0.8L, 0);
3971 TEST_f_l (lrint, -0.8L, 0);
3972
3973 TEST_f_l (lrint, 1.4L, 1);
3974 TEST_f_l (lrint, -1.4L, -1);
3975
3976 TEST_f_l (lrint, 8388600.3L, 8388600);
3977 TEST_f_l (lrint, -8388600.3L, -8388600);
3978
3979 TEST_f_l (lrint, 1071930.0008, 1071930);
3980#ifndef TEST_FLOAT
3981 TEST_f_l (lrint, 1073741824.01, 1073741824);
3982# if LONG_MAX > 281474976710656
3983 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3984# endif
3985#endif
3986 }
3987
3988 fesetround (save_round_mode);
3989
3990 END (lrint_towardzero);
3991}
3992
3993
3994static void
3995lrint_test_downward (void)
3996{
3997 int save_round_mode;
3998 START (lrint_downward);
3999
4000 save_round_mode = fegetround ();
4001
4002 if (!fesetround (FE_DOWNWARD))
4003 {
4004 TEST_f_l (lrint, 0.0, 0);
4005 TEST_f_l (lrint, minus_zero, 0);
4006 TEST_f_l (lrint, 0.2L, 0);
4007 TEST_f_l (lrint, -0.2L, -1);
4008 TEST_f_l (lrint, 0.5L, 0);
4009 TEST_f_l (lrint, -0.5L, -1);
4010 TEST_f_l (lrint, 0.8L, 0);
4011 TEST_f_l (lrint, -0.8L, -1);
4012
4013 TEST_f_l (lrint, 1.4L, 1);
4014 TEST_f_l (lrint, -1.4L, -2);
4015
4016 TEST_f_l (lrint, 8388600.3L, 8388600);
4017 TEST_f_l (lrint, -8388600.3L, -8388601);
4018
4019 TEST_f_l (lrint, 1071930.0008, 1071930);
4020#ifndef TEST_FLOAT
4021 TEST_f_l (lrint, 1073741824.01, 1073741824);
4022# if LONG_MAX > 281474976710656
4023 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4024# endif
4025#endif
4026 }
4027
4028 fesetround (save_round_mode);
4029
4030 END (lrint_downward);
4031}
4032
4033
4034static void
4035lrint_test_upward (void)
4036{
4037 int save_round_mode;
4038 START (lrint_upward);
4039
4040 save_round_mode = fegetround ();
4041
4042 if (!fesetround (FE_UPWARD))
4043 {
4044 TEST_f_l (lrint, 0.0, 0);
4045 TEST_f_l (lrint, minus_zero, 0);
4046 TEST_f_l (lrint, 0.2L, 1);
4047 TEST_f_l (lrint, -0.2L, 0);
4048 TEST_f_l (lrint, 0.5L, 1);
4049 TEST_f_l (lrint, -0.5L, 0);
4050 TEST_f_l (lrint, 0.8L, 1);
4051 TEST_f_l (lrint, -0.8L, 0);
4052
4053 TEST_f_l (lrint, 1.4L, 2);
4054 TEST_f_l (lrint, -1.4L, -1);
4055
4056 TEST_f_l (lrint, 8388600.3L, 8388601);
4057 TEST_f_l (lrint, -8388600.3L, -8388600);
4058
4059#ifndef TEST_FLOAT
4060 TEST_f_l (lrint, 1071930.0008, 1071931);
4061 TEST_f_l (lrint, 1073741824.01, 1073741825);
4062# if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
89210b4c 4063 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
6624dbc0
UD
4064# endif
4065#endif
4066 }
4067
4068 fesetround (save_round_mode);
4069
4070 END (lrint_upward);
4071}
4072
4073
8847214f
UD
4074static void
4075llrint_test (void)
4076{
4077 /* XXX this test is incomplete. We need to have a way to specifiy
4078 the rounding method and test the critical cases. So far, only
4079 unproblematic numbers are tested. */
4080
4081 START (llrint);
4082
4083 TEST_f_L (llrint, 0.0, 0);
4084 TEST_f_L (llrint, minus_zero, 0);
3c6cad26
UD
4085 TEST_f_L (llrint, 0.2L, 0);
4086 TEST_f_L (llrint, -0.2L, 0);
8847214f 4087
3c6cad26
UD
4088 TEST_f_L (llrint, 1.4L, 1);
4089 TEST_f_L (llrint, -1.4L, -1);
8847214f 4090
3c6cad26
UD
4091 TEST_f_L (llrint, 8388600.3L, 8388600);
4092 TEST_f_L (llrint, -8388600.3L, -8388600);
8847214f 4093
3eb61415
UD
4094 TEST_f_l (llrint, 1071930.0008, 1071930);
4095
8847214f
UD
4096 /* Test boundary conditions. */
4097 /* 0x1FFFFF */
4098 TEST_f_L (llrint, 2097151.0,2097151LL);
4099 /* 0x800000 */
4100 TEST_f_L (llrint, 8388608.0, 8388608LL);
4101 /* 0x1000000 */
4102 TEST_f_L (llrint, 16777216.0, 16777216LL);
4103 /* 0x20000000000 */
4104 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4105 /* 0x40000000000 */
4106 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
39007ae3
UD
4107 /* 0x1000000000000 */
4108 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8847214f
UD
4109 /* 0x10000000000000 */
4110 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4111 /* 0x10000080000000 */
4112 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4113 /* 0x20000000000000 */
4114 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4115 /* 0x80000000000000 */
4116 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4117 /* 0x100000000000000 */
4118 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
f964490f
RM
4119#ifdef TEST_LDOUBLE
4120 /* The input can only be represented in long double. */
4121 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4122 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4123 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4124 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4125 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4126
4127 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4128 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4129 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4130 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4131 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4132
830fce04
RM
4133# if LDBL_MANT_DIG > 100
4134 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4135 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4136 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4137 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4138 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4139 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4140
4141 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4142 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4143 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4144 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4145 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4146 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4147#endif
4148
f964490f
RM
4149 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4150 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4151 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4152 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4153 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4154
4155 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4156 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4157 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4158 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4159 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4160
830fce04
RM
4161# if LDBL_MANT_DIG > 100
4162 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4163 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4164 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4165 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4166 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4167 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4168
4169 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4170 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4171 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4172 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4173 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4174 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4175#endif
4176
f964490f
RM
4177 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4178 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4179 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4180 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4181 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4182
4183 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4184 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4185 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4186 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4187 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
830fce04
RM
4188
4189# if LDBL_MANT_DIG > 100
4190 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4191 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4192 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4193 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4194 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4195 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4196 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4197 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4198 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4199 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4200 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4201 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4202# endif
f964490f 4203#endif
8847214f
UD
4204
4205 END (llrint);
4206}
4207
830fce04
RM
4208static void
4209llrint_test_tonearest (void)
4210{
4211 int save_round_mode;
4212 START (llrint_tonearest);
4213
4214 save_round_mode = fegetround ();
4215
4216 if (!fesetround (FE_TONEAREST))
4217 {
4218 TEST_f_L (llrint, 0.0, 0);
4219 TEST_f_L (llrint, minus_zero, 0);
4220 TEST_f_L (llrint, 0.2L, 0);
4221 TEST_f_L (llrint, -0.2L, 0);
4222
4223 TEST_f_L (llrint, 1.4L, 1);
4224 TEST_f_L (llrint, -1.4L, -1);
4225
4226 TEST_f_L (llrint, 8388600.3L, 8388600);
4227 TEST_f_L (llrint, -8388600.3L, -8388600);
4228
4229 TEST_f_l (llrint, 1071930.0008, 1071930);
4230
4231 /* Test boundary conditions. */
4232 /* 0x1FFFFF */
4233 TEST_f_L (llrint, 2097151.0,2097151LL);
4234 /* 0x800000 */
4235 TEST_f_L (llrint, 8388608.0, 8388608LL);
4236 /* 0x1000000 */
4237 TEST_f_L (llrint, 16777216.0, 16777216LL);
4238 /* 0x20000000000 */
4239 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4240 /* 0x40000000000 */
4241 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4242 /* 0x1000000000000 */
4243 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4244 /* 0x10000000000000 */
4245 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4246 /* 0x10000080000000 */
4247 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4248 /* 0x20000000000000 */
4249 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4250 /* 0x80000000000000 */
4251 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4252 /* 0x100000000000000 */
4253 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4254#ifdef TEST_LDOUBLE
4255 /* The input can only be represented in long double. */
4256 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4257 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4258 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4259 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4260 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4261
4262 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4263 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4264 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4265 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4266 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4267
4268# if LDBL_MANT_DIG > 100
4269 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4270 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4271 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4272 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4273 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4274 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4275
4276 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4277 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4278 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4279 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4280 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4281 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4282#endif
4283
4284 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4285 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4286 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4287 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4288 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4289
4290 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4291 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4292 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4293 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4294 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4295
4296# if LDBL_MANT_DIG > 100
4297 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4298 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4299 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4300 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4301 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4302 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4303
4304 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4305 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4306 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4307 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4308 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4309 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4310#endif
4311
4312 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4313 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4314 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4315 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4316 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4317
4318 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4319 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4320 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4321 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4322 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4323
4324# if LDBL_MANT_DIG > 100
4325 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4326 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4327 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4328 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4329 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4330 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4331 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4332 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4333 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4334 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4335 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4336 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4337# endif
4338#endif
4339 }
4340
4341 fesetround (save_round_mode);
4342
4343 END (llrint_tonearest);
4344}
4345
4346static void
4347llrint_test_towardzero (void)
4348{
4349 int save_round_mode;
4350 START (llrint_towardzero);
4351
4352 save_round_mode = fegetround ();
4353
4354 if (!fesetround (FE_TOWARDZERO))
4355 {
4356 TEST_f_L (llrint, 0.0, 0);
4357 TEST_f_L (llrint, minus_zero, 0);
4358 TEST_f_L (llrint, 0.2L, 0);
4359 TEST_f_L (llrint, -0.2L, 0);
4360
4361 TEST_f_L (llrint, 1.4L, 1);
4362 TEST_f_L (llrint, -1.4L, -1);
4363
4364 TEST_f_L (llrint, 8388600.3L, 8388600);
4365 TEST_f_L (llrint, -8388600.3L, -8388600);
4366
4367 TEST_f_l (llrint, 1071930.0008, 1071930);
4368
4369 /* Test boundary conditions. */
4370 /* 0x1FFFFF */
4371 TEST_f_L (llrint, 2097151.0,2097151LL);
4372 /* 0x800000 */
4373 TEST_f_L (llrint, 8388608.0, 8388608LL);
4374 /* 0x1000000 */
4375 TEST_f_L (llrint, 16777216.0, 16777216LL);
4376 /* 0x20000000000 */
4377 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4378 /* 0x40000000000 */
4379 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4380 /* 0x1000000000000 */
4381 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4382 /* 0x10000000000000 */
4383 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4384 /* 0x10000080000000 */
4385 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4386 /* 0x20000000000000 */
4387 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4388 /* 0x80000000000000 */
4389 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4390 /* 0x100000000000000 */
4391 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4392#ifdef TEST_LDOUBLE
4393 /* The input can only be represented in long double. */
4394 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4395 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4396 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4397 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4398 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4399
4400 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4401 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4402 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4403 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4404 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4405
4406# if LDBL_MANT_DIG > 100
4407 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4408 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4409 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4410 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4411 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4412 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4413
4414 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4415 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4416 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4417 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4418 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4419 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4420#endif
4421
4422 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4423 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4424 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4425 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4426 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4427
4428 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4429 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4430 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4431 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4432 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4433
4434# if LDBL_MANT_DIG > 100
4435 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4436 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4437 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4438 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4439 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4440 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4441
4442 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4443 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4444 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4445 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4446 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4447 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4448#endif
4449
4450 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4451 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4452 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4453 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4454 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4455
4456 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4457 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4458 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4459 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4460 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4461
4462# if LDBL_MANT_DIG > 100
4463 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4464 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4465 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4466 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4467 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4468 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4469 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4470 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4471 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4472 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4473 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4474 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4475# endif
4476#endif
4477 }
4478
4479 fesetround (save_round_mode);
4480
4481 END (llrint_towardzero);
4482}
4483
4484static void
4485llrint_test_downward (void)
4486{
4487 int save_round_mode;
4488 START (llrint_downward);
4489
4490 save_round_mode = fegetround ();
4491
4492 if (!fesetround (FE_DOWNWARD))
4493 {
4494 TEST_f_L (llrint, 0.0, 0);
4495 TEST_f_L (llrint, minus_zero, 0);
4496 TEST_f_L (llrint, 0.2L, 0);
4497 TEST_f_L (llrint, -0.2L, -1);
4498
4499 TEST_f_L (llrint, 1.4L, 1);
4500 TEST_f_L (llrint, -1.4L, -2);
4501
4502 TEST_f_L (llrint, 8388600.3L, 8388600);
4503 TEST_f_L (llrint, -8388600.3L, -8388601);
4504
4505 TEST_f_l (llrint, 1071930.0008, 1071930);
4506
4507 /* Test boundary conditions. */
4508 /* 0x1FFFFF */
4509 TEST_f_L (llrint, 2097151.0,2097151LL);
4510 /* 0x800000 */
4511 TEST_f_L (llrint, 8388608.0, 8388608LL);
4512 /* 0x1000000 */
4513 TEST_f_L (llrint, 16777216.0, 16777216LL);
4514 /* 0x20000000000 */
4515 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4516 /* 0x40000000000 */
4517 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4518 /* 0x1000000000000 */
4519 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4520 /* 0x10000000000000 */
4521 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4522 /* 0x10000080000000 */
4523 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4524 /* 0x20000000000000 */
4525 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4526 /* 0x80000000000000 */
4527 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4528 /* 0x100000000000000 */
4529 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4530#ifdef TEST_LDOUBLE
4531 /* The input can only be represented in long double. */
4532 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4533 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4534 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4535 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4536 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4537
4538 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4539 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4540 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4541 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4542 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4543 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4544
4545 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4546 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
4547 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
4548 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4549 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4550
4551 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
4552 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
4553 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
4554 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4555 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4556 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4557
4558 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4559 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4560 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4561 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4562 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4563
4564 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4565 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4566 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4567 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4568 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4569 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4570
4571 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4572 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
4573 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
4574 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4575 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4576
4577 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
4578 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
4579 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
4580 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4581 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4582 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4583
4584 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4585 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4586 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4587 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4588 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4589
4590 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4591 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
4592 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
4593 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4594 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4595
4596# if LDBL_MANT_DIG > 100
4597 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4598 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4599 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4600 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4601 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4602 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
4603 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4604 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
4605 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4606 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4607 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4608 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4609# endif
4610#endif
4611 }
4612
4613 fesetround (save_round_mode);
4614
4615 END (llrint_downward);
4616}
4617
4618static void
4619llrint_test_upward (void)
4620{
4621 int save_round_mode;
4622 START (llrint_upward);
4623
4624 save_round_mode = fegetround ();
4625
4626 if (!fesetround (FE_UPWARD))
4627 {
4628 TEST_f_L (llrint, 0.0, 0);
4629 TEST_f_L (llrint, minus_zero, 0);
4630 TEST_f_L (llrint, 0.2L, 1);
4631 TEST_f_L (llrint, -0.2L, 0);
4632
4633 TEST_f_L (llrint, 1.4L, 2);
4634 TEST_f_L (llrint, -1.4L, -1);
4635
4636 TEST_f_L (llrint, 8388600.3L, 8388601);
4637 TEST_f_L (llrint, -8388600.3L, -8388600);
4638#ifndef TEST_FLOAT
4639 TEST_f_l (llrint, 1071930.0008, 1071931);
4640#endif
4641 /* Test boundary conditions. */
4642 /* 0x1FFFFF */
4643 TEST_f_L (llrint, 2097151.0,2097151LL);
4644 /* 0x800000 */
4645 TEST_f_L (llrint, 8388608.0, 8388608LL);
4646 /* 0x1000000 */
4647 TEST_f_L (llrint, 16777216.0, 16777216LL);
4648 /* 0x20000000000 */
4649 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4650 /* 0x40000000000 */
4651 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4652 /* 0x1000000000000 */
4653 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4654 /* 0x10000000000000 */
4655 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4656 /* 0x10000080000000 */
4657 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4658 /* 0x20000000000000 */
4659 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4660 /* 0x80000000000000 */
4661 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4662 /* 0x100000000000000 */
4663 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4664#ifdef TEST_LDOUBLE
4665 /* The input can only be represented in long double. */
4666 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4667 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
4668 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
4669 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4670 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4671
4672 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
4673 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
4674 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
4675 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4676 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4677 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4678
4679 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4680 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4681 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4682 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4683 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4684
4685 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4686 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4687 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4688 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4689 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4690 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4691
4692 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4693 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
4694 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
4695 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4696 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4697
4698 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
4699 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
4700 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
4701 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4702 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4703 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4704
4705 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4706 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4707 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4708 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4709 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4710
4711 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4712 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4713 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4714 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4715 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4716 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4717
4718 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4719 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
4720 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
4721 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4722 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4723
4724 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4725 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4726 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4727 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4728 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4729
4730# if LDBL_MANT_DIG > 100
4731 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4732 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4733 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4734 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4735 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
4736 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4737 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
4738 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4739 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4740 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4741 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4742 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4743# endif
4744#endif
4745 }
4746
4747 fesetround (save_round_mode);
4748
4749 END (llrint_upward);
4750}
4751
2550dfe9 4752
8847214f
UD
4753static void
4754log_test (void)
4755{
e6d3c4a7
AJ
4756 errno = 0;
4757 FUNC(log) (1);
4758 if (errno == ENOSYS)
4759 /* Function not implemented. */
4760 return;
8847214f
UD
4761 START (log);
4762
4763 TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4764 TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4765
4766 TEST_f_f (log, 1, 0);
4767
4768 TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
6b2665f5 4769 TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f 4770 TEST_f_f (log, plus_infty, plus_infty);
6b2665f5 4771 TEST_f_f (log, nan_value, nan_value);
8847214f
UD
4772
4773 TEST_f_f (log, M_El, 1);
4774 TEST_f_f (log, 1.0 / M_El, -1);
4775 TEST_f_f (log, 2, M_LN2l);
4776 TEST_f_f (log, 10, M_LN10l);
2550dfe9 4777 TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
8847214f
UD
4778
4779 END (log);
4780}
4781
4782
4783static void
4784log10_test (void)
4785{
e6d3c4a7
AJ
4786 errno = 0;
4787 FUNC(log10) (1);
4788 if (errno == ENOSYS)
4789 /* Function not implemented. */
4790 return;
4791
8847214f
UD
4792 START (log10);
4793
4794 TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4795 TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4796
4797 TEST_f_f (log10, 1, 0);
4798
4799 /* log10 (x) == NaN plus invalid exception if x < 0. */
4800 TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
6b2665f5 4801 TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
4802
4803 TEST_f_f (log10, plus_infty, plus_infty);
15daa639 4804 TEST_f_f (log10, nan_value, nan_value);
8847214f
UD
4805
4806 TEST_f_f (log10, 0.1L, -1);
4807 TEST_f_f (log10, 10.0, 1);
4808 TEST_f_f (log10, 100.0, 2);
4809 TEST_f_f (log10, 10000.0, 4);
4810 TEST_f_f (log10, M_El, M_LOG10El);
2550dfe9 4811 TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
8847214f
UD
4812
4813 END (log10);
4814}
4815
4816
4817static void
4818log1p_test (void)
4819{
e6d3c4a7
AJ
4820 errno = 0;
4821 FUNC(log1p) (0);
4822 if (errno == ENOSYS)
4823 /* Function not implemented. */
4824 return;
4825
8847214f
UD
4826 START (log1p);
4827
4828 TEST_f_f (log1p, 0, 0);
4829 TEST_f_f (log1p, minus_zero, minus_zero);
4830
4831 TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4832 TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
6b2665f5 4833 TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
4834
4835 TEST_f_f (log1p, plus_infty, plus_infty);
15daa639 4836 TEST_f_f (log1p, nan_value, nan_value);
8847214f
UD
4837
4838 TEST_f_f (log1p, M_El - 1.0, 1);
4839
2550dfe9
AJ
4840 TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
4841 TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
8847214f
UD
4842
4843 END (log1p);
4844}
4845
4846
4847static void
4848log2_test (void)
4849{
e6d3c4a7
AJ
4850 errno = 0;
4851 FUNC(log2) (1);
4852 if (errno == ENOSYS)
4853 /* Function not implemented. */
4854 return;
4855
8847214f
UD
4856 START (log2);
4857
4858 TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4859 TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4860
4861 TEST_f_f (log2, 1, 0);
4862
4863 TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
6b2665f5 4864 TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
4865
4866 TEST_f_f (log2, plus_infty, plus_infty);
15daa639 4867 TEST_f_f (log2, nan_value, nan_value);
8847214f
UD
4868
4869 TEST_f_f (log2, M_El, M_LOG2El);
4870 TEST_f_f (log2, 2.0, 1);
4871 TEST_f_f (log2, 16.0, 4);
4872 TEST_f_f (log2, 256.0, 8);
2550dfe9 4873 TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
8847214f
UD
4874
4875 END (log2);
4876}
4877
4878
4879static void
4880logb_test (void)
4881{
4882 START (logb);
4883
4884 TEST_f_f (logb, plus_infty, plus_infty);
4885 TEST_f_f (logb, minus_infty, plus_infty);
4886
4887 TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4888
4889 TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
15daa639 4890 TEST_f_f (logb, nan_value, nan_value);
8847214f
UD
4891
4892 TEST_f_f (logb, 1, 0);
4893 TEST_f_f (logb, M_El, 1);
4894 TEST_f_f (logb, 1024, 10);
4895 TEST_f_f (logb, -2000, 10);
4896
4897 END (logb);
4898}
4899
2550dfe9 4900
8847214f
UD
4901static void
4902lround_test (void)
4903{
4904 START (lround);
4905
4906 TEST_f_l (lround, 0, 0);
4907 TEST_f_l (lround, minus_zero, 0);
3c6cad26
UD
4908 TEST_f_l (lround, 0.2L, 0.0);
4909 TEST_f_l (lround, -0.2L, 0);
8847214f
UD
4910 TEST_f_l (lround, 0.5, 1);
4911 TEST_f_l (lround, -0.5, -1);
3c6cad26
UD
4912 TEST_f_l (lround, 0.8L, 1);
4913 TEST_f_l (lround, -0.8L, -1);
8847214f
UD
4914 TEST_f_l (lround, 1.5, 2);
4915 TEST_f_l (lround, -1.5, -2);
4916 TEST_f_l (lround, 22514.5, 22515);
4917 TEST_f_l (lround, -22514.5, -22515);
3eb61415 4918 TEST_f_l (lround, 1071930.0008, 1071930);
8847214f 4919#ifndef TEST_FLOAT
3eb61415 4920 TEST_f_l (lround, 1073741824.01, 1073741824);
39007ae3
UD
4921# if LONG_MAX > 281474976710656
4922 TEST_f_l (lround, 281474976710656.025, 281474976710656);
169d7f11 4923 TEST_f_l (lround, 18014398509481974, 18014398509481974);
39007ae3 4924# endif
8847214f
UD
4925 TEST_f_l (lround, 2097152.5, 2097153);
4926 TEST_f_l (lround, -2097152.5, -2097153);
c1e6b459
UD
4927 /* nextafter(0.5,-1) */
4928 TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
4929 /* nextafter(-0.5,1) */
4930 TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
4931#else
4932 /* nextafter(0.5,-1) */
4933 TEST_f_l (lround, 0x1.fffffp-2, 0);
4934 /* nextafter(-0.5,1) */
4935 TEST_f_l (lround, -0x1.fffffp-2, 0);
4936 TEST_f_l (lround, 0x1.fffffep+23, 16777215);
4937 TEST_f_l (lround, -0x1.fffffep+23, -16777215);
8847214f
UD
4938#endif
4939 END (lround);
4940}
4941
4942
4943static void
4944llround_test (void)
4945{
4946 START (llround);
4947
4948 TEST_f_L (llround, 0, 0);
4949 TEST_f_L (llround, minus_zero, 0);
3c6cad26
UD
4950 TEST_f_L (llround, 0.2L, 0.0);
4951 TEST_f_L (llround, -0.2L, 0);
8847214f
UD
4952 TEST_f_L (llround, 0.5, 1);
4953 TEST_f_L (llround, -0.5, -1);
3c6cad26
UD
4954 TEST_f_L (llround, 0.8L, 1);
4955 TEST_f_L (llround, -0.8L, -1);
8847214f
UD
4956 TEST_f_L (llround, 1.5, 2);
4957 TEST_f_L (llround, -1.5, -2);
4958 TEST_f_L (llround, 22514.5, 22515);
4959 TEST_f_L (llround, -22514.5, -22515);
3eb61415 4960 TEST_f_l (llround, 1071930.0008, 1071930);
8847214f
UD
4961#ifndef TEST_FLOAT
4962 TEST_f_L (llround, 2097152.5, 2097153);
4963 TEST_f_L (llround, -2097152.5, -2097153);
4964 TEST_f_L (llround, 34359738368.5, 34359738369ll);
4965 TEST_f_L (llround, -34359738368.5, -34359738369ll);
169d7f11 4966 TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
8847214f
UD
4967#endif
4968
4969 /* Test boundary conditions. */
4970 /* 0x1FFFFF */
4971 TEST_f_L (llround, 2097151.0, 2097151LL);
4972 /* 0x800000 */
4973 TEST_f_L (llround, 8388608.0, 8388608LL);
4974 /* 0x1000000 */
4975 TEST_f_L (llround, 16777216.0, 16777216LL);
4976 /* 0x20000000000 */
4977 TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
4978 /* 0x40000000000 */
4979 TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
39007ae3
UD
4980 /* 0x1000000000000 */
4981 TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
8847214f
UD
4982 /* 0x10000000000000 */
4983 TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
4984 /* 0x10000080000000 */
3eb61415 4985 TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
8847214f
UD
4986 /* 0x20000000000000 */
4987 TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
4988 /* 0x80000000000000 */
4989 TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
4990 /* 0x100000000000000 */
4991 TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
4992
601d2942
UD
4993#ifndef TEST_FLOAT
4994 /* 0x100000000 */
4995 TEST_f_L (llround, 4294967295.5, 4294967296LL);
4996 /* 0x200000000 */
4997 TEST_f_L (llround, 8589934591.5, 8589934592LL);
c1e6b459
UD
4998
4999 /* nextafter(0.5,-1) */
5000 TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
5001 /* nextafter(-0.5,1) */
5002 TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
5003 /* On PowerPC an exponent of '52' is the largest incrementally
5004 * representable sequence of whole-numbers in the 'double' range. We test
5005 * lround to make sure that a guard bit set during the lround operation
5006 * hasn't forced an erroneous shift giving us an incorrect result. The odd
5007 * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
5008 * rightmost bit set. */
5009 /* +-(2^52+1) */
5010 TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
5011 TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
5012 /* +-(2^53-1): Input is the last (positive and negative) incrementally
5013 * representable whole-number in the 'double' range that might round
5014 * erroneously. */
5015 TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
5016 TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
5017#else
5018 /* nextafter(0.5,-1) */
5019 TEST_f_L (llround, 0x1.fffffep-2, 0);
5020 /* nextafter(-0.5,1) */
5021 TEST_f_L (llround, -0x1.fffffep-2, 0);
5022 /* As above, on PowerPC an exponent of '23' is the largest incrementally
5023 * representable sequence of whole-numbers in the 'float' range.
5024 * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected. */
5025 TEST_f_L (llround, 0x1.000002p+23,8388609);
5026 TEST_f_L (llround, -0x1.000002p+23,-8388609);
5027 TEST_f_L (llround, 0x1.fffffep+23, 16777215);
5028 TEST_f_L (llround, -0x1.fffffep+23, -16777215);
601d2942
UD
5029#endif
5030
c1e6b459 5031
f964490f
RM
5032#ifdef TEST_LDOUBLE
5033 /* The input can only be represented in long double. */
5034 TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
5035 TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
5036 TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
5037 TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
5038 TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
5039
830fce04
RM
5040# if LDBL_MANT_DIG > 100
5041 TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
5042 TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
5043 TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
5044 TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
5045 TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
5046 TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
5047
5048 TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
5049 TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
5050 TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
5051 TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
5052 TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
5053 TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
5054# endif
5055
f964490f
RM
5056 TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
5057 TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
5058 TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
5059 TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
5060 TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
5061
5062 TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
5063 TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
5064 TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
5065 TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
5066 TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
5067
830fce04
RM
5068# if LDBL_MANT_DIG > 100
5069 TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
5070 TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
5071 TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
5072 TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
5073 TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
5074 TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
5075
5076 TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
5077 TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
5078 TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
5079 TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
5080 TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
5081 TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
5082# endif
5083
f964490f
RM
5084 TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
5085 TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
5086 TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
5087 TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
5088 TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
5089
5090 TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
5091 TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
5092 TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
5093 TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
5094 TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
5095
5096 TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
5097 TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
5098 TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
5099 TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
5100 TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
1e832e37
RM
5101
5102 TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
5103 TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
5104 TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
5105 TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
5106 TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
5107 TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
f964490f
RM
5108#endif
5109
8847214f
UD
5110 END (llround);
5111}
5112
5113static void
5114modf_test (void)
5115{
5116 FLOAT x;
5117
5118 START (modf);
5119
5120 TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
5121 TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
5122 TEST_fF_f1 (modf, nan_value, nan_value, nan_value);
5123 TEST_fF_f1 (modf, 0, 0, 0);
5124 TEST_fF_f1 (modf, 1.5, 0.5, 1);
5125 TEST_fF_f1 (modf, 2.5, 0.5, 2);
5126 TEST_fF_f1 (modf, -2.5, -0.5, -2);
5127 TEST_fF_f1 (modf, 20, 0, 20);
5128 TEST_fF_f1 (modf, 21, 0, 21);
5129 TEST_fF_f1 (modf, 89.5, 0.5, 89);
5130
5131 END (modf);
5132}
5133
5134
5135static void
5136nearbyint_test (void)
5137{
5138 START (nearbyint);
5139
5140 TEST_f_f (nearbyint, 0.0, 0.0);
5141 TEST_f_f (nearbyint, minus_zero, minus_zero);
5142 TEST_f_f (nearbyint, plus_infty, plus_infty);
5143 TEST_f_f (nearbyint, minus_infty, minus_infty);
15daa639 5144 TEST_f_f (nearbyint, nan_value, nan_value);
8847214f 5145
a1267ba1
AZ
5146 /* Subnormal values */
5147 TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
5148 TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
5149
1dc23588
UD
5150 /* Default rounding mode is round to nearest. */
5151 TEST_f_f (nearbyint, 0.5, 0.0);
5152 TEST_f_f (nearbyint, 1.5, 2.0);
5153 TEST_f_f (nearbyint, -0.5, minus_zero);
5154 TEST_f_f (nearbyint, -1.5, -2.0);
bdf09fab 5155
af0498dc
UD
5156 TEST_f_f (nearbyint, 262144.75, 262145.0);
5157 TEST_f_f (nearbyint, 262142.75, 262143.0);
5158 TEST_f_f (nearbyint, 524286.75, 524287.0);
5159 TEST_f_f (nearbyint, 524288.75, 524289.0);
5160
6cbeae47
JM
5161 TEST_f_f (nearbyint, 1048576.75, 1048577.0);
5162 TEST_f_f (nearbyint, 2097152.75, 2097153.0);
5163 TEST_f_f (nearbyint, 2492472.75, 2492473.0);
5164 TEST_f_f (nearbyint, 2886220.75, 2886221.0);
5165 TEST_f_f (nearbyint, 3058792.75, 3058793.0);
5166 TEST_f_f (nearbyint, -1048576.75, -1048577.0);
5167 TEST_f_f (nearbyint, -2097152.75, -2097153.0);
5168 TEST_f_f (nearbyint, -2492472.75, -2492473.0);
5169 TEST_f_f (nearbyint, -2886220.75, -2886221.0);
5170 TEST_f_f (nearbyint, -3058792.75, -3058793.0);
5171#ifndef TEST_FLOAT
5172 TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
5173 TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
5174 TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
5175 TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
5176 TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
5177 TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
5178 TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
5179 TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
5180 TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
5181 TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
5182#endif
5183
8847214f
UD
5184 END (nearbyint);
5185}
5186
5187static void
5188nextafter_test (void)
5189{
5190
5191 START (nextafter);
5192
5193 TEST_ff_f (nextafter, 0, 0, 0);
5194 TEST_ff_f (nextafter, minus_zero, 0, 0);
5195 TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
5196 TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
5197
5198 TEST_ff_f (nextafter, 9, 9, 9);
5199 TEST_ff_f (nextafter, -9, -9, -9);
5200 TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
5201 TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
5202
3c6cad26
UD
5203 TEST_ff_f (nextafter, nan_value, 1.1L, nan_value);
5204 TEST_ff_f (nextafter, 1.1L, nan_value, nan_value);
8847214f
UD
5205 TEST_ff_f (nextafter, nan_value, nan_value, nan_value);
5206
64b02fd2
UD
5207 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
5208 LDBL_MAX, DBL_MAX, FLT_MAX);
5209 TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty);
5210 TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty);
5211
757de559
UD
5212#ifdef TEST_LDOUBLE
5213 // XXX Enable once gcc is fixed.
5214 //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
5215#endif
5216
8847214f
UD
5217 /* XXX We need the hexadecimal FP number representation here for further
5218 tests. */
5219
5220 END (nextafter);
5221}
5222
fe559c5e 5223
8847214f
UD
5224static void
5225nexttoward_test (void)
5226{
5227 START (nexttoward);
5228 TEST_ff_f (nexttoward, 0, 0, 0);
5229 TEST_ff_f (nexttoward, minus_zero, 0, 0);
5230 TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
5231 TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
5232
5233 TEST_ff_f (nexttoward, 9, 9, 9);
5234 TEST_ff_f (nexttoward, -9, -9, -9);
5235 TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
5236 TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
5237
3c6cad26
UD
5238 TEST_ff_f (nexttoward, nan_value, 1.1L, nan_value);
5239 TEST_ff_f (nexttoward, 1.1L, nan_value, nan_value);
8847214f
UD
5240 TEST_ff_f (nexttoward, nan_value, nan_value, nan_value);
5241
5242 /* XXX We need the hexadecimal FP number representation here for further
5243 tests. */
5244
5245 END (nexttoward);
5246}
8847214f
UD
5247
5248
5249static void
5250pow_test (void)
5251{
5252
e6d3c4a7
AJ
5253 errno = 0;
5254 FUNC(pow) (0, 0);
5255 if (errno == ENOSYS)
5256 /* Function not implemented. */
5257 return;
5258
8847214f
UD
5259 START (pow);
5260
5261 TEST_ff_f (pow, 0, 0, 1);
5262 TEST_ff_f (pow, 0, minus_zero, 1);
5263 TEST_ff_f (pow, minus_zero, 0, 1);
5264 TEST_ff_f (pow, minus_zero, minus_zero, 1);
5265
5266 TEST_ff_f (pow, 10, 0, 1);
5267 TEST_ff_f (pow, 10, minus_zero, 1);
5268 TEST_ff_f (pow, -10, 0, 1);
5269 TEST_ff_f (pow, -10, minus_zero, 1);
5270
5271 TEST_ff_f (pow, nan_value, 0, 1);
5272 TEST_ff_f (pow, nan_value, minus_zero, 1);
5273
5274
15daa639 5275#ifndef TEST_INLINE
3c6cad26 5276 TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
8847214f 5277 TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
3c6cad26 5278 TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
8847214f
UD
5279 TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
5280
5281 TEST_ff_f (pow, 0.9L, plus_infty, 0);
5282 TEST_ff_f (pow, 1e-7L, plus_infty, 0);
5283 TEST_ff_f (pow, -0.9L, plus_infty, 0);
5284 TEST_ff_f (pow, -1e-7L, plus_infty, 0);
5285
3c6cad26 5286 TEST_ff_f (pow, 1.1L, minus_infty, 0);
8847214f 5287 TEST_ff_f (pow, plus_infty, minus_infty, 0);
3c6cad26 5288 TEST_ff_f (pow, -1.1L, minus_infty, 0);
8847214f
UD
5289 TEST_ff_f (pow, minus_infty, minus_infty, 0);
5290
5291 TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
5292 TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
5293 TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
5294 TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
5295
5296 TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
5297 TEST_ff_f (pow, plus_infty, 1, plus_infty);
5298 TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
5299
5300 TEST_ff_f (pow, plus_infty, -1e-7L, 0);
5301 TEST_ff_f (pow, plus_infty, -1, 0);
5302 TEST_ff_f (pow, plus_infty, -1e7L, 0);
5303
5304 TEST_ff_f (pow, minus_infty, 1, minus_infty);
5305 TEST_ff_f (pow, minus_infty, 11, minus_infty);
5306 TEST_ff_f (pow, minus_infty, 1001, minus_infty);
5307
5308 TEST_ff_f (pow, minus_infty, 2, plus_infty);
5309 TEST_ff_f (pow, minus_infty, 12, plus_infty);
5310 TEST_ff_f (pow, minus_infty, 1002, plus_infty);
3c6cad26
UD
5311 TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
5312 TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
5313 TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
5314 TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
8847214f
UD
5315
5316 TEST_ff_f (pow, minus_infty, -1, minus_zero);
5317 TEST_ff_f (pow, minus_infty, -11, minus_zero);
5318 TEST_ff_f (pow, minus_infty, -1001, minus_zero);
5319
5320 TEST_ff_f (pow, minus_infty, -2, 0);
5321 TEST_ff_f (pow, minus_infty, -12, 0);
5322 TEST_ff_f (pow, minus_infty, -1002, 0);
3c6cad26
UD
5323 TEST_ff_f (pow, minus_infty, -0.1L, 0);
5324 TEST_ff_f (pow, minus_infty, -1.1L, 0);
5325 TEST_ff_f (pow, minus_infty, -11.1L, 0);
5326 TEST_ff_f (pow, minus_infty, -1001.1L, 0);
15daa639 5327#endif
8847214f
UD
5328
5329 TEST_ff_f (pow, nan_value, nan_value, nan_value);
5330 TEST_ff_f (pow, 0, nan_value, nan_value);
6571c570 5331 TEST_ff_f (pow, 1, nan_value, 1);
8847214f
UD
5332 TEST_ff_f (pow, -1, nan_value, nan_value);
5333 TEST_ff_f (pow, nan_value, 1, nan_value);
5334 TEST_ff_f (pow, nan_value, -1, nan_value);
5335
5336 /* pow (x, NaN) == NaN. */
5337 TEST_ff_f (pow, 3.0, nan_value, nan_value);
8f3edfee
UD
5338 TEST_ff_f (pow, minus_zero, nan_value, nan_value);
5339 TEST_ff_f (pow, plus_infty, nan_value, nan_value);
5340 TEST_ff_f (pow, -3.0, nan_value, nan_value);
5341 TEST_ff_f (pow, minus_infty, nan_value, nan_value);
5342
5343 TEST_ff_f (pow, nan_value, 3.0, nan_value);
5344 TEST_ff_f (pow, nan_value, -3.0, nan_value);
5345 TEST_ff_f (pow, nan_value, plus_infty, nan_value);
5346 TEST_ff_f (pow, nan_value, minus_infty, nan_value);
5347 TEST_ff_f (pow, nan_value, 2.5, nan_value);
5348 TEST_ff_f (pow, nan_value, -2.5, nan_value);
8847214f 5349
6571c570
UD
5350 TEST_ff_f (pow, 1, plus_infty, 1);
5351 TEST_ff_f (pow, -1, plus_infty, 1);
5352 TEST_ff_f (pow, 1, minus_infty, 1);
5353 TEST_ff_f (pow, -1, minus_infty, 1);
164f863e
UD
5354 TEST_ff_f (pow, 1, 1, 1);
5355 TEST_ff_f (pow, 1, -1, 1);
5356 TEST_ff_f (pow, 1, 1.25, 1);
5357 TEST_ff_f (pow, 1, -1.25, 1);
5358 TEST_ff_f (pow, 1, 0x1p62L, 1);
5359 TEST_ff_f (pow, 1, 0x1p63L, 1);
5360 TEST_ff_f (pow, 1, 0x1p64L, 1);
5361 TEST_ff_f (pow, 1, 0x1p72L, 1);
5362
5363 /* pow (x, +-0) == 1. */
5364 TEST_ff_f (pow, plus_infty, 0, 1);
5365 TEST_ff_f (pow, plus_infty, minus_zero, 1);
5366 TEST_ff_f (pow, minus_infty, 0, 1);
5367 TEST_ff_f (pow, minus_infty, minus_zero, 1);
5368 TEST_ff_f (pow, 32.75L, 0, 1);
5369 TEST_ff_f (pow, 32.75L, minus_zero, 1);
5370 TEST_ff_f (pow, -32.75L, 0, 1);
5371 TEST_ff_f (pow, -32.75L, minus_zero, 1);
5372 TEST_ff_f (pow, 0x1p72L, 0, 1);
5373 TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
5374 TEST_ff_f (pow, 0x1p-72L, 0, 1);
5375 TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
8847214f 5376
3c6cad26
UD
5377 TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5378 TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION);
5379 TEST_ff_f (pow, -10.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5380 TEST_ff_f (pow, -10.1L, -1.1L, nan_value, INVALID_EXCEPTION);
8847214f 5381
002a604f 5382 errno = 0;
8847214f 5383 TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
5384 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5385 errno = 0;
8847214f 5386 TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
5387 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5388 errno = 0;
8847214f 5389 TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
5390 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5391 errno = 0;
5392 TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5393 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
8847214f 5394
002a604f 5395 errno = 0;
8847214f 5396 TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
5397 check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5398 errno = 0;
3c6cad26 5399 TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
5400 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
5401 errno = 0;
8847214f 5402 TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f
UD
5403 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5404 errno = 0;
3c6cad26 5405 TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
002a604f 5406 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
8847214f 5407
164f863e
UD
5408 TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty);
5409 TEST_ff_f (pow, 10, -0x1p72L, 0);
5410 TEST_ff_f (pow, max_value, max_value, plus_infty);
5411 TEST_ff_f (pow, 10, -max_value, 0);
8847214f
UD
5412
5413 TEST_ff_f (pow, 0, 1, 0);
5414 TEST_ff_f (pow, 0, 11, 0);
5415
5416 TEST_ff_f (pow, minus_zero, 1, minus_zero);
5417 TEST_ff_f (pow, minus_zero, 11, minus_zero);
5418
8847214f 5419 TEST_ff_f (pow, 0, 2, 0);
3c6cad26 5420 TEST_ff_f (pow, 0, 11.1L, 0);
8847214f 5421
8847214f 5422 TEST_ff_f (pow, minus_zero, 2, 0);
3c6cad26 5423 TEST_ff_f (pow, minus_zero, 11.1L, 0);
164f863e
UD
5424 TEST_ff_f (pow, 0, plus_infty, 0);
5425 TEST_ff_f (pow, minus_zero, plus_infty, 0);
8847214f 5426
15daa639 5427#ifndef TEST_INLINE
8847214f
UD
5428 /* pow (x, +inf) == +inf for |x| > 1. */
5429 TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
5430
5431 /* pow (x, +inf) == +0 for |x| < 1. */
5432 TEST_ff_f (pow, 0.5, plus_infty, 0.0);
5433
5434 /* pow (x, -inf) == +0 for |x| > 1. */
5435 TEST_ff_f (pow, 1.5, minus_infty, 0.0);
5436
5437 /* pow (x, -inf) == +inf for |x| < 1. */
5438 TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
15daa639 5439#endif
8847214f
UD
5440
5441 /* pow (+inf, y) == +inf for y > 0. */
5442 TEST_ff_f (pow, plus_infty, 2, plus_infty);
5443
5444 /* pow (+inf, y) == +0 for y < 0. */
5445 TEST_ff_f (pow, plus_infty, -1, 0.0);
5446
5447 /* pow (-inf, y) == -inf for y an odd integer > 0. */
5448 TEST_ff_f (pow, minus_infty, 27, minus_infty);
5449
5450 /* pow (-inf, y) == +inf for y > 0 and not an odd integer. */
5451 TEST_ff_f (pow, minus_infty, 28, plus_infty);
5452
5453 /* pow (-inf, y) == -0 for y an odd integer < 0. */
5454 TEST_ff_f (pow, minus_infty, -3, minus_zero);
5455 /* pow (-inf, y) == +0 for y < 0 and not an odd integer. */
5456 TEST_ff_f (pow, minus_infty, -2.0, 0.0);
5457
5458 /* pow (+0, y) == +0 for y an odd integer > 0. */
5459 TEST_ff_f (pow, 0.0, 27, 0.0);
5460
5461 /* pow (-0, y) == -0 for y an odd integer > 0. */
5462 TEST_ff_f (pow, minus_zero, 27, minus_zero);
5463
5464 /* pow (+0, y) == +0 for y > 0 and not an odd integer. */
5465 TEST_ff_f (pow, 0.0, 4, 0.0);
5466
5467 /* pow (-0, y) == +0 for y > 0 and not an odd integer. */
5468 TEST_ff_f (pow, minus_zero, 4, 0.0);
5469
164f863e
UD
5470 TEST_ff_f (pow, 16, 0.25L, 2);
5471 TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
5472 TEST_ff_f (pow, 2, 4, 16);
5473 TEST_ff_f (pow, 256, 8, 0x1p64L);
5474
2550dfe9 5475 TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
8847214f 5476
4c95adde 5477#if defined TEST_DOUBLE || defined TEST_LDOUBLE
8847214f
UD
5478 TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0);
5479#endif
5480
5481 END (pow);
5482}
5483
b7cd39e8
JM
5484
5485static void
5486pow_test_tonearest (void)
5487{
5488 int save_round_mode;
5489 errno = 0;
5490 FUNC(pow) (0, 0);
5491 if (errno == ENOSYS)
5492 /* Function not implemented. */
5493 return;
5494
5495 START (pow_tonearest);
5496
5497 save_round_mode = fegetround ();
5498
5499 if (!fesetround (FE_TONEAREST))
5500 {
5501 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5502 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5503 }
5504
5505 fesetround (save_round_mode);
5506
5507 END (pow_tonearest);
5508}
5509
5510
5511static void
5512pow_test_towardzero (void)
5513{
5514 int save_round_mode;
5515 errno = 0;
5516 FUNC(pow) (0, 0);
5517 if (errno == ENOSYS)
5518 /* Function not implemented. */
5519 return;
5520
5521 START (pow_towardzero);
5522
5523 save_round_mode = fegetround ();
5524
5525 if (!fesetround (FE_TOWARDZERO))
5526 {
5527 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5528 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5529 }
5530
5531 fesetround (save_round_mode);
5532
5533 END (pow_towardzero);
5534}
5535
5536
5537static void
5538pow_test_downward (void)
5539{
5540 int save_round_mode;
5541 errno = 0;
5542 FUNC(pow) (0, 0);
5543 if (errno == ENOSYS)
5544 /* Function not implemented. */
5545 return;
5546
5547 START (pow_downward);
5548
5549 save_round_mode = fegetround ();
5550
5551 if (!fesetround (FE_DOWNWARD))
5552 {
5553 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5554 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5555 }
5556
5557 fesetround (save_round_mode);
5558
5559 END (pow_downward);
5560}
5561
5562
5563static void
5564pow_test_upward (void)
5565{
5566 int save_round_mode;
5567 errno = 0;
5568 FUNC(pow) (0, 0);
5569 if (errno == ENOSYS)
5570 /* Function not implemented. */
5571 return;
5572
5573 START (pow_upward);
5574
5575 save_round_mode = fegetround ();
5576
5577 if (!fesetround (FE_UPWARD))
5578 {
5579 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5580 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5581 }
5582
5583 fesetround (save_round_mode);
5584
5585 END (pow_upward);
5586}
5587
5588
8847214f
UD
5589static void
5590remainder_test (void)
5591{
aaca11d8
UD
5592 errno = 0;
5593 FUNC(remainder) (1.625, 1.0);
5594 if (errno == ENOSYS)
5595 /* Function not implemented. */
5596 return;
8847214f
UD
5597
5598 START (remainder);
5599
bf582445 5600 errno = 0;
8847214f 5601 TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
bf582445
AJ
5602 check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
5603 errno = 0;
8847214f 5604 TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
bf582445
AJ
5605 check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
5606 errno = 0;
8847214f 5607 TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
bf582445
AJ
5608 check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5609 errno = 0;
8847214f 5610 TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
bf582445
AJ
5611 check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5612 errno = 0;
15daa639 5613 TEST_ff_f (remainder, nan_value, nan_value, nan_value);
bf582445
AJ
5614 check_int ("errno for remainder(NAN, NAN) unchanged", errno, 0, 0, 0, 0);
5615 errno = 0;
5616 TEST_ff_f (remainder, 0, nan_value, nan_value);
5617 check_int ("errno for remainder(0, NAN) unchanged", errno, 0, 0, 0, 0);
5618 errno = 0;
5619 TEST_ff_f (remainder, nan_value, 0, nan_value);
5620 check_int ("errno for remainder(NaN, 0) unchanged", errno, 0, 0, 0, 0);
8847214f
UD
5621
5622 TEST_ff_f (remainder, 1.625, 1.0, -0.375);
5623 TEST_ff_f (remainder, -1.625, 1.0, 0.375);
5624 TEST_ff_f (remainder, 1.625, -1.0, -0.375);
5625 TEST_ff_f (remainder, -1.625, -1.0, 0.375);
5626 TEST_ff_f (remainder, 5.0, 2.0, 1.0);
5627 TEST_ff_f (remainder, 3.0, 2.0, -1.0);
5628
5629 END (remainder);
5630}
5631
5632static void
5633remquo_test (void)
5634{
5635 /* x is needed. */
5636 int x;
5637
aaca11d8
UD
5638 errno = 0;
5639 FUNC(remquo) (1.625, 1.0, &x);
5640 if (errno == ENOSYS)
5641 /* Function not implemented. */
5642 return;
5643
8847214f
UD
5644 START (remquo);
5645
5646 TEST_ffI_f1 (remquo, 1, 0, nan_value, IGNORE, INVALID_EXCEPTION);
5647 TEST_ffI_f1 (remquo, 1, minus_zero, nan_value, IGNORE, INVALID_EXCEPTION);
5648 TEST_ffI_f1 (remquo, plus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
5649 TEST_ffI_f1 (remquo, minus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
15daa639 5650 TEST_ffI_f1 (remquo, nan_value, nan_value, nan_value, IGNORE);
8847214f
UD
5651
5652 TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
5653 TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
5654 TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
5655 TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
5656
5657 TEST_ffI_f1 (remquo, 5, 2, 1, 2);
5658 TEST_ffI_f1 (remquo, 3, 2, -1, 2);
5659
5660 END (remquo);
5661}
5662
5663static void
5664rint_test (void)
5665{
5666 START (rint);
5667
5668 TEST_f_f (rint, 0.0, 0.0);
5669 TEST_f_f (rint, minus_zero, minus_zero);
5670 TEST_f_f (rint, plus_infty, plus_infty);
5671 TEST_f_f (rint, minus_infty, minus_infty);
5672
9949bc63 5673 /* Default rounding mode is round to even. */
1dc23588
UD
5674 TEST_f_f (rint, 0.5, 0.0);
5675 TEST_f_f (rint, 1.5, 2.0);
9949bc63
UD
5676 TEST_f_f (rint, 2.5, 2.0);
5677 TEST_f_f (rint, 3.5, 4.0);
5678 TEST_f_f (rint, 4.5, 4.0);
1dc23588
UD
5679 TEST_f_f (rint, -0.5, -0.0);
5680 TEST_f_f (rint, -1.5, -2.0);
9949bc63
UD
5681 TEST_f_f (rint, -2.5, -2.0);
5682 TEST_f_f (rint, -3.5, -4.0);
5683 TEST_f_f (rint, -4.5, -4.0);
5c68d401
RM
5684 TEST_f_f (rint, 0.1, 0.0);
5685 TEST_f_f (rint, 0.25, 0.0);
5686 TEST_f_f (rint, 0.625, 1.0);
5687 TEST_f_f (rint, -0.1, -0.0);
5688 TEST_f_f (rint, -0.25, -0.0);
5689 TEST_f_f (rint, -0.625, -1.0);
af0498dc
UD
5690 TEST_f_f (rint, 262144.75, 262145.0);
5691 TEST_f_f (rint, 262142.75, 262143.0);
5692 TEST_f_f (rint, 524286.75, 524287.0);
5693 TEST_f_f (rint, 524288.75, 524289.0);
fe45ce09
JM
5694 TEST_f_f (rint, 1048576.75, 1048577.0);
5695 TEST_f_f (rint, 2097152.75, 2097153.0);
5696 TEST_f_f (rint, -1048576.75, -1048577.0);
5697 TEST_f_f (rint, -2097152.75, -2097153.0);
5698#ifndef TEST_FLOAT
5699 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5700 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5701 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5702 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5703 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5704 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5705 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5706 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5707 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5708 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5709#endif
f964490f
RM
5710#ifdef TEST_LDOUBLE
5711 /* The result can only be represented in long double. */
5712 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5713 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5714 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5715 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5716 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
830fce04 5717
5c68d401
RM
5718# if LDBL_MANT_DIG > 100
5719 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5720 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5721 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5722# endif
f964490f
RM
5723
5724 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5725 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5726 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5727 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5728 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
830fce04 5729
5c68d401
RM
5730# if LDBL_MANT_DIG > 100
5731 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5732 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5733 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5734
5735 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5736 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5737 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5738 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5739 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5740 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5741
5742 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5743 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5744 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5745 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5746 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5747 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5748# endif
f964490f
RM
5749
5750 TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
5751 TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
5752 TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
5753 TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
5754 TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
5755
5756 TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
5757 TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
5758 TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
5759 TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
5760 TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
5761
5762 TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
5763 TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
5764 TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
5765 TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
5766 TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
5767
5768 TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
5769 TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
5770 TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
5771 TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
5772 TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
5773
5774 TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5775 TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
5776 TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
5777 TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5778 TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5779#endif
1dc23588 5780
8847214f
UD
5781 END (rint);
5782}
5783
4d37c8aa
UD
5784static void
5785rint_test_tonearest (void)
5786{
5787 int save_round_mode;
5788 START (rint_tonearest);
5789
830fce04 5790 save_round_mode = fegetround ();
4d37c8aa
UD
5791
5792 if (!fesetround (FE_TONEAREST))
830fce04
RM
5793 {
5794 TEST_f_f (rint, 2.0, 2.0);
5795 TEST_f_f (rint, 1.5, 2.0);
5796 TEST_f_f (rint, 1.0, 1.0);
5797 TEST_f_f (rint, 0.5, 0.0);
5798 TEST_f_f (rint, 0.0, 0.0);
5799 TEST_f_f (rint, minus_zero, minus_zero);
5800 TEST_f_f (rint, -0.5, -0.0);
5801 TEST_f_f (rint, -1.0, -1.0);
5802 TEST_f_f (rint, -1.5, -2.0);
5803 TEST_f_f (rint, -2.0, -2.0);
5804 TEST_f_f (rint, 0.1, 0.0);
5805 TEST_f_f (rint, 0.25, 0.0);
5806 TEST_f_f (rint, 0.625, 1.0);
5807 TEST_f_f (rint, -0.1, -0.0);
5808 TEST_f_f (rint, -0.25, -0.0);
5809 TEST_f_f (rint, -0.625, -1.0);
fe45ce09
JM
5810 TEST_f_f (rint, 1048576.75, 1048577.0);
5811 TEST_f_f (rint, 2097152.75, 2097153.0);
5812 TEST_f_f (rint, -1048576.75, -1048577.0);
5813 TEST_f_f (rint, -2097152.75, -2097153.0);
5814#ifndef TEST_FLOAT
5815 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5816 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5817 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5818 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5819 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5820 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5821 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5822 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5823 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5824 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5825#endif
5c68d401 5826#ifdef TEST_LDOUBLE
830fce04
RM
5827 /* The result can only be represented in long double. */
5828 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5829 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5830 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5831 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5832 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5c68d401 5833# if LDBL_MANT_DIG > 100
830fce04
RM
5834 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5835 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5836 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5c68d401 5837# endif
830fce04
RM
5838 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5839 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5840 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5841 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5842 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5c68d401 5843# if LDBL_MANT_DIG > 100
830fce04
RM
5844 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5845 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5846 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5847
5848 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5849 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5850 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5851 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5852 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5853 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5854
5855 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5856 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5857 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5858 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5859 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5860 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5c68d401
RM
5861# endif
5862#endif
830fce04 5863 }
4d37c8aa 5864
830fce04 5865 fesetround (save_round_mode);
4d37c8aa
UD
5866
5867 END (rint_tonearest);
5868}
5869
5870static void
5871rint_test_towardzero (void)
5872{
5873 int save_round_mode;
5874 START (rint_towardzero);
5875
830fce04 5876 save_round_mode = fegetround ();
4d37c8aa
UD
5877
5878 if (!fesetround (FE_TOWARDZERO))
830fce04
RM
5879 {
5880 TEST_f_f (rint, 2.0, 2.0);
5881 TEST_f_f (rint, 1.5, 1.0);
5882 TEST_f_f (rint, 1.0, 1.0);
5883 TEST_f_f (rint, 0.5, 0.0);
5884 TEST_f_f (rint, 0.0, 0.0);
5885 TEST_f_f (rint, minus_zero, minus_zero);
5886 TEST_f_f (rint, -0.5, -0.0);
5887 TEST_f_f (rint, -1.0, -1.0);
5888 TEST_f_f (rint, -1.5, -1.0);
5889 TEST_f_f (rint, -2.0, -2.0);
5890 TEST_f_f (rint, 0.1, 0.0);
5891 TEST_f_f (rint, 0.25, 0.0);
5892 TEST_f_f (rint, 0.625, 0.0);
5893 TEST_f_f (rint, -0.1, -0.0);
5894 TEST_f_f (rint, -0.25, -0.0);
5895 TEST_f_f (rint, -0.625, -0.0);
fe45ce09
JM
5896 TEST_f_f (rint, 1048576.75, 1048576.0);
5897 TEST_f_f (rint, 2097152.75, 2097152.0);
5898 TEST_f_f (rint, -1048576.75, -1048576.0);
5899 TEST_f_f (rint, -2097152.75, -2097152.0);
5900#ifndef TEST_FLOAT
5901 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
5902 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
5903 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
5904 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
5905 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
5906 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
5907 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
5908 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
5909 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
5910 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
5911#endif
5c68d401 5912#ifdef TEST_LDOUBLE
830fce04
RM
5913 /* The result can only be represented in long double. */
5914 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
5915 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5916 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5917 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
5918 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5c68d401 5919# if LDBL_MANT_DIG > 100
830fce04
RM
5920 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
5921 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
5922 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5c68d401 5923# endif
830fce04
RM
5924 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
5925 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5926 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5927 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
5928 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5c68d401 5929# if LDBL_MANT_DIG > 100
830fce04
RM
5930 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
5931 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
5932 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
5933
5934 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5935 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5936 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5937 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
5938 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
5939 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
5940
5941 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5942 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5943 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5944 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
5945 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
5946 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5c68d401
RM
5947# endif
5948#endif
830fce04 5949 }
4d37c8aa 5950
830fce04 5951 fesetround (save_round_mode);
4d37c8aa
UD
5952
5953 END (rint_towardzero);
5954}
5955
5956static void
5957rint_test_downward (void)
5958{
5959 int save_round_mode;
5960 START (rint_downward);
5961
830fce04 5962 save_round_mode = fegetround ();
4d37c8aa
UD
5963
5964 if (!fesetround (FE_DOWNWARD))
830fce04
RM
5965 {
5966 TEST_f_f (rint, 2.0, 2.0);
5967 TEST_f_f (rint, 1.5, 1.0);
5968 TEST_f_f (rint, 1.0, 1.0);
5969 TEST_f_f (rint, 0.5, 0.0);
5970 TEST_f_f (rint, 0.0, 0.0);
5971 TEST_f_f (rint, minus_zero, minus_zero);
5972 TEST_f_f (rint, -0.5, -1.0);
5973 TEST_f_f (rint, -1.0, -1.0);
5974 TEST_f_f (rint, -1.5, -2.0);
5975 TEST_f_f (rint, -2.0, -2.0);
5976 TEST_f_f (rint, 0.1, 0.0);
5977 TEST_f_f (rint, 0.25, 0.0);
5978 TEST_f_f (rint, 0.625, 0.0);
5979 TEST_f_f (rint, -0.1, -1.0);
5980 TEST_f_f (rint, -0.25, -1.0);
5981 TEST_f_f (rint, -0.625, -1.0);
fe45ce09
JM
5982 TEST_f_f (rint, 1048576.75, 1048576.0);
5983 TEST_f_f (rint, 2097152.75, 2097152.0);
5984 TEST_f_f (rint, -1048576.75, -1048577.0);
5985 TEST_f_f (rint, -2097152.75, -2097153.0);
5986#ifndef TEST_FLOAT
5987 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
5988 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
5989 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
5990 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
5991 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
5992 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5993 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5994 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5995 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5996 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5997#endif
5c68d401 5998#ifdef TEST_LDOUBLE
830fce04
RM
5999 /* The result can only be represented in long double. */
6000 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
6001 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
6002 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
6003 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
6004 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5c68d401 6005# if LDBL_MANT_DIG > 100
830fce04
RM
6006 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
6007 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
6008 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5c68d401 6009# endif
830fce04
RM
6010 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
6011 TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
6012 TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
6013 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
6014 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5c68d401 6015# if LDBL_MANT_DIG > 100
830fce04
RM
6016 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
6017 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
6018 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
6019
6020 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
6021 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
6022 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
6023 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
6024 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
6025 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
6026
6027 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
6028 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
6029 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
6030 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
6031 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
6032 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5c68d401
RM
6033# endif
6034#endif
830fce04 6035 }
4d37c8aa 6036
830fce04 6037 fesetround (save_round_mode);
4d37c8aa
UD
6038
6039 END (rint_downward);
6040}
6041
6042static void
6043rint_test_upward (void)
6044{
6045 int save_round_mode;
6046 START (rint_upward);
6047
830fce04 6048 save_round_mode = fegetround ();
4d37c8aa
UD
6049
6050 if (!fesetround (FE_UPWARD))
830fce04
RM
6051 {
6052 TEST_f_f (rint, 2.0, 2.0);
6053 TEST_f_f (rint, 1.5, 2.0);
6054 TEST_f_f (rint, 1.0, 1.0);
6055 TEST_f_f (rint, 0.5, 1.0);
6056 TEST_f_f (rint, 0.0, 0.0);
6057 TEST_f_f (rint, minus_zero, minus_zero);
6058 TEST_f_f (rint, -0.5, -0.0);
6059 TEST_f_f (rint, -1.0, -1.0);
6060 TEST_f_f (rint, -1.5, -1.0);
6061 TEST_f_f (rint, -2.0, -2.0);
6062 TEST_f_f (rint, 0.1, 1.0);
6063 TEST_f_f (rint, 0.25, 1.0);
6064 TEST_f_f (rint, 0.625, 1.0);
6065 TEST_f_f (rint, -0.1, -0.0);
6066 TEST_f_f (rint, -0.25, -0.0);
6067 TEST_f_f (rint, -0.625, -0.0);
fe45ce09
JM
6068 TEST_f_f (rint, 1048576.75, 1048577.0);
6069 TEST_f_f (rint, 2097152.75, 2097153.0);
6070 TEST_f_f (rint, -1048576.75, -1048576.0);
6071 TEST_f_f (rint, -2097152.75, -2097152.0);
6072#ifndef TEST_FLOAT
6073 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
6074 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
6075 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
6076 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
6077 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
6078 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
6079 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
6080 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
6081 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
6082 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
6083#endif
5c68d401 6084#ifdef TEST_LDOUBLE
830fce04
RM
6085 /* The result can only be represented in long double. */
6086 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
6087 TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
6088 TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
6089 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
6090 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5c68d401 6091# if LDBL_MANT_DIG > 100
830fce04
RM
6092 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
6093 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
6094 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5c68d401 6095# endif
830fce04
RM
6096 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
6097 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
6098 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
6099 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
6100 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5c68d401 6101# if LDBL_MANT_DIG > 100
830fce04
RM
6102 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
6103 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
6104 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
6105
6106 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
6107 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
6108 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
6109 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
6110 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
6111 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
6112
6113 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
6114 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
6115 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
6116 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
6117 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
6118 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5c68d401
RM
6119# endif
6120#endif
830fce04 6121 }
4d37c8aa 6122
830fce04 6123 fesetround (save_round_mode);
4d37c8aa
UD
6124
6125 END (rint_upward);
6126}
6127
8847214f
UD
6128static void
6129round_test (void)
6130{
6131 START (round);
6132
6133 TEST_f_f (round, 0, 0);
6134 TEST_f_f (round, minus_zero, minus_zero);
3c6cad26
UD
6135 TEST_f_f (round, 0.2L, 0.0);
6136 TEST_f_f (round, -0.2L, minus_zero);
8847214f
UD
6137 TEST_f_f (round, 0.5, 1.0);
6138 TEST_f_f (round, -0.5, -1.0);
3c6cad26
UD
6139 TEST_f_f (round, 0.8L, 1.0);
6140 TEST_f_f (round, -0.8L, -1.0);
8847214f
UD
6141 TEST_f_f (round, 1.5, 2.0);
6142 TEST_f_f (round, -1.5, -2.0);
5c68d401
RM
6143 TEST_f_f (round, 0.1, 0.0);
6144 TEST_f_f (round, 0.25, 0.0);
6145 TEST_f_f (round, 0.625, 1.0);
6146 TEST_f_f (round, -0.1, -0.0);
6147 TEST_f_f (round, -0.25, -0.0);
6148 TEST_f_f (round, -0.625, -1.0);
8847214f
UD
6149 TEST_f_f (round, 2097152.5, 2097153);
6150 TEST_f_f (round, -2097152.5, -2097153);
6151
f964490f
RM
6152#ifdef TEST_LDOUBLE
6153 /* The result can only be represented in long double. */
6154 TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
6155 TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
830fce04 6156 TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
f964490f 6157 TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
5c68d401
RM
6158 TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
6159# if LDBL_MANT_DIG > 100
6160 TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
6161 TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
6162 TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
6163# endif
f964490f 6164
830fce04
RM
6165 TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
6166 TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
f964490f 6167 TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
830fce04 6168 TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
f964490f 6169 TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
5c68d401
RM
6170# if LDBL_MANT_DIG > 100
6171 TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
6172 TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
6173 TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
6174# endif
f964490f
RM
6175
6176 TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
6177 TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
6178 TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
6179 TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
6180 TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
6181
6182 TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
6183 TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
6184 TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
6185 TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
6186 TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
6187
5c68d401
RM
6188# if LDBL_MANT_DIG > 100
6189 TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
6190 TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
6191 TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
6192 TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
6193 TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
6194 TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
6195
6196 TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
6197 TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
6198 TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
6199 TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
6200 TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
6201 TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
6202# endif
6203
f964490f
RM
6204 TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
6205 TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
6206 TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
6207 TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
6208 TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
6209
6210 TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
6211 TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
6212 TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
6213 TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
6214 TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
6215
6216 TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
6217 TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
6218 TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
6219 TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
6220 TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
6221#endif
6222
8847214f
UD
6223 END (round);
6224}
6225
6226
6227static void
6228scalb_test (void)
6229{
6230
6231 START (scalb);
6232
3667c088
UD
6233 TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION);
6234 TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION);
8847214f
UD
6235
6236 TEST_ff_f (scalb, 0, nan_value, nan_value);
6237 TEST_ff_f (scalb, 1, nan_value, nan_value);
6238
6239 TEST_ff_f (scalb, 1, 0, 1);
6240 TEST_ff_f (scalb, -1, 0, -1);
6241
6242 TEST_ff_f (scalb, 0, plus_infty, nan_value, INVALID_EXCEPTION);
6243 TEST_ff_f (scalb, minus_zero, plus_infty, nan_value, INVALID_EXCEPTION);
6244
6245 TEST_ff_f (scalb, 0, 2, 0);
6246 TEST_ff_f (scalb, minus_zero, -4, minus_zero);
6247 TEST_ff_f (scalb, 0, 0, 0);
6248 TEST_ff_f (scalb, minus_zero, 0, minus_zero);
6249 TEST_ff_f (scalb, 0, -1, 0);
6250 TEST_ff_f (scalb, minus_zero, -10, minus_zero);
6251 TEST_ff_f (scalb, 0, minus_infty, 0);
6252 TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
6253
6254 TEST_ff_f (scalb, plus_infty, -1, plus_infty);
6255 TEST_ff_f (scalb, minus_infty, -10, minus_infty);
6256 TEST_ff_f (scalb, plus_infty, 0, plus_infty);
6257 TEST_ff_f (scalb, minus_infty, 0, minus_infty);
6258 TEST_ff_f (scalb, plus_infty, 2, plus_infty);
6259 TEST_ff_f (scalb, minus_infty, 100, minus_infty);
6260
3c6cad26
UD
6261 TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
6262 TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
8847214f
UD
6263
6264 TEST_ff_f (scalb, 1, plus_infty, plus_infty);
6265 TEST_ff_f (scalb, -1, plus_infty, minus_infty);
6266 TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
6267 TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
6268
3667c088
UD
6269 TEST_ff_f (scalb, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
6270 TEST_ff_f (scalb, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
8847214f
UD
6271
6272 TEST_ff_f (scalb, nan_value, 1, nan_value);
6273 TEST_ff_f (scalb, 1, nan_value, nan_value);
6274 TEST_ff_f (scalb, nan_value, 0, nan_value);
6275 TEST_ff_f (scalb, 0, nan_value, nan_value);
6276 TEST_ff_f (scalb, nan_value, plus_infty, nan_value);
6277 TEST_ff_f (scalb, plus_infty, nan_value, nan_value);
6278 TEST_ff_f (scalb, nan_value, nan_value, nan_value);
6279
6280 TEST_ff_f (scalb, 0.8L, 4, 12.8L);
6281 TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
6282
6283 END (scalb);
6284}
6285
6286
6287static void
6288scalbn_test (void)
6289{
6290
6291 START (scalbn);
6292
6293 TEST_fi_f (scalbn, 0, 0, 0);
6294 TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
6295
6296 TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
6297 TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
6298 TEST_fi_f (scalbn, nan_value, 1, nan_value);
6299
6300 TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
6301 TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
6302
6303 TEST_fi_f (scalbn, 1, 0L, 1);
6304
a6d06d7b
JM
6305 TEST_fi_f (scalbn, 1, INT_MAX, plus_infty);
6306 TEST_fi_f (scalbn, 1, INT_MIN, plus_zero);
6307 TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty);
6308 TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero);
6309 TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty);
6310 TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero);
6311 TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty);
6312 TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero);
6313
8847214f
UD
6314 END (scalbn);
6315}
6316
2550dfe9 6317
8847214f
UD
6318static void
6319scalbln_test (void)
6320{
6321
6322 START (scalbln);
6323
6324 TEST_fl_f (scalbln, 0, 0, 0);
6325 TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
6326
6327 TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
6328 TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
6329 TEST_fl_f (scalbln, nan_value, 1, nan_value);
6330
6331 TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
6332 TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
6333
6334 TEST_fl_f (scalbln, 1, 0L, 1);
6335
a6d06d7b
JM
6336 TEST_fi_f (scalbln, 1, INT_MAX, plus_infty);
6337 TEST_fi_f (scalbln, 1, INT_MIN, plus_zero);
6338 TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty);
6339 TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero);
6340 TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty);
6341 TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero);
6342 TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty);
6343 TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero);
6344
6345 TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty);
6346 TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero);
6347 TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty);
6348 TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero);
6349 TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty);
6350 TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero);
6351 TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty);
6352 TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero);
6353
6354#if LONG_MAX >= 0x100000000
6355 TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty);
6356 TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero);
6357 TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty);
6358 TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero);
6359 TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty);
6360 TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero);
6361 TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty);
6362 TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero);
6363#endif
6364
8847214f
UD
6365 END (scalbn);
6366}
6367
2550dfe9 6368
8847214f
UD
6369static void
6370signbit_test (void)
6371{
6372
6373 START (signbit);
6374
6375 TEST_f_b (signbit, 0, 0);
6376 TEST_f_b (signbit, minus_zero, 1);
6377 TEST_f_b (signbit, plus_infty, 0);
6378 TEST_f_b (signbit, minus_infty, 1);
6379
6380 /* signbit (x) != 0 for x < 0. */
6381 TEST_f_b (signbit, -1, 1);
6382 /* signbit (x) == 0 for x >= 0. */
6383 TEST_f_b (signbit, 1, 0);
6384
6385 END (signbit);
6386}
6387
2550dfe9 6388
8847214f
UD
6389static void
6390sin_test (void)
6391{
e6d3c4a7
AJ
6392 errno = 0;
6393 FUNC(sin) (0);
6394 if (errno == ENOSYS)
6395 /* Function not implemented. */
6396 return;
6397
8847214f
UD
6398 START (sin);
6399
6400 TEST_f_f (sin, 0, 0);
6401 TEST_f_f (sin, minus_zero, minus_zero);
0c59a196 6402 errno = 0;
8847214f 6403 TEST_f_f (sin, plus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
6404 check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
6405 errno = 0;
8847214f 6406 TEST_f_f (sin, minus_infty, nan_value, INVALID_EXCEPTION);
0c59a196
UD
6407 check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
6408 errno = 0;
15daa639 6409 TEST_f_f (sin, nan_value, nan_value);
0c59a196 6410 check_int ("errno for sin(NaN) unchanged", errno, 0, 0, 0, 0);
8847214f
UD
6411
6412 TEST_f_f (sin, M_PI_6l, 0.5);
6413 TEST_f_f (sin, -M_PI_6l, -0.5);
6414 TEST_f_f (sin, M_PI_2l, 1);
6415 TEST_f_f (sin, -M_PI_2l, -1);
2550dfe9 6416 TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
8847214f 6417
ea40808a
AJ
6418 TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
6419 TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
8c0247db 6420
d32e4346
RM
6421#ifdef TEST_DOUBLE
6422 TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
cb95113e 6423 TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
8848d99d
JM
6424#endif
6425
6426#ifndef TEST_FLOAT
6427 TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
6428 TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
6429#endif
6430
6431#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6432 TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
d32e4346
RM
6433#endif
6434
8847214f
UD
6435 END (sin);
6436
6437}
6438
2550dfe9 6439
804360ed
JM
6440static void
6441sin_test_tonearest (void)
6442{
6443 int save_round_mode;
6444 errno = 0;
6445 FUNC(sin) (0);
6446 if (errno == ENOSYS)
6447 /* Function not implemented. */
6448 return;
6449
6450 START (sin_tonearest);
6451
6452 save_round_mode = fegetround ();
6453
6454 if (!fesetround (FE_TONEAREST))
6455 {
6456 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6457 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6458 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6459 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6460 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6461 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6462 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6463 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6464 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6465 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6466 }
6467
6468 fesetround (save_round_mode);
6469
6470 END (sin_tonearest);
6471}
6472
6473
6474static void
6475sin_test_towardzero (void)
6476{
6477 int save_round_mode;
6478 errno = 0;
6479 FUNC(sin) (0);
6480 if (errno == ENOSYS)
6481 /* Function not implemented. */
6482 return;
6483
6484 START (sin_towardzero);
6485
6486 save_round_mode = fegetround ();
6487
6488 if (!fesetround (FE_TOWARDZERO))
6489 {
6490 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6491 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6492 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6493 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6494 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6495 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6496 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6497 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6498 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6499 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6500 }
6501
6502 fesetround (save_round_mode);
6503
6504 END (sin_towardzero);
6505}
6506
6507
6508static void
6509sin_test_downward (void)
6510{
6511 int save_round_mode;
6512 errno = 0;
6513 FUNC(sin) (0);
6514 if (errno == ENOSYS)
6515 /* Function not implemented. */
6516 return;
6517
6518 START (sin_downward);
6519
6520 save_round_mode = fegetround ();
6521
6522 if (!fesetround (FE_DOWNWARD))
6523 {
6524 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6525 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6526 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6527 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6528 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6529 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6530 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6531 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6532 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6533 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6534 }
6535
6536 fesetround (save_round_mode);
6537
6538 END (sin_downward);
6539}
6540
6541
6542static void
6543sin_test_upward (void)
6544{
6545 int save_round_mode;
6546 errno = 0;
6547 FUNC(sin) (0);
6548 if (errno == ENOSYS)
6549 /* Function not implemented. */
6550 return;
6551
6552 START (sin_upward);
6553
6554 save_round_mode = fegetround ();
6555
6556 if (!fesetround (FE_UPWARD))
6557 {
6558 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6559 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6560 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6561 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6562 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6563 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6564 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6565 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6566 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6567 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6568 }
6569
6570 fesetround (save_round_mode);
6571
6572 END (sin_upward);
6573}
6574
6575
8847214f
UD
6576static void
6577sincos_test (void)
6578{
6579 FLOAT sin_res, cos_res;
6580
aaca11d8
UD
6581 errno = 0;
6582 FUNC(sincos) (0, &sin_res, &cos_res);
6583 if (errno == ENOSYS)
6584 /* Function not implemented. */
6585 return;
6586
8847214f
UD
6587 START (sincos);
6588
6589 /* sincos is treated differently because it returns void. */
6590 TEST_extra (sincos, 0, 0, 1);
6591
6592 TEST_extra (sincos, minus_zero, minus_zero, 1);
6593 TEST_extra (sincos, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
6594 TEST_extra (sincos, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
15daa639 6595 TEST_extra (sincos, nan_value, nan_value, nan_value);
8847214f
UD
6596
6597 TEST_extra (sincos, M_PI_2l, 1, 0);
3c6cad26
UD
6598 TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
6599 TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
2550dfe9 6600 TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
8847214f 6601
ea40808a
AJ
6602 TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
6603 TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
8c0247db 6604
d32e4346
RM
6605#ifdef TEST_DOUBLE
6606 TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
8848d99d
JM
6607#endif
6608
6609#ifndef TEST_FLOAT
6610 TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
6611 TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
6612#endif
6613
6614#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6615 TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
d32e4346
RM
6616#endif
6617
8847214f
UD
6618 END (sincos);
6619}
6620
6621static void
6622sinh_test (void)
6623{
aaca11d8 6624 errno = 0;
3c6cad26 6625 FUNC(sinh) (0.7L);
aaca11d8
UD
6626 if (errno == ENOSYS)
6627 /* Function not implemented. */
6628 return;
6629
8847214f
UD
6630 START (sinh);
6631 TEST_f_f (sinh, 0, 0);
6632 TEST_f_f (sinh, minus_zero, minus_zero);
6633
15daa639 6634#ifndef TEST_INLINE
8847214f
UD
6635 TEST_f_f (sinh, plus_infty, plus_infty);
6636 TEST_f_f (sinh, minus_infty, minus_infty);
15daa639
UD
6637#endif
6638 TEST_f_f (sinh, nan_value, nan_value);
8847214f 6639
2550dfe9 6640 TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
c9bfaa1b 6641 TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
30e5dcb7 6642
8847214f
UD
6643 END (sinh);
6644}
6645
ca811b22
JM
6646
6647static void
6648sinh_test_tonearest (void)
6649{
6650 int save_round_mode;
6651 errno = 0;
6652 FUNC(sinh) (0);
6653 if (errno == ENOSYS)
6654 /* Function not implemented. */
6655 return;
6656
6657 START (sinh_tonearest);
6658
6659 save_round_mode = fegetround ();
6660
6661 if (!fesetround (FE_TONEAREST))
6662 {
6663 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6664 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6665 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6666 }
6667
6668 fesetround (save_round_mode);
6669
6670 END (sinh_tonearest);
6671}
6672
6673
6674static void
6675sinh_test_towardzero (void)
6676{
6677 int save_round_mode;
6678 errno = 0;
6679 FUNC(sinh) (0);
6680 if (errno == ENOSYS)
6681 /* Function not implemented. */
6682 return;
6683
6684 START (sinh_towardzero);
6685
6686 save_round_mode = fegetround ();
6687
6688 if (!fesetround (FE_TOWARDZERO))
6689 {
6690 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6691 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6692 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6693 }
6694
6695 fesetround (save_round_mode);
6696
6697 END (sinh_towardzero);
6698}
6699
6700
6701static void
6702sinh_test_downward (void)
6703{
6704 int save_round_mode;
6705 errno = 0;
6706 FUNC(sinh) (0);
6707 if (errno == ENOSYS)
6708 /* Function not implemented. */
6709 return;
6710
6711 START (sinh_downward);
6712
6713 save_round_mode = fegetround ();
6714
6715 if (!fesetround (FE_DOWNWARD))
6716 {
6717 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6718 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6719 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6720 }
6721
6722 fesetround (save_round_mode);
6723
6724 END (sinh_downward);
6725}
6726
6727
6728static void
6729sinh_test_upward (void)
6730{
6731 int save_round_mode;
6732 errno = 0;
6733 FUNC(sinh) (0);
6734 if (errno == ENOSYS)
6735 /* Function not implemented. */
6736 return;
6737
6738 START (sinh_upward);
6739
6740 save_round_mode = fegetround ();
6741
6742 if (!fesetround (FE_UPWARD))
6743 {
6744 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6745 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6746 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6747 }
6748
6749 fesetround (save_round_mode);
6750
6751 END (sinh_upward);
6752}
6753
6754
8847214f
UD
6755static void
6756sqrt_test (void)
6757{
e6d3c4a7
AJ
6758 errno = 0;
6759 FUNC(sqrt) (1);
6760 if (errno == ENOSYS)
6761 /* Function not implemented. */
6762 return;
6763
8847214f
UD
6764 START (sqrt);
6765
6766 TEST_f_f (sqrt, 0, 0);
6767 TEST_f_f (sqrt, nan_value, nan_value);
6768 TEST_f_f (sqrt, plus_infty, plus_infty);
6769
6770 TEST_f_f (sqrt, minus_zero, minus_zero);
6771
6772 /* sqrt (x) == NaN plus invalid exception for x < 0. */
6773 TEST_f_f (sqrt, -1, nan_value, INVALID_EXCEPTION);
6774 TEST_f_f (sqrt, minus_infty, nan_value, INVALID_EXCEPTION);
15daa639 6775 TEST_f_f (sqrt, nan_value, nan_value);
8847214f
UD
6776
6777 TEST_f_f (sqrt, 2209, 47);
6778 TEST_f_f (sqrt, 4, 2);
6779 TEST_f_f (sqrt, 2, M_SQRT2l);
6780 TEST_f_f (sqrt, 0.25, 0.5);
6781 TEST_f_f (sqrt, 6642.25, 81.5);
2550dfe9
AJ
6782 TEST_f_f (sqrt, 15190.5625L, 123.25L);
6783 TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
8847214f
UD
6784
6785 END (sqrt);
6786}
6787
2550dfe9 6788
8847214f
UD
6789static void
6790tan_test (void)
6791{
e6d3c4a7
AJ
6792 errno = 0;
6793 FUNC(tan) (0);
6794 if (errno == ENOSYS)
6795 /* Function not implemented. */
6796 return;
6797
8847214f
UD
6798 START (tan);
6799
6800 TEST_f_f (tan, 0, 0);
6801 TEST_f_f (tan, minus_zero, minus_zero);
337c2708 6802 errno = 0;
8847214f 6803 TEST_f_f (tan, plus_infty, nan_value, INVALID_EXCEPTION);
337c2708
UD
6804 check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
6805 errno = 0;
8847214f 6806 TEST_f_f (tan, minus_infty, nan_value, INVALID_EXCEPTION);
337c2708
UD
6807 check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
6808 errno = 0;
15daa639 6809 TEST_f_f (tan, nan_value, nan_value);
337c2708 6810 check_int ("errno for tan(NaN) == 0", errno, 0, 0, 0, 0);
8847214f
UD
6811
6812 TEST_f_f (tan, M_PI_4l, 1);
2550dfe9 6813 TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
8847214f 6814
ea40808a
AJ
6815 TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
6816 TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
11b90b9f
JM
6817
6818#ifndef TEST_FLOAT
6819 TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
6820 TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
6821#endif
6822
6823#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6824 TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
ee010c9e
AJ
6825#endif
6826
8847214f
UD
6827 END (tan);
6828}
6829
804360ed
JM
6830
6831static void
6832tan_test_tonearest (void)
6833{
6834 int save_round_mode;
6835 errno = 0;
6836 FUNC(tan) (0);
6837 if (errno == ENOSYS)
6838 /* Function not implemented. */
6839 return;
6840
6841 START (tan_tonearest);
6842
6843 save_round_mode = fegetround ();
6844
6845 if (!fesetround (FE_TONEAREST))
6846 {
6847 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6848 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6849 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6850 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6851 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6852 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6853 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6854 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6855 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6856 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6857 }
6858
6859 fesetround (save_round_mode);
6860
6861 END (tan_tonearest);
6862}
6863
6864
6865static void
6866tan_test_towardzero (void)
6867{
6868 int save_round_mode;
6869 errno = 0;
6870 FUNC(tan) (0);
6871 if (errno == ENOSYS)
6872 /* Function not implemented. */
6873 return;
6874
6875 START (tan_towardzero);
6876
6877 save_round_mode = fegetround ();
6878
6879 if (!fesetround (FE_TOWARDZERO))
6880 {
6881 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6882 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6883 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6884 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6885 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6886 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6887 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6888 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6889 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6890 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6891 }
6892
6893 fesetround (save_round_mode);
6894
6895 END (tan_towardzero);
6896}
6897
6898
6899static void
6900tan_test_downward (void)
6901{
6902 int save_round_mode;
6903 errno = 0;
6904 FUNC(tan) (0);
6905 if (errno == ENOSYS)
6906 /* Function not implemented. */
6907 return;
6908
6909 START (tan_downward);
6910
6911 save_round_mode = fegetround ();
6912
6913 if (!fesetround (FE_DOWNWARD))
6914 {
6915 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6916 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6917 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6918 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6919 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6920 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6921 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6922 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6923 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6924 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6925 }
6926
6927 fesetround (save_round_mode);
6928
6929 END (tan_downward);
6930}
6931
6932
6933static void
6934tan_test_upward (void)
6935{
6936 int save_round_mode;
6937 errno = 0;
6938 FUNC(tan) (0);
6939 if (errno == ENOSYS)
6940 /* Function not implemented. */
6941 return;
6942
6943 START (tan_upward);
6944
6945 save_round_mode = fegetround ();
6946
6947 if (!fesetround (FE_UPWARD))
6948 {
6949 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6950 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6951 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6952 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6953 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6954 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6955 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6956 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6957 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6958 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6959 }
6960
6961 fesetround (save_round_mode);
6962
6963 END (tan_upward);
6964}
6965
6966
8847214f
UD
6967static void
6968tanh_test (void)
6969{
aaca11d8 6970 errno = 0;
3c6cad26 6971 FUNC(tanh) (0.7L);
aaca11d8
UD
6972 if (errno == ENOSYS)
6973 /* Function not implemented. */
6974 return;
6975
8847214f
UD
6976 START (tanh);
6977
6978 TEST_f_f (tanh, 0, 0);
6979 TEST_f_f (tanh, minus_zero, minus_zero);
6980
15daa639 6981#ifndef TEST_INLINE
8847214f
UD
6982 TEST_f_f (tanh, plus_infty, 1);
6983 TEST_f_f (tanh, minus_infty, -1);
15daa639
UD
6984#endif
6985 TEST_f_f (tanh, nan_value, nan_value);
8847214f 6986
2550dfe9
AJ
6987 TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
6988 TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
3eab00bd
AJ
6989
6990 TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
6991 TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
8847214f 6992
30e5dcb7 6993 /* 2^-57 */
2550dfe9 6994 TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
30e5dcb7 6995
8847214f
UD
6996 END (tanh);
6997}
6998
6999static void
7000tgamma_test (void)
7001{
7002 errno = 0;
7003 FUNC(tgamma) (1);
7004 if (errno == ENOSYS)
7005 /* Function not implemented. */
7006 return;
7007 feclearexcept (FE_ALL_EXCEPT);
7008
7009 START (tgamma);
7010
7011 TEST_f_f (tgamma, plus_infty, plus_infty);
52495f29
UD
7012 TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7013 TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8847214f
UD
7014 /* tgamma (x) == NaN plus invalid exception for integer x <= 0. */
7015 TEST_f_f (tgamma, -2, nan_value, INVALID_EXCEPTION);
7016 TEST_f_f (tgamma, minus_infty, nan_value, INVALID_EXCEPTION);
15daa639 7017 TEST_f_f (tgamma, nan_value, nan_value);
8847214f
UD
7018
7019 TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
7020 TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
7021
7022 TEST_f_f (tgamma, 1, 1);
7023 TEST_f_f (tgamma, 4, 6);
7024
79df8ce5
AJ
7025 TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
7026 TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
8847214f
UD
7027
7028 END (tgamma);
7029}
7030
2550dfe9 7031
8847214f
UD
7032static void
7033trunc_test (void)
7034{
7035 START (trunc);
7036
7037 TEST_f_f (trunc, plus_infty, plus_infty);
7038 TEST_f_f (trunc, minus_infty, minus_infty);
7039 TEST_f_f (trunc, nan_value, nan_value);
7040
7041 TEST_f_f (trunc, 0, 0);
7042 TEST_f_f (trunc, minus_zero, minus_zero);
5c68d401
RM
7043 TEST_f_f (trunc, 0.1, 0);
7044 TEST_f_f (trunc, 0.25, 0);
8847214f 7045 TEST_f_f (trunc, 0.625, 0);
5c68d401
RM
7046 TEST_f_f (trunc, -0.1, minus_zero);
7047 TEST_f_f (trunc, -0.25, minus_zero);
8847214f
UD
7048 TEST_f_f (trunc, -0.625, minus_zero);
7049 TEST_f_f (trunc, 1, 1);
7050 TEST_f_f (trunc, -1, -1);
7051 TEST_f_f (trunc, 1.625, 1);
7052 TEST_f_f (trunc, -1.625, -1);
7053
7054 TEST_f_f (trunc, 1048580.625L, 1048580L);
7055 TEST_f_f (trunc, -1048580.625L, -1048580L);
7056
7057 TEST_f_f (trunc, 8388610.125L, 8388610.0L);
7058 TEST_f_f (trunc, -8388610.125L, -8388610.0L);
7059
7060 TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
7061 TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
7062
f964490f
RM
7063#ifdef TEST_LDOUBLE
7064 /* The result can only be represented in long double. */
7065 TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
7066 TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
7067 TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
7068 TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
7069 TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
7070
5c68d401
RM
7071# if LDBL_MANT_DIG > 100
7072 TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
7073 TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
7074 TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
7075# endif
830fce04 7076
f964490f
RM
7077 TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
7078 TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
7079 TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
7080 TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
7081 TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
830fce04 7082
5c68d401
RM
7083# if LDBL_MANT_DIG > 100
7084 TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
7085 TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
7086 TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
7087# endif
f964490f
RM
7088
7089 TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
7090 TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
7091 TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
7092 TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
7093 TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
7094
5c68d401
RM
7095# if LDBL_MANT_DIG > 100
7096 TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
7097 TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
7098 TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
7099 TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
7100 TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
7101 TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
7102# endif
7103
f964490f
RM
7104 TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
7105 TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
7106 TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
7107 TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
7108 TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
7109
5c68d401
RM
7110# if LDBL_MANT_DIG > 100
7111 TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
7112 TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
7113 TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
7114 TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
7115 TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
7116 TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
7117# endif
7118
f964490f
RM
7119 TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
7120 TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
7121 TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
7122 TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
7123 TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
7124
7125 TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
7126 TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
7127 TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
7128 TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
7129 TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
7130
7131 TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7132 TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7133 TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7134 TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
830fce04 7135 TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
f964490f 7136#endif
8847214f
UD
7137
7138 END (trunc);
7139}
7140
7141static void
7142y0_test (void)
7143{
8a216c1b 7144 FLOAT s, c;
8847214f 7145 errno = 0;
cd53c157
UD
7146 FUNC (sincos) (0, &s, &c);
7147 if (errno == ENOSYS)
7148 /* Required function not implemented. */
7149 return;
8847214f
UD
7150 FUNC(y0) (1);
7151 if (errno == ENOSYS)
7152 /* Function not implemented. */
7153 return;
7154
7155 /* y0 is the Bessel function of the second kind of order 0 */
7156 START (y0);
7157
caac9ddb 7158 TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
8847214f
UD
7159 TEST_f_f (y0, 0.0, minus_infty);
7160 TEST_f_f (y0, nan_value, nan_value);
7161 TEST_f_f (y0, plus_infty, 0);
7162
2550dfe9
AJ
7163 TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
7164 TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
7165 TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
7166 TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
7167 TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
7168 TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
7169 TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
8847214f 7170
c36e1d23
JM
7171 TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
7172
7173#ifndef TEST_FLOAT
7174 TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
7175#endif
7176
8847214f
UD
7177 END (y0);
7178}
7179
7180
7181static void
7182y1_test (void)
7183{
8a216c1b 7184 FLOAT s, c;
8847214f 7185 errno = 0;
cd53c157
UD
7186 FUNC (sincos) (0, &s, &c);
7187 if (errno == ENOSYS)
7188 /* Required function not implemented. */
7189 return;
8847214f
UD
7190 FUNC(y1) (1);
7191 if (errno == ENOSYS)
7192 /* Function not implemented. */
7193 return;
7194
7195 /* y1 is the Bessel function of the second kind of order 1 */
7196 START (y1);
7197
caac9ddb 7198 TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
8847214f
UD
7199 TEST_f_f (y1, 0.0, minus_infty);
7200 TEST_f_f (y1, plus_infty, 0);
7201 TEST_f_f (y1, nan_value, nan_value);
7202
2550dfe9
AJ
7203 TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
7204 TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
7205 TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
7206 TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
7207 TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
7208 TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
7209 TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
8847214f 7210
c36e1d23
JM
7211 TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
7212
7213#ifndef TEST_FLOAT
7214 TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
7215#endif
7216
8847214f
UD
7217 END (y1);
7218}
7219
2550dfe9 7220
8847214f
UD
7221static void
7222yn_test (void)
7223{
8a216c1b 7224 FLOAT s, c;
8847214f 7225 errno = 0;
cd53c157
UD
7226 FUNC (sincos) (0, &s, &c);
7227 if (errno == ENOSYS)
7228 /* Required function not implemented. */
7229 return;
8847214f
UD
7230 FUNC(yn) (1, 1);
7231 if (errno == ENOSYS)
7232 /* Function not implemented. */
7233 return;
7234
7235 /* yn is the Bessel function of the second kind of order n */
7236 START (yn);
7237
7238 /* yn (0, x) == y0 (x) */
caac9ddb 7239 TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
8847214f
UD
7240 TEST_ff_f (yn, 0, 0.0, minus_infty);
7241 TEST_ff_f (yn, 0, nan_value, nan_value);
7242 TEST_ff_f (yn, 0, plus_infty, 0);
7243
2550dfe9
AJ
7244 TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
7245 TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
7246 TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
7247 TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
7248 TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
7249 TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
7250 TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
8847214f
UD
7251
7252 /* yn (1, x) == y1 (x) */
caac9ddb 7253 TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
8847214f
UD
7254 TEST_ff_f (yn, 1, 0.0, minus_infty);
7255 TEST_ff_f (yn, 1, plus_infty, 0);
7256 TEST_ff_f (yn, 1, nan_value, nan_value);
7257
2550dfe9
AJ
7258 TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
7259 TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
7260 TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
7261 TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
7262 TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
7263 TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
7264 TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
8847214f
UD
7265
7266 /* yn (3, x) */
7267 TEST_ff_f (yn, 3, plus_infty, 0);
7268 TEST_ff_f (yn, 3, nan_value, nan_value);
7269
2550dfe9
AJ
7270 TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
7271 TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
7272 TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
7273 TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
7274 TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
8847214f
UD
7275
7276 /* yn (10, x) */
7277 TEST_ff_f (yn, 10, plus_infty, 0);
7278 TEST_ff_f (yn, 10, nan_value, nan_value);
7279
2550dfe9
AJ
7280 TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
7281 TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
7282 TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
7283 TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
7284 TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
8847214f
UD
7285
7286 END (yn);
7287
7288}
7289
7290
f5c8f285
UD
7291static void
7292significand_test (void)
7293{
7294 /* significand returns the mantissa of the exponential representation. */
7295 START (significand);
7296
7297 TEST_f_f (significand, 4.0, 1.0);
7298 TEST_f_f (significand, 6.0, 1.5);
7299 TEST_f_f (significand, 8.0, 1.0);
7300
7301 END (significand);
7302}
7303
7304
8847214f
UD
7305static void
7306initialize (void)
7307{
7308 fpstack_test ("start *init*");
7309 plus_zero = 0.0;
7310 nan_value = plus_zero / plus_zero; /* Suppress GCC warning */
7311
7312 minus_zero = FUNC(copysign) (0.0, -1.0);
7313 plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
7314 HUGE_VALL, HUGE_VAL, HUGE_VALF);
7315 minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
7316 -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
164f863e
UD
7317 max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
7318 LDBL_MAX, DBL_MAX, FLT_MAX);
7319 min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
7320 LDBL_MIN, DBL_MIN, FLT_MIN);
8847214f
UD
7321
7322 (void) &plus_zero;
7323 (void) &nan_value;
7324 (void) &minus_zero;
7325 (void) &plus_infty;
7326 (void) &minus_infty;
164f863e
UD
7327 (void) &max_value;
7328 (void) &min_value;
8847214f
UD
7329
7330 /* Clear all exceptions. From now on we must not get random exceptions. */
7331 feclearexcept (FE_ALL_EXCEPT);
7332
7333 /* Test to make sure we start correctly. */
7334 fpstack_test ("end *init*");
7335}
7336
7337/* Definitions of arguments for argp functions. */
7338static const struct argp_option options[] =
7339{
7340 { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
7341 { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
7342 { "no-max-error", 'f', NULL, 0,
7343 "Don't output maximal errors of functions"},
7344 { "no-points", 'p', NULL, 0,
7345 "Don't output results of functions invocations"},
cd33623e
UD
7346 { "ignore-max-ulp", 'i', "yes/no", 0,
7347 "Ignore given maximal errors"},
8847214f
UD
7348 { NULL, 0, NULL, 0, NULL }
7349};
7350
7351/* Short description of program. */
7352static const char doc[] = "Math test suite: " TEST_MSG ;
7353
7354/* Prototype for option handler. */
fe559c5e 7355static error_t parse_opt (int key, char *arg, struct argp_state *state);
8847214f
UD
7356
7357/* Data structure to communicate with argp functions. */
7358static struct argp argp =
7359{
7360 options, parse_opt, NULL, doc,
7361};
7362
7363
7364/* Handle program arguments. */
7365static error_t
7366parse_opt (int key, char *arg, struct argp_state *state)
7367{
7368 switch (key)
7369 {
7370 case 'f':
6815fabc 7371 output_max_error = 0;
8847214f 7372 break;
cd33623e
UD
7373 case 'i':
7374 if (strcmp (arg, "yes") == 0)
7375 ignore_max_ulp = 1;
7376 else if (strcmp (arg, "no") == 0)
7377 ignore_max_ulp = 0;
7378 break;
8847214f 7379 case 'p':
6815fabc 7380 output_points = 0;
8847214f
UD
7381 break;
7382 case 'u':
7383 output_ulps = 1;
7384 break;
7385 case 'v':
7386 if (optarg)
7387 verbose = (unsigned int) strtoul (optarg, NULL, 0);
7388 else
7389 verbose = 3;
7390 break;
7391 default:
7392 return ARGP_ERR_UNKNOWN;
7393 }
7394 return 0;
7395}
7396
7397#if 0
7398/* function to check our ulp calculation. */
7399void
7400check_ulp (void)
7401{
7402 int i;
7403
7404 FLOAT u, diff, ulp;
7405 /* This gives one ulp. */
7406 u = FUNC(nextafter) (10, 20);
7407 check_equal (10.0, u, 1, &diff, &ulp);
7408 printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
7409
7410 /* This gives one more ulp. */
7411 u = FUNC(nextafter) (u, 20);
7412 check_equal (10.0, u, 2, &diff, &ulp);
7413 printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
7414
7415 /* And now calculate 100 ulp. */
7416 for (i = 2; i < 100; i++)
7417 u = FUNC(nextafter) (u, 20);
7418 check_equal (10.0, u, 100, &diff, &ulp);
7419 printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
7420}
7421#endif
7422
7423int
7424main (int argc, char **argv)
7425{
7426
7427 int remaining;
7428
7429 verbose = 1;
7430 output_ulps = 0;
7431 output_max_error = 1;
7432 output_points = 1;
cd33623e
UD
7433 /* XXX set to 0 for releases. */
7434 ignore_max_ulp = 0;
bdf09fab 7435
8847214f
UD
7436 /* Parse and process arguments. */
7437 argp_parse (&argp, argc, argv, 0, &remaining, NULL);
7438
7439 if (remaining != argc)
7440 {
7441 fprintf (stderr, "wrong number of arguments");
7442 argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
7443 exit (EXIT_FAILURE);
7444 }
7445
7446 if (output_ulps)
7447 {
7448 ulps_file = fopen ("ULPs", "a");
7449 if (ulps_file == NULL)
7450 {
7451 perror ("can't open file `ULPs' for writing: ");
7452 exit (1);
7453 }
7454 }
7455
7456
7457 initialize ();
7458 printf (TEST_MSG);
7459
7460#if 0
7461 check_ulp ();
7462#endif
7463
ec751a23 7464 /* Keep the tests a wee bit ordered (according to ISO C99). */
8847214f
UD
7465 /* Classification macros: */
7466 fpclassify_test ();
7467 isfinite_test ();
7468 isnormal_test ();
7469 signbit_test ();
7470
7471 /* Trigonometric functions: */
7472 acos_test ();
7473 asin_test ();
7474 atan_test ();
7475 atan2_test ();
7476 cos_test ();
804360ed
JM
7477 cos_test_tonearest ();
7478 cos_test_towardzero ();
7479 cos_test_downward ();
7480 cos_test_upward ();
8847214f 7481 sin_test ();
804360ed
JM
7482 sin_test_tonearest ();
7483 sin_test_towardzero ();
7484 sin_test_downward ();
7485 sin_test_upward ();
8847214f
UD
7486 sincos_test ();
7487 tan_test ();
804360ed
JM
7488 tan_test_tonearest ();
7489 tan_test_towardzero ();
7490 tan_test_downward ();
7491 tan_test_upward ();
8847214f
UD
7492
7493 /* Hyperbolic functions: */
7494 acosh_test ();
7495 asinh_test ();
7496 atanh_test ();
7497 cosh_test ();
ca811b22
JM
7498 cosh_test_tonearest ();
7499 cosh_test_towardzero ();
7500 cosh_test_downward ();
7501 cosh_test_upward ();
8847214f 7502 sinh_test ();
ca811b22
JM
7503 sinh_test_tonearest ();
7504 sinh_test_towardzero ();
7505 sinh_test_downward ();
7506 sinh_test_upward ();
8847214f
UD
7507 tanh_test ();
7508
7509 /* Exponential and logarithmic functions: */
7510 exp_test ();
28afd92d
JM
7511 exp_test_tonearest ();
7512 exp_test_towardzero ();
7513 exp_test_downward ();
7514 exp_test_upward ();
8847214f
UD
7515 exp10_test ();
7516 exp2_test ();
7517 expm1_test ();
7518 frexp_test ();
7519 ldexp_test ();
7520 log_test ();
7521 log10_test ();
7522 log1p_test ();
7523 log2_test ();
7524 logb_test ();
7525 modf_test ();
7526 ilogb_test ();
7527 scalb_test ();
7528 scalbn_test ();
7529 scalbln_test ();
f5c8f285 7530 significand_test ();
8847214f
UD
7531
7532 /* Power and absolute value functions: */
7533 cbrt_test ();
7534 fabs_test ();
7535 hypot_test ();
7536 pow_test ();
b7cd39e8
JM
7537 pow_test_tonearest ();
7538 pow_test_towardzero ();
7539 pow_test_downward ();
7540 pow_test_upward ();
8847214f
UD
7541 sqrt_test ();
7542
7543 /* Error and gamma functions: */
7544 erf_test ();
7545 erfc_test ();
7546 gamma_test ();
7547 lgamma_test ();
7548 tgamma_test ();
7549
7550 /* Nearest integer functions: */
7551 ceil_test ();
7552 floor_test ();
7553 nearbyint_test ();
7554 rint_test ();
4d37c8aa
UD
7555 rint_test_tonearest ();
7556 rint_test_towardzero ();
7557 rint_test_downward ();
7558 rint_test_upward ();
8847214f 7559 lrint_test ();
6624dbc0
UD
7560 lrint_test_tonearest ();
7561 lrint_test_towardzero ();
7562 lrint_test_downward ();
7563 lrint_test_upward ();
8847214f 7564 llrint_test ();
830fce04
RM
7565 llrint_test_tonearest ();
7566 llrint_test_towardzero ();
7567 llrint_test_downward ();
7568 llrint_test_upward ();
8847214f
UD
7569 round_test ();
7570 lround_test ();
7571 llround_test ();
7572 trunc_test ();
7573
7574 /* Remainder functions: */
7575 fmod_test ();
7576 remainder_test ();
7577 remquo_test ();
7578
7579 /* Manipulation functions: */
7580 copysign_test ();
7581 nextafter_test ();
fe559c5e 7582 nexttoward_test ();
8847214f
UD
7583
7584 /* maximum, minimum and positive difference functions */
7585 fdim_test ();
7586 fmax_test ();
7587 fmin_test ();
7588
7589 /* Multiply and add: */
7590 fma_test ();
7591
7592 /* Complex functions: */
7593 cabs_test ();
7594 cacos_test ();
7595 cacosh_test ();
7596 carg_test ();
7597 casin_test ();
7598 casinh_test ();
7599 catan_test ();
7600 catanh_test ();
7601 ccos_test ();
7602 ccosh_test ();
7603 cexp_test ();
0cdc8e6f 7604 cimag_test ();
8847214f
UD
7605 clog10_test ();
7606 clog_test ();
0cdc8e6f 7607 conj_test ();
8847214f
UD
7608 cpow_test ();
7609 cproj_test ();
0cdc8e6f 7610 creal_test ();
8847214f
UD
7611 csin_test ();
7612 csinh_test ();
7613 csqrt_test ();
7614 ctan_test ();
7615 ctanh_test ();
7616
7617 /* Bessel functions: */
7618 j0_test ();
7619 j1_test ();
7620 jn_test ();
7621 y0_test ();
7622 y1_test ();
7623 yn_test ();
7624
7625 if (output_ulps)
7626 fclose (ulps_file);
7627
7628 printf ("\nTest suite completed:\n");
7629 printf (" %d test cases plus %d tests for exception flags executed.\n",
7630 noTests, noExcTests);
7631 if (noXFails)
a9a56960 7632 printf (" %d expected failures occurred.\n", noXFails);
8847214f 7633 if (noXPasses)
a9a56960 7634 printf (" %d unexpected passes occurred.\n", noXPasses);
8847214f
UD
7635 if (noErrors)
7636 {
a9a56960 7637 printf (" %d errors occurred.\n", noErrors);
cf3141a5 7638 return 1;
8847214f
UD
7639 }
7640 printf (" All tests passed successfully.\n");
cf3141a5
AJ
7641
7642 return 0;
8847214f
UD
7643}
7644
7645/*
7646 * Local Variables:
7647 * mode:c
7648 * End:
7649 */