glibc/math/libm-test.inc

10110 lines
752 KiB
PHP
Raw Normal View History

/* Copyright (C) 1997-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
2002-04-19 14:52:54 +00:00
Contributed by Andreas Jaeger <aj@suse.de>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
/* Part of testsuite for libm.
This file is processed by a perl script. The resulting file has to
be included by a master file that defines:
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
Macros:
FUNC(function): converts general function name (like cos) to
name with correct suffix (e.g. cosl or cosf)
FLOAT: floating point type to test
- TEST_MSG: informal message to be displayed
CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
chooses one of the parameters as delta for testing
equality
PRINTF_EXPR Floating point conversion specification to print a variable
of type FLOAT with printf. PRINTF_EXPR just contains
the specifier, not the percent and width arguments,
e.g. "f".
PRINTF_XEXPR Like PRINTF_EXPR, but print in hexadecimal format.
PRINTF_NEXPR Like PRINTF_EXPR, but print nice. */
/* This testsuite has currently tests for:
acos, acosh, asin, asinh, atan, atan2, atanh,
2013-05-24 20:33:14 +00:00
cbrt, ceil, copysign, cos, cosh, drem, erf, erfc, exp, exp10, exp2, expm1,
fabs, fdim, finite, floor, fma, fmax, fmin, fmod, fpclassify,
frexp, gamma, hypot,
ilogb, isfinite, isinf, isnan, isnormal, issignaling,
isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
j0, j1, jn,
ldexp, lgamma, log, log10, log1p, log2, logb,
2012-10-05 17:06:23 +00:00
modf, nearbyint, nextafter, nexttoward,
2013-05-24 20:33:14 +00:00
pow, pow10, remainder, remquo, rint, lrint, llrint,
round, lround, llround,
scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
y0, y1, yn, significand
and for the following complex math functions:
cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
2012-10-05 17:06:23 +00:00
ccos, ccosh, cexp, cimag, clog, clog10, conj, cpow, cproj, creal,
csin, csinh, csqrt, ctan, ctanh.
2012-10-05 17:06:23 +00:00
At the moment the following functions and macros aren't tested:
lgamma_r,
2013-05-24 20:33:14 +00:00
nan.
Parameter handling is primitive in the moment:
--verbose=[0..3] for different levels of output:
0: only error count
1: basic report on failed tests (default)
2: full report on all tests
-v for full output (equals --verbose=3)
-u for generation of an ULPs file
*/
/* "Philosophy":
This suite tests some aspects of the correct implementation of
mathematical functions in libm. Some simple, specific parameters
are tested for correctness but there's no exhaustive
testing. Handling of specific inputs (e.g. infinity, not-a-number)
is also tested. Correct handling of exceptions is checked
against. These implemented tests should check all cases that are
Update. 1999-10-31 Ulrich Drepper <drepper@cygnus.com> * includes/features.h: Replace __USE_ISOC9X by __USE_ISOC99 and also recognize _ISOC99_SOURCE. * libio/stdio.h: Likewise. * math/math.h: Likewise. * math/bits/mathcalls.h: Likewise. * math/stdio.h: Likewise. * stdlib/stdlib.h: Likewise. * sysdeps/alpha/fpu/bits/mathdef.h: Likewise. * sysdeps/alpha/fpu/bits/mathinline.h: Likewise. * sysdeps/arm/bits/huge_val.h: Likewise. * sysdeps/generic/bits/mathdef.h: Likewise. * sysdeps/i386/bits/huge_val.h: Likewise. * sysdeps/i386/fpu/bits/mathdef.h: Likewise. * sysdeps/i386/fpu/bits/mathinline.h: Likewise. * sysdeps/ieee754/bits/huge_val.h: Likewise. * sysdeps/m68k/bits/huge_val.h: Likewise. * sysdeps/m68k/fpu/bits/mathdef.h: Likewise. * sysdeps/m68k/fpu/bits/mathinline.h: Likewise. * sysdeps/powerpc/bits/mathdef.h: Likewise. * sysdeps/powerpc/bits/mathinline.h: Likewise. * sysdeps/sparc/fpu/bits/mathdef.h: Likewise. * sysdeps/sparc/fpu/bits/mathinline.h: Likewise. * sysdeps/sparc/sparc32/fpu/bits/huge_val.h: Likewise. * wcsmbs/wchar.h: Likewise. * sysdeps/powerpc/bits/mathdef.h: Moved to... * sysdeps/powerpc/fpu/bits/mathdef.h: ...here. * sysdeps/powerpc/bits/mathinline.h: Moved to... * sysdeps/powerpc/fpu/bits/mathinline.h: ...here. 1999-10-31 Andreas Jaeger <aj@suse.de> * manual/math.texi (Errors in Math Functions): Correct TeX code. 1999-10-31 Andreas Jaeger <aj@suse.de> * math/libm-test.inc: Change comments to use ISO C99 instead of ISO C9x. * math/w_lgamma.c: Likewise. * math/w_lgammaf.c: Likewise. * math/w_lgammal.c: Likewise. * math/test-fenv.c: Likewise. * sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise. * sysdeps/ieee754/ldbl-128/printf_fphex.c: Likewise. * sysdeps/generic/printf_fphex.c: Likewise. 1999-10-31 Andreas Jaeger <aj@suse.de> * manual/arith.texi (Parsing of Floats): Remove C from ISO C comment. * manual/math.texi: Change ISO C9x to ISO C99. * manual/startup.texi: Likewise. * manual/stdio.texi: Likewise. 1999-10-31 Andreas Jaeger <aj@suse.de> * manual/arith.texi: Change ISO C9x to ISO C99. * manual/time.texi (Low-Level Time String Parsing): Likewise.
1999-10-31 17:37:43 +00:00
specified in ISO C99.
NaN values: There exist signalling and quiet NaNs. This implementation
only uses quiet NaN as parameter. Where the sign of a NaN is
significant, this is not tested. The payload of NaNs is not examined.
Inline functions: Inlining functions should give an improvement in
speed - but not in precission. The inlined functions return
reasonable values for a reasonable range of input values. The
result is not necessarily correct for all values and exceptions are
not correctly raised in all cases. Problematic input and return
values are infinity, not-a-number and minus zero. This suite
therefore does not check these specific inputs and the exception
handling for inlined mathematical functions - just the "reasonable"
values are checked.
Beware: The tests might fail for any of the following reasons:
- Tests are wrong
- Functions are wrong
- Floating Point Unit not working properly
- Compiler has errors
With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
To Do: All parameter should be numbers that can be represented as
exact floating point values. Currently some values cannot be
represented exactly and therefore the result is not the expected
result. For this we will use 36 digits so that numbers can be
represented exactly. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif
#include <complex.h>
#include <math.h>
#include <float.h>
#include <fenv.h>
Update. 2001-06-04 Bruno Haible <haible@clisp.cons.org> * iconv/loop.c (UNICODE_TAG_HANDLER): New macro. * iconv/gconv_simple.c (__gconv_transform_internal_ascii): Invoke UNICODE_TAG_HANDLER. (__gconv_transform_internal_ucs2): Likewise. (__gconv_transform_internal_ucs2reverse): Likewise. * iconvdata/8bit-gap.c (BODY for TO_LOOP): Invoke UNICODE_TAG_HANDLER. * iconvdata/8bit-generic.c (BODY for TO_LOOP): Likewise. * iconvdata/ansi_x3.110.c (BODY for TO_LOOP): Likewise. * iconvdata/big5.c (BODY for TO_LOOP): Likewise. * iconvdata/big5hkscs.c (BODY for TO_LOOP): Likewise. * iconvdata/cp1255.c (BODY for TO_LOOP): Likewise. * iconvdata/cp1258.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-cn.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-jp.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-kr.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-tw.c (BODY for TO_LOOP): Likewise. * iconvdata/gbk.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm930.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm932.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm933.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm935.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm937.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm939.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm943.c (BODY for TO_LOOP): Likewise. * iconvdata/iso646.c (BODY for TO_LOOP): Likewise. * iconvdata/iso8859-1.c (BODY for TO_LOOP): Likewise. * iconvdata/iso_6937.c (BODY for TO_LOOP): Likewise. * iconvdata/iso_6937-2.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-cn.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-cn-ext.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-kr.c (BODY for TO_LOOP): Likewise. * iconvdata/johab.c (BODY for TO_LOOP): Likewise. * iconvdata/sjis.c (BODY for TO_LOOP): Likewise. * iconvdata/t.61.c (BODY for TO_LOOP): Likewise. * iconvdata/uhc.c (BODY for TO_LOOP): Likewise. * iconvdata/unicode.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-jp.c (TAG_none, TAG_language, TAG_language_j, TAG_language_ja, TAG_language_k, TAG_language_ko, TAG_language_z, TAG_language_zh, CURRENT_TAG_MASK): New enum values. (EMIT_SHIFT_TO_INIT): Don't emit an escape sequence if ASCII_set is already selected but set2 or tag are set. (conversion): New enum type. (cvlist_t): New type. (CVLIST, CVLIST_FIRST, CVLIST_REST): New macros. (conversion_lists): New array. (BODY for TO_LOOP): Keep track of Unicode 3.1 language tag. If "ja", prefer conversion to Japanese character sets. If "zh", prefer conversion to GB2312. If "ko", prefer conversion to KSC5601. Small optimizations. (INIT_PARAMS): Add tag. (UPDATE_PARAMS): Add tag. 2001-06-04 Bruno Haible <haible@clisp.cons.org> * locale/programs/locfile.c (write_locale_data): Before creat(), unlink the file, to avoid crashing the processes that mmap it. Change a double slash to a single slash. Free fname in case of error return. 2001-06-02 Jakub Jelinek <jakub@redhat.com> * sysdeps/i386/fpu/s_frexpl.S (__frexpl): Mostly revert 2000-12-03 changes, do the special handling for denormal numbers, not for normalized numbers (patch by <trevin@xmission.com>). * math/test-misc.c (main): Test frexpl with denormal arguments. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/libm-test.inc (llround_test): Add two new llround tests. * sysdeps/ieee754/ldbl-96/s_llroundl.c (__llroundl): Don't allow overflow when rounding away from zero. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/Makefile (libm-calls): Add e_log2, w_log2, remove s_log2. * math/math_private.h (__ieee754_log2, __ieee754_log2f, __ieee754_log2l): New prototypes. * sysdeps/generic/w_log2.c: New file. * sysdeps/generic/w_log2f.c: New file. * sysdeps/generic/w_log2l.c: New file. * sysdeps/generic/s_log2l.c: Move... * sysdeps/generic/e_log2l.c: ...to here. Rename to __ieee754_log2l. * sysdeps/ieee754/k_standard.c (__kernel_standard): Handle log2(0) and log2(x < 0). * sysdeps/i386/fpu/s_log2.S: Move... * sysdeps/i386/fpu/e_log2.S: ...to here. Rename to __ieee754_log2. * sysdeps/i386/fpu/s_log2f.S: Move... * sysdeps/i386/fpu/e_log2f.S: ...to here. Rename to __ieee754_log2f. * sysdeps/i386/fpu/s_log2l.S: Move... * sysdeps/i386/fpu/e_log2l.S: ...to here. Rename to __ieee754_log2l. * sysdeps/m68k/fpu/s_log2.S: Move... * sysdeps/m68k/fpu/e_log2.S: ...to here. Rename to __ieee754_log2. * sysdeps/m68k/fpu/s_log2f.S: Move... * sysdeps/m68k/fpu/e_log2f.S: ...to here. Rename to __ieee754_log2f. * sysdeps/m68k/fpu/s_log2l.S: Move... * sysdeps/m68k/fpu/e_log2l.S: ...to here. Rename to __ieee754_log2l. * sysdeps/ieee754/dbl-64/s_log2.c: Move... * sysdeps/ieee754/dbl-64/e_log2.c: ...to here. Rename to __ieee754_log2. * sysdeps/ieee754/flt-32/s_log2f.c: Move... * sysdeps/ieee754/flt-32/e_log2f.c: ...to here. Rename to __ieee754_log2f. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/w_exp2.c (u_threshold): Lower threshold so that even arguments which result in denormalized exp2 are accepted. (__exp2): Arguments equal to u_threshold already result into underflow. * sysdeps/generic/w_exp2f.c (u_threshold, __exp2f): Likewise. * sysdeps/generic/w_exp2l.c (u_threshold, __exp2l): Likewise. * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Lomark was too low, with corrected lowmark use greaterequal, not greater. * sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/libm-test.inc (ilogb_test): Test that ilogb(+-Inf) == INT_MAX. * sysdeps/i386/fpu/s_ilogb.S (__ilogb): Return INT_MAX for +-Inf. * sysdeps/i386/fpu/s_ilogbf.S (__ilogbf): Likewise. * sysdeps/i386/fpu/s_ilogbl.S (__ilogbl): Likewise. * sysdeps/ieee754/dbl-64/s_ilogb.c (__ilogb): Likewise. * sysdeps/ieee754/flt-32/s_ilogbf.c (__ilogbf): Likewise. * sysdeps/ieee754/ldbl-128/s_ilogbl.c (__ilogbl): Likewise. * sysdeps/ieee754/ldbl-96/s_ilogbl.c (__ilogbl): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/w_coshl.c (__coshl): Test if finite argument gave non-finite result instead of using constant in generic version. * sysdeps/generic/w_coshf.c (__coshf): Likewise. * sysdeps/generic/w_cosh.c (__cosh): Likewise. * sysdeps/generic/w_exp10.c (o_threshold, u_threshold): Remove. (__exp10): Test if finite argument gave non-finite result. * sysdeps/generic/w_exp10f.c (o_threshold, u_threshold, __exp10f): Likewise. * sysdeps/generic/w_exp10l.c (o_threshold, u_threshold, __exp10l): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/ieee754/ldbl-96/e_coshl.c (__ieee754_coshl): Fix overflow threshold constant (log(LDBL_MAX)+M_LN2l). 2001-05-29 Bruno Haible <haible@clisp.cons.org> * locale/programs/ld-ctype.c (idx_table): New struct type. (idx_table_init, idx_table_get, idx_table_add): New functions. (MAX_CHARNAMES_IDX): Remove macro. (locale_ctype_t): Change type of charnames_idx field. (ctype_startup): Change initialization of charnames_idx field. (find_idx): Use idx_table_get and idx_table_add for speed. * locale/programs/charmap.c (charmap_new_char): Fix ucs4 value computation of characters in a range. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * iconvdata/gb18030.c (__fourbyte_to_ucs1): Add mappings for <U03F4>, <U03F5>. (__ucs_to_gb18030_tab1): Likewise. (BODY for FROM_LOOP): Add mapping for <U00010000>..<U0010FFFF>. (BODY for TO_LOOP): Likewise. * iconvdata/tst-table-charmap.sh: Update for charmaps containing <U00xxxxxx> syntax. * iconvdata/tst-table-from.c (bmp_only): New variable. (utf8_decode): If bmp_only, don't return characters outside Unicode plane 0. (main): When testing UTF-8 or GB18030, set bmp_only to 1. Don't print a conversion line if utf8_decode returns NULL. * iconvdata/tst-table-to.c (main): When testing encodings other than UTF-8 and GB18030, loop upto U+30000 instead of U+10000. Use UTF-8 instead of UCS-2 as input. * iconvdata/tst-table.sh: For GB18030, use only the part < 0x10000 of the charmap. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * iconvdata/cns11643l1.c: Update to Unicode 3.1. (__cns11643l1_to_ucs4_tab): Regenerated. (__cns11643l1_from_ucs4_tab12): Regenerated. * iconvdata/cns11643.c: Update to Unicode 3.1. (__cns11643l14_to_ucs4_tab): Remove array. (__cns11643l3_to_ucs4_tab, __cns11643l4_to_ucs4_tab, __cns11643l5_to_ucs4_tab, __cns11643l6_to_ucs4_tab, __cns11643l7_to_ucs4_tab, __cns11643l15_to_ucs4_tab): New arrays. (__cns11643_from_ucs4p0_tab): Renamed from __cns11643_from_ucs4_tab. (__cns11643_from_ucs4p2_tab): New array. * iconvdata/cns11643.h (__cns11643l14_to_ucs4_tab): Remove declaration. (__cns11643l3_to_ucs4_tab, __cns11643l4_to_ucs4_tab, __cns11643l5_to_ucs4_tab, __cns11643l6_to_ucs4_tab, __cns11643l7_to_ucs4_tab, __cns11643l15_to_ucs4_tab): New declarations. (cns11643_to_ucs4): Treat planes 3, 4, 5, 6, 7, 15 instead of 14. (__cns11643_from_ucs4_tab): Remove declaration. (__cns11643_from_ucs4p0_tab, __cns11643_from_ucs4p2_tab): New declarations. (ucs4_to_cns11643): Update for new arrays. Treat U+3400..U+4DFF and U+20000..U+2A6D6. * iconvdata/cns11643l2.h (__cns11643_from_ucs4_tab): Remove declaration. (__cns11643_from_ucs4p0_tab): New declaration. (ucs4_to_cns11643l2): Update for new arrays. * iconvdata/iso-2022-cn-ext.c (BODY for FROM_LOOP): Handle planes 3 to 7. (BODY for TO_LOOP): Handle planes 3 to 7, instead of plane 14. * iconvdata/EUC-TW.irreversible: New file. * iconvdata/tst-table.sh: Use it. * iconvdata/Makefile (distribute): Add CP1255.irreversible, CP1258.irreversible, EUC-TW.irreversible. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * locale/C-translit.h.in: Add transliterations for new Unicode 3.1 mathematical symbols.
2001-06-06 12:55:46 +00:00
#include <limits.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <argp.h>
#include <tininess.h>
#include <math-tests.h>
#include <math-tests-arch.h>
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
/* Structure for ulp data for a function, or the real or imaginary
part of a function. */
struct ulp_data
{
const char *name;
FLOAT max_ulp;
};
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
/* This header defines func_ulps, func_real_ulps and func_imag_ulps
arrays. */
#include "libm-test-ulps.h"
/* Allow platforms without all rounding modes to test properly,
assuming they provide an __FE_UNDEFINED in <bits/fenv.h> which
causes fesetround() to return failure. */
#ifndef FE_TONEAREST
# define FE_TONEAREST __FE_UNDEFINED
#endif
#ifndef FE_TOWARDZERO
# define FE_TOWARDZERO __FE_UNDEFINED
#endif
#ifndef FE_UPWARD
# define FE_UPWARD __FE_UNDEFINED
#endif
#ifndef FE_DOWNWARD
# define FE_DOWNWARD __FE_UNDEFINED
#endif
/* Possible exceptions */
#define NO_EXCEPTION 0x0
#define INVALID_EXCEPTION 0x1
#define DIVIDE_BY_ZERO_EXCEPTION 0x2
#define OVERFLOW_EXCEPTION 0x4
#define UNDERFLOW_EXCEPTION 0x8
#define INEXACT_EXCEPTION 0x10
/* The next flags signals that those exceptions are allowed but not required. */
#define INVALID_EXCEPTION_OK 0x20
#define DIVIDE_BY_ZERO_EXCEPTION_OK 0x40
#define OVERFLOW_EXCEPTION_OK 0x80
#define UNDERFLOW_EXCEPTION_OK 0x100
/* For "inexact" exceptions, the default is allowed but not required
unless INEXACT_EXCEPTION or NO_INEXACT_EXCEPTION is specified. */
#define NO_INEXACT_EXCEPTION 0x200
#define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
/* Some special test flags, passed together with exceptions. */
#define IGNORE_ZERO_INF_SIGN 0x400
#define TEST_NAN_SIGN 0x800
#define NO_TEST_INLINE 0x1000
#define XFAIL_TEST 0x2000
/* Indicate errno settings required or disallowed. */
#define ERRNO_UNCHANGED 0x4000
#define ERRNO_EDOM 0x8000
#define ERRNO_ERANGE 0x10000
/* Flags generated by gen-libm-test.pl, not entered here manually. */
#define IGNORE_RESULT 0x20000
/* Values underflowing only for float. */
#ifdef TEST_FLOAT
# define UNDERFLOW_EXCEPTION_FLOAT UNDERFLOW_EXCEPTION
# define UNDERFLOW_EXCEPTION_OK_FLOAT UNDERFLOW_EXCEPTION_OK
#else
# define UNDERFLOW_EXCEPTION_FLOAT 0
# define UNDERFLOW_EXCEPTION_OK_FLOAT 0
#endif
/* Values underflowing only for double or types with a larger least
positive normal value. */
#if defined TEST_FLOAT || defined TEST_DOUBLE \
|| (defined TEST_LDOUBLE && LDBL_MIN_EXP >= DBL_MIN_EXP)
# define UNDERFLOW_EXCEPTION_DOUBLE UNDERFLOW_EXCEPTION
# define UNDERFLOW_EXCEPTION_OK_DOUBLE UNDERFLOW_EXCEPTION_OK
#else
# define UNDERFLOW_EXCEPTION_DOUBLE 0
# define UNDERFLOW_EXCEPTION_OK_DOUBLE 0
#endif
/* Values underflowing only for IBM long double or types with a larger least
positive normal value. */
#if defined TEST_FLOAT || (defined TEST_LDOUBLE && LDBL_MIN_EXP > DBL_MIN_EXP)
# define UNDERFLOW_EXCEPTION_LDOUBLE_IBM UNDERFLOW_EXCEPTION
#else
# define UNDERFLOW_EXCEPTION_LDOUBLE_IBM 0
#endif
/* Values underflowing on architectures detecting tininess before
rounding, but not on those detecting tininess after rounding. */
#define UNDERFLOW_EXCEPTION_BEFORE_ROUNDING (TININESS_AFTER_ROUNDING \
? 0 \
: UNDERFLOW_EXCEPTION)
/* Inline tests disabled for particular types. */
#ifdef TEST_FLOAT
# define NO_TEST_INLINE_FLOAT NO_TEST_INLINE
#else
# define NO_TEST_INLINE_FLOAT 0
#endif
#ifdef TEST_DOUBLE
# define NO_TEST_INLINE_DOUBLE NO_TEST_INLINE
#else
# define NO_TEST_INLINE_DOUBLE 0
#endif
/* Conditions used by tests generated by gen-auto-libm-tests.c. */
#ifdef TEST_FLOAT
# define TEST_COND_flt_32 1
#else
# define TEST_COND_flt_32 0
#endif
#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
# define TEST_COND_dbl_64 1
#else
# define TEST_COND_dbl_64 0
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64 && LDBL_MIN_EXP == -16381
# define TEST_COND_ldbl_96_intel 1
#else
# define TEST_COND_ldbl_96_intel 0
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64 && LDBL_MIN_EXP == -16382
# define TEST_COND_ldbl_96_m68k 1
#else
# define TEST_COND_ldbl_96_m68k 0
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
# define TEST_COND_ldbl_128 1
#else
# define TEST_COND_ldbl_128 0
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
# define TEST_COND_ldbl_128ibm 1
#else
# define TEST_COND_ldbl_128ibm 0
#endif
#if LONG_MAX == 0x7fffffff
# define TEST_COND_long32 1
# define TEST_COND_long64 0
#else
# define TEST_COND_long32 0
# define TEST_COND_long64 1
#endif
#define TEST_COND_before_rounding (!TININESS_AFTER_ROUNDING)
#define TEST_COND_after_rounding TININESS_AFTER_ROUNDING
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 12:32:44 +00:00
#ifdef __x86_64__
# define TEST_COND_x86_64 1
#else
# define TEST_COND_x86_64 0
#endif
#ifdef __i386__
# define TEST_COND_x86 1
#else
# define TEST_COND_x86 0
#endif
/* Various constants (we must supply them precalculated for accuracy). */
Update. 2000-10-28 Jes Sorensen <jes@linuxcare.com> * sysdeps/unix/sysv/linux/ia64/Versions: Export ioperm, iopl, inb, inw, inl, _inb, _inw, _inl, outb, outw, outl, _outb, _outw, _outl. Reported by Bill Nottingham. 2000-04-06 Andreas Schwab <schwab@suse.de> * sysdeps/ia64/dl-machine.h (TRAMPOLINE_TEMPLATE): Save and restore register r8 for functions that return a structure. 2000-10-12 Jakub Jelinek <jakub@redhat.com> * math/libm-test.inc (M_PI_6l, M_E2l, M_E3l, M_2_SQRT_PIl, M_SQRT_PIl): Increase precision. (cbrt_test): If cbrt is not implemented, don't test it. Add L suffix to double constants in results which differ from their L suffixed counterparts. (exp10_test, fmod_test, frexp_test, hypot_test, sqrt_test): Likewise. * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update. 2000-10-11 Jakub Jelinek <jakub@redhat.com> * inet/rexec.c (rexec_af): Convert rport to host order before passing it to snprintf. 2000-10-14 Ulrich Drepper <drepper@redhat.com> * sysdeps/gnu/netinet/tcp.h: Use u_intXX_t types instead of uintXX_t since this is what <sys/types.h> defines and we include this header. Reported by Bernhard Rosenkraenzer <bero@redhat.de>. * intl/localealias.c (read_alias_file): Update string pointers in map[] if realloc() changed the values. Patch by Jakub Jelinek <jakub@redhat.com>. * manual/stdio.texi: Update printf extension documentation after z became a valid modifier. Patch by Joseph S. Myers <jsm28@cam.ac.uk>. * timezone/africa: Update from tzcode2000g and tzdata2000g. * timezone/asia: Likewise. * timezone/australasia: Likewise. * timezone/backward: Likewise. * timezone/europe: Likewise. * timezone/iso3166.tab: Likewise. * timezone/northamerica: Likewise. * timezone/southamerica: Likewise. * timezone/zone.tab: Likewise.
2000-10-15 02:17:30 +00:00
#define M_PI_6l .52359877559829887307710723054658383L
#define M_PI_34l 2.356194490192344928846982537459627163L /* 3*pi/4 */
#define M_PI_34_LOG10El 1.023282265381381010614337719073516828L
#define M_PI2_LOG10El 0.682188176920920673742891812715677885L
#define M_PI4_LOG10El 0.341094088460460336871445906357838943L
#define M_PI_LOG10El 1.364376353841841347485783625431355770L
New Makefile target `regen-ulps'. The wiki "Regeneration" page has this to say about update ULPs. "The libm-test-ulps files are semiautomatically updated. To update an ulps baseline, run each of the failing tests (test-float, test-double, etc.) with -u; this will generate a file called ULPs; concatenate each of those files with the existing libm-test-ulps file, after removing any entries for particularly huge numbers of ulps that you do not want to mark as expected. Then run gen-libm-test.pl -n -u FILE where FILE is the concatenated file produced in the previous step. This generates a file called NewUlps which is the new sorted version of libm-test-ulps." The same information is listed in math/README.libm-test, and is a lot of manual work that you often want to run over-and-over again while working on a particular test. The `regen-ulps' convenience target does this automatically for developers. We strictly assume the source tree is readonly and add a new --output-dir option to libm-test.inc to allow for writing out ULPs to $(objpfx). When run the new target does the following: * Starts with the baseline ULPs file. * Runs each of the libm math tests with -u. * Adds new changes seen with -u to the baseline. * Sorts and prepares the test output with gen-libm-test.pl. * Leaves math/NewUlps in your build tree to copy to your source tree, cleanup, and checkin. The math test documentation in math/README.libm-test is updated document the new Makefile target. --- 2013-04-06 Carlos O'Donell <carlos@redhat.com> * Makefile.in (regen-ulps): New target. * math/Makefile [ifneq (no,$(PERL)]: Declare regen-ulps with .PHONY. [ifneq (no,$(PERL)] (run-regen-ulps): New variable. [ifneq (no,$(PERL)] (regen-ulps): New target. [ifeq (no,$(PERL)] (regen-ulps): New target. * math/libm-test.inc (ulps_file_name): Define. (output_dir): New variable. (options): Add "output-dir" option. (parse_opt): Handle 'o' case. (main): If output_dir is non-NULL use it as a prefix otherwise use "". * math/README.libm-test: Update `How can I generate "libm-test-ulps"?'
2013-04-06 20:22:47 +00:00
#define ulps_file_name "ULPs" /* Name of the ULPs file. */
static FILE *ulps_file; /* File to document difference. */
static int output_ulps; /* Should ulps printed? */
static char *output_dir; /* Directory where generated files will be written. */
static int noErrors; /* number of errors */
static int noTests; /* number of tests (without testing exceptions) */
static int noExcTests; /* number of tests for exception flags */
static int noErrnoTests;/* number of tests for errno values */
static int verbose;
static int output_max_error; /* Should the maximal errors printed? */
static int output_points; /* Should the single function results printed? */
static int ignore_max_ulp; /* Should we ignore max_ulp? */
#define plus_zero CHOOSE (0.0L, 0.0, 0.0f, \
0.0L, 0.0, 0.0f)
#define minus_zero CHOOSE (-0.0L, -0.0, -0.0f, \
-0.0L, -0.0, -0.0f)
#define plus_infty CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF, \
HUGE_VALL, HUGE_VAL, HUGE_VALF)
#define minus_infty CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF, \
-HUGE_VALL, -HUGE_VAL, -HUGE_VALF)
#define qnan_value FUNC (__builtin_nan) ("")
#define max_value CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX, \
LDBL_MAX, DBL_MAX, FLT_MAX)
#define min_value CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN, \
LDBL_MIN, DBL_MIN, FLT_MIN)
#define min_subnorm_value CHOOSE (__LDBL_DENORM_MIN__, \
__DBL_DENORM_MIN__, \
__FLT_DENORM_MIN__, \
__LDBL_DENORM_MIN__, \
__DBL_DENORM_MIN__, \
__FLT_DENORM_MIN__)
static FLOAT max_error, real_max_error, imag_max_error;
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
static FLOAT prev_max_error, prev_real_max_error, prev_imag_max_error;
Automatically check sanity of ulps from libm tests. This patch makes libm-test.inc apply sanity checks to ulps values resulting from tests, or found in libm-test-ulps files, to avoid the need for manual checking/editing of new ulps for cases that are excessively large or involve functions that should not have any ulps. For IBM long double, errors must be at most 14ulp (the largest currently checked-in value), or at most 3ulp (the documented error bound for division) in the case of exactly-determined functions; for other formats, the limits are 9ulp (also the largest currently checked-in value) and 0ulp. Limits from ulps files are saturated to those bounds, and regen-ulps will ignore any errors outside those bounds. (Thus if, say, you have an architecture-specific problem with fma, the tests can still be XFAILed in auto-libm-test-in, but errors outside the permitted range can no longer be listed in libm-test-ulps.) Tested x86_64. * math/libm-test.inc (max_valid_error): New variable. (init_max_error): Take new argument specifying whether function results are exactly determined. Set max_valid_error and bound other variables for errors based on this argument. (set_max_error): Do not record results above max_valid_error. (check_float_internal): Only accept errors of up to 0.5ulps if also at most max_valid_error. (START): Take new argument EXACT and pass it to init_max_error. (acos_test): Update call to START. (acos_test_tonearest): Likewise. (acos_test_towardzero): Likewise. (acos_test_downward): Likewise. (acos_test_upward): Likewise. (acosh_test): Likewise. (asin_test): Likewise. (asin_test_tonearest): Likewise. (asin_test_towardzero): Likewise. (asin_test_downward): Likewise. (asin_test_upward): Likewise. (asinh_test): Likewise. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (cbrt_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (ceil_test): Likewise. (cexp_test): Likewise. (cimag_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cos_test): Likewise. (cos_test_tonearest): Likewise. (cos_test_towardzero): Likewise. (cos_test_downward): Likewise. (cos_test_upward): Likewise. (cosh_test): Likewise. (cosh_test_tonearest): Likewise. (cosh_test_towardzero): Likewise. (cosh_test_downward): Likewise. (cosh_test_upward): Likewise. (cpow_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctan_test_tonearest): Likewise. (ctan_test_towardzero): Likewise. (ctan_test_downward): Likewise. (ctan_test_upward): Likewise. (ctanh_test): Likewise. (ctanh_test_tonearest): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_test_downward): Likewise. (ctanh_test_upward): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp_test_tonearest): Likewise. (exp_test_towardzero): Likewise. (exp_test_downward): Likewise. (exp_test_upward): Likewise. (exp10_test): Likewise. (exp10_test_tonearest): Likewise. (exp10_test_towardzero): Likewise. (exp10_test_downward): Likewise. (exp10_test_upward): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (expm1_test_tonearest): Likewise. (expm1_test_towardzero): Likewise. (expm1_test_downward): Likewise. (expm1_test_upward): Likewise. (fabs_test): Likewise. (fdim_test): Likewise. (floor_test): Likewise. (fma_test): Likewise. (fma_test_towardzero): Likewise. (fma_test_downward): Likewise. (fma_test_upward): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (hypot_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (jn_test): Likewise. (ldexp_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (lrint_test): Likewise. (lrint_test_tonearest): Likewise. (lrint_test_towardzero): Likewise. (lrint_test_downward): Likewise. (lrint_test_upward): Likewise. (llrint_test): Likewise. (llrint_test_tonearest): Likewise. (llrint_test_towardzero): Likewise. (llrint_test_downward): Likewise. (llrint_test_upward): Likewise. (log_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (logb_test_downward): Likewise. (lround_test): Likewise. (llround_test): Likewise. (modf_test): Likewise. (nearbyint_test): Likewise. (nextafter_test): Likewise. (nexttoward_test): Likewise. (pow_test): Likewise. (pow_test_tonearest): Likewise. (pow_test_towardzero): Likewise. (pow_test_downward): Likewise. (pow_test_upward): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Likewise. (rint_test): Likewise. (rint_test_tonearest): Likewise. (rint_test_towardzero): Likewise. (rint_test_downward): Likewise. (rint_test_upward): Likewise. (round_test): Likewise. (scalb_test): Likewise. (scalbn_test): Likewise. (scalbln_test): Likewise. (signbit_test): Likewise. (sin_test): Likewise. (sin_test_tonearest): Likewise. (sin_test_towardzero): Likewise. (sin_test_downward): Likewise. (sin_test_upward): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sinh_test_tonearest): Likewise. (sinh_test_towardzero): Likewise. (sinh_test_downward): Likewise. (sinh_test_upward): Likewise. (sqrt_test): Likewise. (sqrt_test_tonearest): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_test_downward): Likewise. (sqrt_test_upward): Likewise. (tan_test): Likewise. (tan_test_tonearest): Likewise. (tan_test_towardzero): Likewise. (tan_test_downward): Likewise. (tan_test_upward): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise. (trunc_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. (yn_test): Likewise. (significand_test): Likewise.
2014-03-05 15:05:20 +00:00
static FLOAT max_valid_error;
#define BUILD_COMPLEX(real, imag) \
({ __complex__ FLOAT __retval; \
__real__ __retval = (real); \
__imag__ __retval = (imag); \
__retval; })
#define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
2011-10-07 19:14:06 +00:00
(LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
#define MIN_EXP CHOOSE ((LDBL_MIN_EXP-1), (DBL_MIN_EXP-1), (FLT_MIN_EXP-1), \
(LDBL_MIN_EXP-1), (DBL_MIN_EXP-1), (FLT_MIN_EXP-1))
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
/* Compare KEY (a string, with the name of a function) with ULP (a
pointer to a struct ulp_data structure), returning a value less
than, equal to or greater than zero for use in bsearch. */
static int
compare_ulp_data (const void *key, const void *ulp)
{
const char *keystr = key;
const struct ulp_data *ulpdat = ulp;
return strcmp (keystr, ulpdat->name);
}
/* Return the ulps for NAME in array DATA with NMEMB elements, or 0 if
no ulps listed. */
static FLOAT
find_ulps (const char *name, const struct ulp_data *data, size_t nmemb)
{
const struct ulp_data *entry = bsearch (name, data, nmemb, sizeof (*data),
compare_ulp_data);
if (entry == NULL)
return 0;
else
return entry->max_ulp;
}
static void
Automatically check sanity of ulps from libm tests. This patch makes libm-test.inc apply sanity checks to ulps values resulting from tests, or found in libm-test-ulps files, to avoid the need for manual checking/editing of new ulps for cases that are excessively large or involve functions that should not have any ulps. For IBM long double, errors must be at most 14ulp (the largest currently checked-in value), or at most 3ulp (the documented error bound for division) in the case of exactly-determined functions; for other formats, the limits are 9ulp (also the largest currently checked-in value) and 0ulp. Limits from ulps files are saturated to those bounds, and regen-ulps will ignore any errors outside those bounds. (Thus if, say, you have an architecture-specific problem with fma, the tests can still be XFAILed in auto-libm-test-in, but errors outside the permitted range can no longer be listed in libm-test-ulps.) Tested x86_64. * math/libm-test.inc (max_valid_error): New variable. (init_max_error): Take new argument specifying whether function results are exactly determined. Set max_valid_error and bound other variables for errors based on this argument. (set_max_error): Do not record results above max_valid_error. (check_float_internal): Only accept errors of up to 0.5ulps if also at most max_valid_error. (START): Take new argument EXACT and pass it to init_max_error. (acos_test): Update call to START. (acos_test_tonearest): Likewise. (acos_test_towardzero): Likewise. (acos_test_downward): Likewise. (acos_test_upward): Likewise. (acosh_test): Likewise. (asin_test): Likewise. (asin_test_tonearest): Likewise. (asin_test_towardzero): Likewise. (asin_test_downward): Likewise. (asin_test_upward): Likewise. (asinh_test): Likewise. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (cbrt_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (ceil_test): Likewise. (cexp_test): Likewise. (cimag_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cos_test): Likewise. (cos_test_tonearest): Likewise. (cos_test_towardzero): Likewise. (cos_test_downward): Likewise. (cos_test_upward): Likewise. (cosh_test): Likewise. (cosh_test_tonearest): Likewise. (cosh_test_towardzero): Likewise. (cosh_test_downward): Likewise. (cosh_test_upward): Likewise. (cpow_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctan_test_tonearest): Likewise. (ctan_test_towardzero): Likewise. (ctan_test_downward): Likewise. (ctan_test_upward): Likewise. (ctanh_test): Likewise. (ctanh_test_tonearest): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_test_downward): Likewise. (ctanh_test_upward): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp_test_tonearest): Likewise. (exp_test_towardzero): Likewise. (exp_test_downward): Likewise. (exp_test_upward): Likewise. (exp10_test): Likewise. (exp10_test_tonearest): Likewise. (exp10_test_towardzero): Likewise. (exp10_test_downward): Likewise. (exp10_test_upward): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (expm1_test_tonearest): Likewise. (expm1_test_towardzero): Likewise. (expm1_test_downward): Likewise. (expm1_test_upward): Likewise. (fabs_test): Likewise. (fdim_test): Likewise. (floor_test): Likewise. (fma_test): Likewise. (fma_test_towardzero): Likewise. (fma_test_downward): Likewise. (fma_test_upward): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (hypot_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (jn_test): Likewise. (ldexp_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (lrint_test): Likewise. (lrint_test_tonearest): Likewise. (lrint_test_towardzero): Likewise. (lrint_test_downward): Likewise. (lrint_test_upward): Likewise. (llrint_test): Likewise. (llrint_test_tonearest): Likewise. (llrint_test_towardzero): Likewise. (llrint_test_downward): Likewise. (llrint_test_upward): Likewise. (log_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (logb_test_downward): Likewise. (lround_test): Likewise. (llround_test): Likewise. (modf_test): Likewise. (nearbyint_test): Likewise. (nextafter_test): Likewise. (nexttoward_test): Likewise. (pow_test): Likewise. (pow_test_tonearest): Likewise. (pow_test_towardzero): Likewise. (pow_test_downward): Likewise. (pow_test_upward): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Likewise. (rint_test): Likewise. (rint_test_tonearest): Likewise. (rint_test_towardzero): Likewise. (rint_test_downward): Likewise. (rint_test_upward): Likewise. (round_test): Likewise. (scalb_test): Likewise. (scalbn_test): Likewise. (scalbln_test): Likewise. (signbit_test): Likewise. (sin_test): Likewise. (sin_test_tonearest): Likewise. (sin_test_towardzero): Likewise. (sin_test_downward): Likewise. (sin_test_upward): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sinh_test_tonearest): Likewise. (sinh_test_towardzero): Likewise. (sinh_test_downward): Likewise. (sinh_test_upward): Likewise. (sqrt_test): Likewise. (sqrt_test_tonearest): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_test_downward): Likewise. (sqrt_test_upward): Likewise. (tan_test): Likewise. (tan_test_tonearest): Likewise. (tan_test_towardzero): Likewise. (tan_test_downward): Likewise. (tan_test_upward): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise. (trunc_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. (yn_test): Likewise. (significand_test): Likewise.
2014-03-05 15:05:20 +00:00
init_max_error (const char *name, int exact)
{
max_error = 0;
real_max_error = 0;
imag_max_error = 0;
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
prev_max_error = find_ulps (name, func_ulps,
sizeof (func_ulps) / sizeof (func_ulps[0]));
prev_real_max_error = find_ulps (name, func_real_ulps,
(sizeof (func_real_ulps)
/ sizeof (func_real_ulps[0])));
prev_imag_max_error = find_ulps (name, func_imag_ulps,
(sizeof (func_imag_ulps)
/ sizeof (func_imag_ulps[0])));
Automatically check sanity of ulps from libm tests. This patch makes libm-test.inc apply sanity checks to ulps values resulting from tests, or found in libm-test-ulps files, to avoid the need for manual checking/editing of new ulps for cases that are excessively large or involve functions that should not have any ulps. For IBM long double, errors must be at most 14ulp (the largest currently checked-in value), or at most 3ulp (the documented error bound for division) in the case of exactly-determined functions; for other formats, the limits are 9ulp (also the largest currently checked-in value) and 0ulp. Limits from ulps files are saturated to those bounds, and regen-ulps will ignore any errors outside those bounds. (Thus if, say, you have an architecture-specific problem with fma, the tests can still be XFAILed in auto-libm-test-in, but errors outside the permitted range can no longer be listed in libm-test-ulps.) Tested x86_64. * math/libm-test.inc (max_valid_error): New variable. (init_max_error): Take new argument specifying whether function results are exactly determined. Set max_valid_error and bound other variables for errors based on this argument. (set_max_error): Do not record results above max_valid_error. (check_float_internal): Only accept errors of up to 0.5ulps if also at most max_valid_error. (START): Take new argument EXACT and pass it to init_max_error. (acos_test): Update call to START. (acos_test_tonearest): Likewise. (acos_test_towardzero): Likewise. (acos_test_downward): Likewise. (acos_test_upward): Likewise. (acosh_test): Likewise. (asin_test): Likewise. (asin_test_tonearest): Likewise. (asin_test_towardzero): Likewise. (asin_test_downward): Likewise. (asin_test_upward): Likewise. (asinh_test): Likewise. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (cbrt_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (ceil_test): Likewise. (cexp_test): Likewise. (cimag_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cos_test): Likewise. (cos_test_tonearest): Likewise. (cos_test_towardzero): Likewise. (cos_test_downward): Likewise. (cos_test_upward): Likewise. (cosh_test): Likewise. (cosh_test_tonearest): Likewise. (cosh_test_towardzero): Likewise. (cosh_test_downward): Likewise. (cosh_test_upward): Likewise. (cpow_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctan_test_tonearest): Likewise. (ctan_test_towardzero): Likewise. (ctan_test_downward): Likewise. (ctan_test_upward): Likewise. (ctanh_test): Likewise. (ctanh_test_tonearest): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_test_downward): Likewise. (ctanh_test_upward): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp_test_tonearest): Likewise. (exp_test_towardzero): Likewise. (exp_test_downward): Likewise. (exp_test_upward): Likewise. (exp10_test): Likewise. (exp10_test_tonearest): Likewise. (exp10_test_towardzero): Likewise. (exp10_test_downward): Likewise. (exp10_test_upward): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (expm1_test_tonearest): Likewise. (expm1_test_towardzero): Likewise. (expm1_test_downward): Likewise. (expm1_test_upward): Likewise. (fabs_test): Likewise. (fdim_test): Likewise. (floor_test): Likewise. (fma_test): Likewise. (fma_test_towardzero): Likewise. (fma_test_downward): Likewise. (fma_test_upward): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (hypot_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (jn_test): Likewise. (ldexp_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (lrint_test): Likewise. (lrint_test_tonearest): Likewise. (lrint_test_towardzero): Likewise. (lrint_test_downward): Likewise. (lrint_test_upward): Likewise. (llrint_test): Likewise. (llrint_test_tonearest): Likewise. (llrint_test_towardzero): Likewise. (llrint_test_downward): Likewise. (llrint_test_upward): Likewise. (log_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (logb_test_downward): Likewise. (lround_test): Likewise. (llround_test): Likewise. (modf_test): Likewise. (nearbyint_test): Likewise. (nextafter_test): Likewise. (nexttoward_test): Likewise. (pow_test): Likewise. (pow_test_tonearest): Likewise. (pow_test_towardzero): Likewise. (pow_test_downward): Likewise. (pow_test_upward): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Likewise. (rint_test): Likewise. (rint_test_tonearest): Likewise. (rint_test_towardzero): Likewise. (rint_test_downward): Likewise. (rint_test_upward): Likewise. (round_test): Likewise. (scalb_test): Likewise. (scalbn_test): Likewise. (scalbln_test): Likewise. (signbit_test): Likewise. (sin_test): Likewise. (sin_test_tonearest): Likewise. (sin_test_towardzero): Likewise. (sin_test_downward): Likewise. (sin_test_upward): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sinh_test_tonearest): Likewise. (sinh_test_towardzero): Likewise. (sinh_test_downward): Likewise. (sinh_test_upward): Likewise. (sqrt_test): Likewise. (sqrt_test_tonearest): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_test_downward): Likewise. (sqrt_test_upward): Likewise. (tan_test): Likewise. (tan_test_tonearest): Likewise. (tan_test_towardzero): Likewise. (tan_test_downward): Likewise. (tan_test_upward): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise. (trunc_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. (yn_test): Likewise. (significand_test): Likewise.
2014-03-05 15:05:20 +00:00
#if TEST_COND_ldbl_128ibm
/* The documented accuracy of IBM long double division is 3ulp (see
libgcc/config/rs6000/ibm-ldouble-format), so do not require
better accuracy for libm functions that are exactly defined for
other formats. */
max_valid_error = exact ? 3 : 14;
#else
max_valid_error = exact ? 0 : 9;
#endif
prev_max_error = (prev_max_error <= max_valid_error
? prev_max_error
: max_valid_error);
prev_real_max_error = (prev_real_max_error <= max_valid_error
? prev_real_max_error
: max_valid_error);
prev_imag_max_error = (prev_imag_max_error <= max_valid_error
? prev_imag_max_error
: max_valid_error);
feclearexcept (FE_ALL_EXCEPT);
errno = 0;
}
static void
set_max_error (FLOAT current, FLOAT *curr_max_error)
{
Automatically check sanity of ulps from libm tests. This patch makes libm-test.inc apply sanity checks to ulps values resulting from tests, or found in libm-test-ulps files, to avoid the need for manual checking/editing of new ulps for cases that are excessively large or involve functions that should not have any ulps. For IBM long double, errors must be at most 14ulp (the largest currently checked-in value), or at most 3ulp (the documented error bound for division) in the case of exactly-determined functions; for other formats, the limits are 9ulp (also the largest currently checked-in value) and 0ulp. Limits from ulps files are saturated to those bounds, and regen-ulps will ignore any errors outside those bounds. (Thus if, say, you have an architecture-specific problem with fma, the tests can still be XFAILed in auto-libm-test-in, but errors outside the permitted range can no longer be listed in libm-test-ulps.) Tested x86_64. * math/libm-test.inc (max_valid_error): New variable. (init_max_error): Take new argument specifying whether function results are exactly determined. Set max_valid_error and bound other variables for errors based on this argument. (set_max_error): Do not record results above max_valid_error. (check_float_internal): Only accept errors of up to 0.5ulps if also at most max_valid_error. (START): Take new argument EXACT and pass it to init_max_error. (acos_test): Update call to START. (acos_test_tonearest): Likewise. (acos_test_towardzero): Likewise. (acos_test_downward): Likewise. (acos_test_upward): Likewise. (acosh_test): Likewise. (asin_test): Likewise. (asin_test_tonearest): Likewise. (asin_test_towardzero): Likewise. (asin_test_downward): Likewise. (asin_test_upward): Likewise. (asinh_test): Likewise. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (cbrt_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (ceil_test): Likewise. (cexp_test): Likewise. (cimag_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cos_test): Likewise. (cos_test_tonearest): Likewise. (cos_test_towardzero): Likewise. (cos_test_downward): Likewise. (cos_test_upward): Likewise. (cosh_test): Likewise. (cosh_test_tonearest): Likewise. (cosh_test_towardzero): Likewise. (cosh_test_downward): Likewise. (cosh_test_upward): Likewise. (cpow_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctan_test_tonearest): Likewise. (ctan_test_towardzero): Likewise. (ctan_test_downward): Likewise. (ctan_test_upward): Likewise. (ctanh_test): Likewise. (ctanh_test_tonearest): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_test_downward): Likewise. (ctanh_test_upward): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp_test_tonearest): Likewise. (exp_test_towardzero): Likewise. (exp_test_downward): Likewise. (exp_test_upward): Likewise. (exp10_test): Likewise. (exp10_test_tonearest): Likewise. (exp10_test_towardzero): Likewise. (exp10_test_downward): Likewise. (exp10_test_upward): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (expm1_test_tonearest): Likewise. (expm1_test_towardzero): Likewise. (expm1_test_downward): Likewise. (expm1_test_upward): Likewise. (fabs_test): Likewise. (fdim_test): Likewise. (floor_test): Likewise. (fma_test): Likewise. (fma_test_towardzero): Likewise. (fma_test_downward): Likewise. (fma_test_upward): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (hypot_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (jn_test): Likewise. (ldexp_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (lrint_test): Likewise. (lrint_test_tonearest): Likewise. (lrint_test_towardzero): Likewise. (lrint_test_downward): Likewise. (lrint_test_upward): Likewise. (llrint_test): Likewise. (llrint_test_tonearest): Likewise. (llrint_test_towardzero): Likewise. (llrint_test_downward): Likewise. (llrint_test_upward): Likewise. (log_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (logb_test_downward): Likewise. (lround_test): Likewise. (llround_test): Likewise. (modf_test): Likewise. (nearbyint_test): Likewise. (nextafter_test): Likewise. (nexttoward_test): Likewise. (pow_test): Likewise. (pow_test_tonearest): Likewise. (pow_test_towardzero): Likewise. (pow_test_downward): Likewise. (pow_test_upward): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Likewise. (rint_test): Likewise. (rint_test_tonearest): Likewise. (rint_test_towardzero): Likewise. (rint_test_downward): Likewise. (rint_test_upward): Likewise. (round_test): Likewise. (scalb_test): Likewise. (scalbn_test): Likewise. (scalbln_test): Likewise. (signbit_test): Likewise. (sin_test): Likewise. (sin_test_tonearest): Likewise. (sin_test_towardzero): Likewise. (sin_test_downward): Likewise. (sin_test_upward): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sinh_test_tonearest): Likewise. (sinh_test_towardzero): Likewise. (sinh_test_downward): Likewise. (sinh_test_upward): Likewise. (sqrt_test): Likewise. (sqrt_test_tonearest): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_test_downward): Likewise. (sqrt_test_upward): Likewise. (tan_test): Likewise. (tan_test_tonearest): Likewise. (tan_test_towardzero): Likewise. (tan_test_downward): Likewise. (tan_test_upward): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise. (trunc_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. (yn_test): Likewise. (significand_test): Likewise.
2014-03-05 15:05:20 +00:00
if (current > *curr_max_error && current <= max_valid_error)
*curr_max_error = current;
}
/* Print a FLOAT. */
static void
print_float (FLOAT f)
{
/* As printf doesn't differ between a sNaN and a qNaN, do this manually. */
if (issignaling (f))
printf ("sNaN\n");
else if (isnan (f))
printf ("qNaN\n");
else
printf ("% .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n", f, f);
}
/* Should the message print to screen? This depends on the verbose flag,
and the test status. */
static int
print_screen (int ok)
{
if (output_points
&& (verbose > 1
|| (verbose == 1 && ok == 0)))
return 1;
return 0;
}
/* Should the message print to screen? This depends on the verbose flag,
and the test status. */
static int
print_screen_max_error (int ok)
{
if (output_max_error
&& (verbose > 1
|| ((verbose == 1) && (ok == 0))))
return 1;
return 0;
}
/* Update statistic counters. */
static void
update_stats (int ok)
{
++noTests;
if (!ok)
++noErrors;
}
static void
print_function_ulps (const char *function_name, FLOAT ulp)
{
if (output_ulps)
{
fprintf (ulps_file, "Function: \"%s\":\n", function_name);
fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
CHOOSE("ldouble", "double", "float",
"ildouble", "idouble", "ifloat"),
FUNC(ceil) (ulp));
}
}
static void
print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
FLOAT imag_ulp)
{
if (output_ulps)
{
if (real_ulp != 0.0)
{
fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
CHOOSE("ldouble", "double", "float",
"ildouble", "idouble", "ifloat"),
FUNC(ceil) (real_ulp));
}
if (imag_ulp != 0.0)
{
fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
CHOOSE("ldouble", "double", "float",
"ildouble", "idouble", "ifloat"),
FUNC(ceil) (imag_ulp));
}
Update. 1999-10-24 Ulrich Drepper <drepper@cygnus.com> * math/libm-test.inc: Disable some boundary case tests for inline function testing. * math/math.h: Pretty printing. * sysdeps/i386/fpu/e_atanh.S: Correct handling of NaN. * sysdeps/i386/fpu/e_atanhf.S: Likewise. * sysdeps/i386/fpu/e_atanhl.S: Likewise. * sysdeps/i386/fpu/e_log10.S: Likewise. * sysdeps/i386/fpu/e_log10f.S: Likewise. * sysdeps/i386/fpu/e_log10l.S: Likewise. * sysdeps/i386/fpu/s_log1p.S: Likewise. * sysdeps/i386/fpu/s_log1pf.S: Likewise. * sysdeps/i386/fpu/s_log1pl.S: Likewise. * sysdeps/i386/fpu/s_log2.S: Likewise. * sysdeps/i386/fpu/s_log2f.S: Likewise. * sysdeps/i386/fpu/s_log2l.S: Likewise. * sysdeps/i386/fpu/libm-test-ulps: New file. * sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Correct return value for x == 0. (pow): Correct case x == 0. (__sgn1l): Correct handling of -0.0. 1999-10-22 Andreas Jaeger <aj@suse.de> * math/libm-test.inc (asinh_test): Add test for NaN as input parameter. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (carg_test): Likewise. (ceil_test): Likewise. (cos_test): Likewise. (cosh_test): Likewise. (cpow_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmod_test): Likewise. (gamma_test): Likewise. (lgamma_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (nearbyint_test): Likewise. (remainder_test): Likewise. (remquo_test): Likewise. (sin_test): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sqrt_test): Likewise. (tan_test): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise.
1999-10-24 22:04:52 +00:00
}
}
/* Test if Floating-Point stack hasn't changed */
static void
fpstack_test (const char *test_name)
{
#if defined (__i386__) || defined (__x86_64__)
static int old_stack;
int sw;
asm ("fnstsw" : "=a" (sw));
sw >>= 11;
sw &= 7;
if (sw != old_stack)
{
printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
test_name, sw, old_stack);
++noErrors;
old_stack = sw;
}
#endif
}
static void
print_max_error (const char *func_name)
{
int ok = 0;
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
if (max_error == 0.0 || (max_error <= prev_max_error && !ignore_max_ulp))
{
ok = 1;
}
if (!ok)
print_function_ulps (func_name, max_error);
if (print_screen_max_error (ok))
{
printf ("Maximal error of `%s'\n", func_name);
printf (" is : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
FUNC(ceil) (prev_max_error));
}
update_stats (ok);
}
static void
print_complex_max_error (const char *func_name)
{
int real_ok = 0, imag_ok = 0, ok;
if (real_max_error == 0
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
|| (real_max_error <= prev_real_max_error && !ignore_max_ulp))
{
real_ok = 1;
}
if (imag_max_error == 0
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
|| (imag_max_error <= prev_imag_max_error && !ignore_max_ulp))
{
imag_ok = 1;
}
ok = real_ok && imag_ok;
if (!ok)
print_complex_function_ulps (func_name,
real_ok ? 0 : real_max_error,
imag_ok ? 0 : imag_max_error);
if (print_screen_max_error (ok))
{
printf ("Maximal error of real part of: %s\n", func_name);
printf (" is : %.0" PRINTF_NEXPR " ulp\n",
FUNC(ceil) (real_max_error));
printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
FUNC(ceil) (prev_real_max_error));
printf ("Maximal error of imaginary part of: %s\n", func_name);
printf (" is : %.0" PRINTF_NEXPR " ulp\n",
FUNC(ceil) (imag_max_error));
printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
FUNC(ceil) (prev_imag_max_error));
}
update_stats (ok);
}
#if FE_ALL_EXCEPT
/* Test whether a given exception was raised. */
static void
test_single_exception (const char *test_name,
int exception,
int exc_flag,
int fe_flag,
const char *flag_name)
{
# ifndef TEST_INLINE
int ok = 1;
if (exception & exc_flag)
{
if (fetestexcept (fe_flag))
{
if (print_screen (1))
printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
}
else
{
ok = 0;
if (print_screen (0))
printf ("Failure: %s: Exception \"%s\" not set\n",
test_name, flag_name);
}
}
else
{
if (fetestexcept (fe_flag))
{
ok = 0;
if (print_screen (0))
printf ("Failure: %s: Exception \"%s\" set\n",
test_name, flag_name);
}
else
{
if (print_screen (1))
printf ("%s: Exception \"%s\" not set\n", test_name,
flag_name);
}
}
if (!ok)
++noErrors;
# endif
}
#endif
/* Test whether exceptions given by EXCEPTION are raised. Ignore thereby
allowed but not required exceptions.
*/
static void
test_exceptions (const char *test_name, int exception)
{
if (EXCEPTION_TESTS (FLOAT))
{
++noExcTests;
#ifdef FE_DIVBYZERO
if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
test_single_exception (test_name, exception,
DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
"Divide by zero");
#endif
#ifdef FE_INVALID
if ((exception & INVALID_EXCEPTION_OK) == 0)
test_single_exception (test_name, exception,
INVALID_EXCEPTION, FE_INVALID,
"Invalid operation");
#endif
#ifdef FE_OVERFLOW
if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
FE_OVERFLOW, "Overflow");
#endif
#ifdef FE_UNDERFLOW
if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
FE_UNDERFLOW, "Underflow");
#endif
#ifdef FE_INEXACT
if ((exception & (INEXACT_EXCEPTION | NO_INEXACT_EXCEPTION)) != 0)
test_single_exception (test_name, exception, INEXACT_EXCEPTION,
FE_INEXACT, "Inexact");
#endif
}
feclearexcept (FE_ALL_EXCEPT);
}
/* Test whether errno for TEST_NAME, set to ERRNO_VALUE, has value
EXPECTED_VALUE (description EXPECTED_NAME). */
static void
test_single_errno (const char *test_name, int errno_value,
int expected_value, const char *expected_name)
{
#if !defined TEST_INLINE && !TEST_MATHVEC
if (errno_value == expected_value)
{
if (print_screen (1))
printf ("Pass: %s: errno set to %d (%s)\n", test_name, errno_value,
expected_name);
}
else
{
++noErrors;
if (print_screen (0))
printf ("Failure: %s: errno set to %d, expected %d (%s)\n",
test_name, errno_value, expected_value, expected_name);
}
#endif
}
/* Test whether errno (value ERRNO_VALUE) has been for TEST_NAME set
as required by EXCEPTIONS. */
static void
test_errno (const char *test_name, int errno_value, int exceptions)
{
++noErrnoTests;
if (exceptions & ERRNO_UNCHANGED)
test_single_errno (test_name, errno_value, 0, "unchanged");
if (exceptions & ERRNO_EDOM)
test_single_errno (test_name, errno_value, EDOM, "EDOM");
if (exceptions & ERRNO_ERANGE)
test_single_errno (test_name, errno_value, ERANGE, "ERANGE");
}
/* Returns the number of ulps that GIVEN is away from EXPECTED. */
#define ULPDIFF(given, expected) \
(FUNC(fabs) ((given) - (expected)) / ulp (expected))
/* Returns the size of an ulp for VALUE. */
static FLOAT
ulp (FLOAT value)
{
FLOAT ulp;
switch (fpclassify (value))
{
case FP_ZERO:
/* We compute the distance to the next FP which is the same as the
value of the smallest subnormal number. Previously we used
2^(-MANT_DIG) which is too large a value to be useful. Note that we
can't use ilogb(0), since that isn't a valid thing to do. As a point
of comparison Java's ulp returns the next normal value e.g.
2^(1 - MAX_EXP) for ulp(0), but that is not what we want for
glibc. */
/* Fall through... */
case FP_SUBNORMAL:
/* The next closest subnormal value is a constant distance away. */
ulp = FUNC(ldexp) (1.0, MIN_EXP - MANT_DIG);
break;
case FP_NORMAL:
ulp = FUNC(ldexp) (1.0, FUNC(ilogb) (value) - MANT_DIG);
break;
default:
/* It should never happen. */
abort ();
break;
}
return ulp;
}
static void
check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
int exceptions,
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
FLOAT *curr_max_error, FLOAT max_ulp)
{
int ok = 0;
int print_diff = 0;
FLOAT diff = 0;
FLOAT ulps = 0;
int errno_value = errno;
test_exceptions (test_name, exceptions);
test_errno (test_name, errno_value, exceptions);
if (exceptions & IGNORE_RESULT)
goto out;
if (issignaling (computed) && issignaling (expected))
{
if ((exceptions & TEST_NAN_SIGN) != 0
&& signbit (computed) != signbit (expected))
{
ok = 0;
printf ("signaling NaN has wrong sign.\n");
}
else
ok = 1;
}
else if (issignaling (computed) || issignaling (expected))
ok = 0;
else if (isnan (computed) && isnan (expected))
{
if ((exceptions & TEST_NAN_SIGN) != 0
&& signbit (computed) != signbit (expected))
{
ok = 0;
printf ("quiet NaN has wrong sign.\n");
}
else
ok = 1;
}
else if (isinf (computed) && isinf (expected))
{
/* Test for sign of infinities. */
if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
&& signbit (computed) != signbit (expected))
{
ok = 0;
printf ("infinity has wrong sign.\n");
}
else
ok = 1;
}
/* Don't calculate ULPs for infinities or any kind of NaNs. */
else if (isinf (computed) || isnan (computed)
|| isinf (expected) || isnan (expected))
ok = 0;
else
{
diff = FUNC(fabs) (computed - expected);
ulps = ULPDIFF (computed, expected);
set_max_error (ulps, curr_max_error);
print_diff = 1;
if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
&& computed == 0.0 && expected == 0.0
&& signbit(computed) != signbit (expected))
ok = 0;
Automatically check sanity of ulps from libm tests. This patch makes libm-test.inc apply sanity checks to ulps values resulting from tests, or found in libm-test-ulps files, to avoid the need for manual checking/editing of new ulps for cases that are excessively large or involve functions that should not have any ulps. For IBM long double, errors must be at most 14ulp (the largest currently checked-in value), or at most 3ulp (the documented error bound for division) in the case of exactly-determined functions; for other formats, the limits are 9ulp (also the largest currently checked-in value) and 0ulp. Limits from ulps files are saturated to those bounds, and regen-ulps will ignore any errors outside those bounds. (Thus if, say, you have an architecture-specific problem with fma, the tests can still be XFAILed in auto-libm-test-in, but errors outside the permitted range can no longer be listed in libm-test-ulps.) Tested x86_64. * math/libm-test.inc (max_valid_error): New variable. (init_max_error): Take new argument specifying whether function results are exactly determined. Set max_valid_error and bound other variables for errors based on this argument. (set_max_error): Do not record results above max_valid_error. (check_float_internal): Only accept errors of up to 0.5ulps if also at most max_valid_error. (START): Take new argument EXACT and pass it to init_max_error. (acos_test): Update call to START. (acos_test_tonearest): Likewise. (acos_test_towardzero): Likewise. (acos_test_downward): Likewise. (acos_test_upward): Likewise. (acosh_test): Likewise. (asin_test): Likewise. (asin_test_tonearest): Likewise. (asin_test_towardzero): Likewise. (asin_test_downward): Likewise. (asin_test_upward): Likewise. (asinh_test): Likewise. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (cbrt_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (ceil_test): Likewise. (cexp_test): Likewise. (cimag_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cos_test): Likewise. (cos_test_tonearest): Likewise. (cos_test_towardzero): Likewise. (cos_test_downward): Likewise. (cos_test_upward): Likewise. (cosh_test): Likewise. (cosh_test_tonearest): Likewise. (cosh_test_towardzero): Likewise. (cosh_test_downward): Likewise. (cosh_test_upward): Likewise. (cpow_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctan_test_tonearest): Likewise. (ctan_test_towardzero): Likewise. (ctan_test_downward): Likewise. (ctan_test_upward): Likewise. (ctanh_test): Likewise. (ctanh_test_tonearest): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_test_downward): Likewise. (ctanh_test_upward): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp_test_tonearest): Likewise. (exp_test_towardzero): Likewise. (exp_test_downward): Likewise. (exp_test_upward): Likewise. (exp10_test): Likewise. (exp10_test_tonearest): Likewise. (exp10_test_towardzero): Likewise. (exp10_test_downward): Likewise. (exp10_test_upward): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (expm1_test_tonearest): Likewise. (expm1_test_towardzero): Likewise. (expm1_test_downward): Likewise. (expm1_test_upward): Likewise. (fabs_test): Likewise. (fdim_test): Likewise. (floor_test): Likewise. (fma_test): Likewise. (fma_test_towardzero): Likewise. (fma_test_downward): Likewise. (fma_test_upward): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (hypot_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (jn_test): Likewise. (ldexp_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (lrint_test): Likewise. (lrint_test_tonearest): Likewise. (lrint_test_towardzero): Likewise. (lrint_test_downward): Likewise. (lrint_test_upward): Likewise. (llrint_test): Likewise. (llrint_test_tonearest): Likewise. (llrint_test_towardzero): Likewise. (llrint_test_downward): Likewise. (llrint_test_upward): Likewise. (log_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (logb_test_downward): Likewise. (lround_test): Likewise. (llround_test): Likewise. (modf_test): Likewise. (nearbyint_test): Likewise. (nextafter_test): Likewise. (nexttoward_test): Likewise. (pow_test): Likewise. (pow_test_tonearest): Likewise. (pow_test_towardzero): Likewise. (pow_test_downward): Likewise. (pow_test_upward): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Likewise. (rint_test): Likewise. (rint_test_tonearest): Likewise. (rint_test_towardzero): Likewise. (rint_test_downward): Likewise. (rint_test_upward): Likewise. (round_test): Likewise. (scalb_test): Likewise. (scalbn_test): Likewise. (scalbln_test): Likewise. (signbit_test): Likewise. (sin_test): Likewise. (sin_test_tonearest): Likewise. (sin_test_towardzero): Likewise. (sin_test_downward): Likewise. (sin_test_upward): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sinh_test_tonearest): Likewise. (sinh_test_towardzero): Likewise. (sinh_test_downward): Likewise. (sinh_test_upward): Likewise. (sqrt_test): Likewise. (sqrt_test_tonearest): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_test_downward): Likewise. (sqrt_test_upward): Likewise. (tan_test): Likewise. (tan_test_tonearest): Likewise. (tan_test_towardzero): Likewise. (tan_test_downward): Likewise. (tan_test_upward): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise. (trunc_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. (yn_test): Likewise. (significand_test): Likewise.
2014-03-05 15:05:20 +00:00
else if ((ulps <= 0.5 && ulps <= max_valid_error)
|| (ulps <= max_ulp && !ignore_max_ulp))
ok = 1;
else
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
ok = 0;
}
if (print_screen (ok))
{
if (!ok)
printf ("Failure: ");
printf ("Test: %s\n", test_name);
printf ("Result:\n");
printf (" is: ");
print_float (computed);
printf (" should be: ");
print_float (expected);
if (print_diff)
{
printf (" difference: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR
"\n", diff, diff);
printf (" ulp : % .4" PRINTF_NEXPR "\n", ulps);
printf (" max.ulp : % .4" PRINTF_NEXPR "\n", max_ulp);
}
}
update_stats (ok);
out:
fpstack_test (test_name);
errno = 0;
}
static void
check_float (const char *test_name, FLOAT computed, FLOAT expected,
int exceptions)
{
check_float_internal (test_name, computed, expected,
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
exceptions, &max_error, prev_max_error);
}
static void
check_complex (const char *test_name, __complex__ FLOAT computed,
__complex__ FLOAT expected,
int exception)
{
FLOAT part_comp, part_exp;
char *str;
if (asprintf (&str, "Real part of: %s", test_name) == -1)
abort ();
part_comp = __real__ computed;
part_exp = __real__ expected;
Update. 1999-10-24 Ulrich Drepper <drepper@cygnus.com> * math/libm-test.inc: Disable some boundary case tests for inline function testing. * math/math.h: Pretty printing. * sysdeps/i386/fpu/e_atanh.S: Correct handling of NaN. * sysdeps/i386/fpu/e_atanhf.S: Likewise. * sysdeps/i386/fpu/e_atanhl.S: Likewise. * sysdeps/i386/fpu/e_log10.S: Likewise. * sysdeps/i386/fpu/e_log10f.S: Likewise. * sysdeps/i386/fpu/e_log10l.S: Likewise. * sysdeps/i386/fpu/s_log1p.S: Likewise. * sysdeps/i386/fpu/s_log1pf.S: Likewise. * sysdeps/i386/fpu/s_log1pl.S: Likewise. * sysdeps/i386/fpu/s_log2.S: Likewise. * sysdeps/i386/fpu/s_log2f.S: Likewise. * sysdeps/i386/fpu/s_log2l.S: Likewise. * sysdeps/i386/fpu/libm-test-ulps: New file. * sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Correct return value for x == 0. (pow): Correct case x == 0. (__sgn1l): Correct handling of -0.0. 1999-10-22 Andreas Jaeger <aj@suse.de> * math/libm-test.inc (asinh_test): Add test for NaN as input parameter. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (carg_test): Likewise. (ceil_test): Likewise. (cos_test): Likewise. (cosh_test): Likewise. (cpow_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmod_test): Likewise. (gamma_test): Likewise. (lgamma_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (nearbyint_test): Likewise. (remainder_test): Likewise. (remquo_test): Likewise. (sin_test): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sqrt_test): Likewise. (tan_test): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise.
1999-10-24 22:04:52 +00:00
check_float_internal (str, part_comp, part_exp,
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
exception, &real_max_error, prev_real_max_error);
free (str);
if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
abort ();
part_comp = __imag__ computed;
part_exp = __imag__ expected;
Update. 1999-10-24 Ulrich Drepper <drepper@cygnus.com> * math/libm-test.inc: Disable some boundary case tests for inline function testing. * math/math.h: Pretty printing. * sysdeps/i386/fpu/e_atanh.S: Correct handling of NaN. * sysdeps/i386/fpu/e_atanhf.S: Likewise. * sysdeps/i386/fpu/e_atanhl.S: Likewise. * sysdeps/i386/fpu/e_log10.S: Likewise. * sysdeps/i386/fpu/e_log10f.S: Likewise. * sysdeps/i386/fpu/e_log10l.S: Likewise. * sysdeps/i386/fpu/s_log1p.S: Likewise. * sysdeps/i386/fpu/s_log1pf.S: Likewise. * sysdeps/i386/fpu/s_log1pl.S: Likewise. * sysdeps/i386/fpu/s_log2.S: Likewise. * sysdeps/i386/fpu/s_log2f.S: Likewise. * sysdeps/i386/fpu/s_log2l.S: Likewise. * sysdeps/i386/fpu/libm-test-ulps: New file. * sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Correct return value for x == 0. (pow): Correct case x == 0. (__sgn1l): Correct handling of -0.0. 1999-10-22 Andreas Jaeger <aj@suse.de> * math/libm-test.inc (asinh_test): Add test for NaN as input parameter. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (carg_test): Likewise. (ceil_test): Likewise. (cos_test): Likewise. (cosh_test): Likewise. (cpow_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmod_test): Likewise. (gamma_test): Likewise. (lgamma_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (nearbyint_test): Likewise. (remainder_test): Likewise. (remquo_test): Likewise. (sin_test): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sqrt_test): Likewise. (tan_test): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise.
1999-10-24 22:04:52 +00:00
/* Don't check again for exceptions or errno, just pass through the
other relevant flags. */
check_float_internal (str, part_comp, part_exp,
exception & (IGNORE_ZERO_INF_SIGN
| TEST_NAN_SIGN
| IGNORE_RESULT),
Don't include individual test ulps in libm-test-ulps. As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
2014-03-05 15:02:38 +00:00
&imag_max_error, prev_imag_max_error);
free (str);
}
/* Check that computed and expected values are equal (int values). */
static void
check_int (const char *test_name, int computed, int expected,
int exceptions)
{
int ok = 0;
int errno_value = errno;
test_exceptions (test_name, exceptions);
test_errno (test_name, errno_value, exceptions);
if (exceptions & IGNORE_RESULT)
goto out;
noTests++;
if (computed == expected)
ok = 1;
if (print_screen (ok))
{
if (!ok)
printf ("Failure: ");
printf ("Test: %s\n", test_name);
printf ("Result:\n");
printf (" is: %d\n", computed);
printf (" should be: %d\n", expected);
}
update_stats (ok);
out:
fpstack_test (test_name);
errno = 0;
}
/* Check that computed and expected values are equal (long int values). */
static void
check_long (const char *test_name, long int computed, long int expected,
int exceptions)
{
int ok = 0;
int errno_value = errno;
test_exceptions (test_name, exceptions);
test_errno (test_name, errno_value, exceptions);
if (exceptions & IGNORE_RESULT)
goto out;
noTests++;
if (computed == expected)
ok = 1;
if (print_screen (ok))
{
if (!ok)
printf ("Failure: ");
printf ("Test: %s\n", test_name);
printf ("Result:\n");
printf (" is: %ld\n", computed);
printf (" should be: %ld\n", expected);
}
update_stats (ok);
out:
fpstack_test (test_name);
errno = 0;
}
/* Check that computed value is true/false. */
static void
check_bool (const char *test_name, int computed, int expected,
int exceptions)
{
int ok = 0;
int errno_value = errno;
test_exceptions (test_name, exceptions);
test_errno (test_name, errno_value, exceptions);
if (exceptions & IGNORE_RESULT)
goto out;
noTests++;
if ((computed == 0) == (expected == 0))
ok = 1;
if (print_screen (ok))
{
if (!ok)
printf ("Failure: ");
printf ("Test: %s\n", test_name);
printf ("Result:\n");
printf (" is: %d\n", computed);
printf (" should be: %d\n", expected);
}
update_stats (ok);
out:
fpstack_test (test_name);
errno = 0;
}
/* check that computed and expected values are equal (long int values) */
static void
check_longlong (const char *test_name, long long int computed,
long long int expected,
int exceptions)
{
int ok = 0;
int errno_value = errno;
test_exceptions (test_name, exceptions);
test_errno (test_name, errno_value, exceptions);
if (exceptions & IGNORE_RESULT)
goto out;
noTests++;
if (computed == expected)
ok = 1;
if (print_screen (ok))
{
if (!ok)
printf ("Failure:");
printf ("Test: %s\n", test_name);
printf ("Result:\n");
printf (" is: %lld\n", computed);
printf (" should be: %lld\n", expected);
}
update_stats (ok);
out:
fpstack_test (test_name);
errno = 0;
}
/* Return whether a test with flags EXCEPTIONS should be run. */
static int
enable_test (int exceptions)
{
if (exceptions & XFAIL_TEST)
return 0;
#ifdef TEST_INLINE
if (exceptions & NO_TEST_INLINE)
return 0;
#endif
return 1;
}
/* Structures for each kind of test. */
struct test_f_f_data
{
const char *arg_str;
FLOAT arg;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_ff_f_data
{
const char *arg_str;
FLOAT arg1, arg2;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_ff_f_data_nexttoward
{
const char *arg_str;
FLOAT arg1;
long double arg2;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_fi_f_data
{
const char *arg_str;
FLOAT arg1;
int arg2;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_fl_f_data
{
const char *arg_str;
FLOAT arg1;
long int arg2;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_if_f_data
{
const char *arg_str;
int arg1;
FLOAT arg2;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_fff_f_data
{
const char *arg_str;
FLOAT arg1, arg2, arg3;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_c_f_data
{
const char *arg_str;
FLOAT argr, argc;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
} rd, rn, rz, ru;
};
/* Used for both RUN_TEST_LOOP_f_f1 and RUN_TEST_LOOP_fI_f1. */
struct test_f_f1_data
{
const char *arg_str;
FLOAT arg;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
int extra_test;
int extra_expected;
} rd, rn, rz, ru;
};
struct test_fF_f1_data
{
const char *arg_str;
FLOAT arg;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
int extra_test;
FLOAT extra_expected;
} rd, rn, rz, ru;
};
struct test_ffI_f1_data
{
const char *arg_str;
FLOAT arg1, arg2;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expected;
int exceptions;
int extra_test;
int extra_expected;
} rd, rn, rz, ru;
};
struct test_c_c_data
{
const char *arg_str;
FLOAT argr, argc;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expr, expc;
int exceptions;
} rd, rn, rz, ru;
};
struct test_cc_c_data
{
const char *arg_str;
FLOAT arg1r, arg1c, arg2r, arg2c;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
FLOAT expr, expc;
int exceptions;
} rd, rn, rz, ru;
};
/* Used for all of RUN_TEST_LOOP_f_i, RUN_TEST_LOOP_f_i_tg,
RUN_TEST_LOOP_f_b and RUN_TEST_LOOP_f_b_tg. */
struct test_f_i_data
{
const char *arg_str;
FLOAT arg;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
int expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_ff_i_data
{
const char *arg_str;
FLOAT arg1, arg2;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
int expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_f_l_data
{
const char *arg_str;
FLOAT arg;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
long int expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_f_L_data
{
const char *arg_str;
FLOAT arg;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
long long int expected;
int exceptions;
} rd, rn, rz, ru;
};
struct test_fFF_11_data
{
const char *arg_str;
FLOAT arg;
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
struct
{
int exceptions;
int extra1_test;
FLOAT extra1_expected;
int extra2_test;
FLOAT extra2_expected;
} rd, rn, rz, ru;
};
/* Set the rounding mode, or restore the saved value. */
#define IF_ROUND_INIT_ /* Empty. */
#define IF_ROUND_INIT_FE_DOWNWARD \
int save_round_mode = fegetround (); \
if (ROUNDING_TESTS (FLOAT, FE_DOWNWARD) \
&& fesetround (FE_DOWNWARD) == 0)
#define IF_ROUND_INIT_FE_TONEAREST \
int save_round_mode = fegetround (); \
if (ROUNDING_TESTS (FLOAT, FE_TONEAREST) \
&& fesetround (FE_TONEAREST) == 0)
#define IF_ROUND_INIT_FE_TOWARDZERO \
int save_round_mode = fegetround (); \
if (ROUNDING_TESTS (FLOAT, FE_TOWARDZERO) \
&& fesetround (FE_TOWARDZERO) == 0)
#define IF_ROUND_INIT_FE_UPWARD \
int save_round_mode = fegetround (); \
if (ROUNDING_TESTS (FLOAT, FE_UPWARD) \
&& fesetround (FE_UPWARD) == 0)
#define ROUND_RESTORE_ /* Empty. */
#define ROUND_RESTORE_FE_DOWNWARD \
fesetround (save_round_mode)
#define ROUND_RESTORE_FE_TONEAREST \
fesetround (save_round_mode)
#define ROUND_RESTORE_FE_TOWARDZERO \
fesetround (save_round_mode)
#define ROUND_RESTORE_FE_UPWARD \
fesetround (save_round_mode)
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
/* Field name to use for a given rounding mode. */
#define RM_ rn
#define RM_FE_DOWNWARD rd
#define RM_FE_TONEAREST rn
#define RM_FE_TOWARDZERO rz
#define RM_FE_UPWARD ru
/* Common setup for an individual test. */
#define COMMON_TEST_SETUP(ARG_STR) \
char *test_name; \
if (asprintf (&test_name, "%s (%s)", this_func, (ARG_STR)) == -1) \
abort ()
/* Setup for a test with an extra output. */
#define EXTRA_OUTPUT_TEST_SETUP(ARG_STR, N) \
char *extra##N##_name; \
if (asprintf (&extra##N##_name, "%s (%s) extra output " #N, \
this_func, (ARG_STR)) == -1) \
abort ()
/* Common cleanup after an individual test. */
#define COMMON_TEST_CLEANUP \
free (test_name)
/* Cleanup for a test with an extra output. */
#define EXTRA_OUTPUT_TEST_CLEANUP(N) \
free (extra##N##_name)
/* Run an individual test, including any required setup and checking
of results, or loop over all tests in an array. */
#define RUN_TEST_f_f(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC_TEST (FUNC_NAME) (ARG), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_f ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_2_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC_TEST (FUNC_NAME) (ARG1, ARG2), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_2_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_2_f ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg1, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].arg2, \
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_ff_f RUN_TEST_2_f
#define RUN_TEST_LOOP_ff_f RUN_TEST_LOOP_2_f
#define RUN_TEST_fi_f RUN_TEST_2_f
#define RUN_TEST_LOOP_fi_f RUN_TEST_LOOP_2_f
#define RUN_TEST_fl_f RUN_TEST_2_f
#define RUN_TEST_LOOP_fl_f RUN_TEST_LOOP_2_f
#define RUN_TEST_if_f RUN_TEST_2_f
#define RUN_TEST_LOOP_if_f RUN_TEST_LOOP_2_f
#define RUN_TEST_fff_f(ARG_STR, FUNC_NAME, ARG1, ARG2, ARG3, \
EXPECTED, EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC_TEST (FUNC_NAME) (ARG1, ARG2, ARG3), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fff_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_fff_f ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg1, \
(ARRAY)[i].arg2, (ARRAY)[i].arg3, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_c_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, \
FUNC_TEST (FUNC_NAME) (BUILD_COMPLEX (ARG1, ARG2)),\
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_c_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_c_f ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].argr, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].argc, \
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_f1(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC_TEST (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_f1 ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions, \
EXTRA_VAR, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_test, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_expected); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_fF_f1(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC_TEST (FUNC_NAME) (ARG, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_float (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fF_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_fF_f1 ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions, \
EXTRA_VAR, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_test, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_expected); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_fI_f1(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC_TEST (FUNC_NAME) (ARG, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fI_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_fI_f1 ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions, \
EXTRA_VAR, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_test, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_expected); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_ffI_f1_mod8(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, \
FUNC_TEST (FUNC_NAME) (ARG1, ARG2, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, (EXTRA_VAR) % 8, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_ffI_f1_mod8(FUNC_NAME, ARRAY, ROUNDING_MODE, \
EXTRA_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_ffI_f1_mod8 ((ARRAY)[i].arg_str, FUNC_NAME, \
(ARRAY)[i].arg1, (ARRAY)[i].arg2, \
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions, \
EXTRA_VAR, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_test, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra_expected); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_c_c(ARG_STR, FUNC_NAME, ARGR, ARGC, EXPR, EXPC, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_complex (test_name, \
FUNC_TEST (FUNC_NAME) (BUILD_COMPLEX (ARGR, ARGC)), \
BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_c_c(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_c_c ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].argr, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].argc, \
(ARRAY)[i].RM_##ROUNDING_MODE.expr, \
(ARRAY)[i].RM_##ROUNDING_MODE.expc, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_cc_c(ARG_STR, FUNC_NAME, ARG1R, ARG1C, ARG2R, ARG2C, \
EXPR, EXPC, EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_complex (test_name, \
FUNC_TEST (FUNC_NAME) (BUILD_COMPLEX (ARG1R, ARG1C), \
BUILD_COMPLEX (ARG2R, ARG2C)), \
BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_cc_c(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_cc_c ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg1r, \
(ARRAY)[i].arg1c, (ARRAY)[i].arg2r, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].arg2c, \
(ARRAY)[i].RM_##ROUNDING_MODE.expr, \
(ARRAY)[i].RM_##ROUNDING_MODE.expc, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_i(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC_TEST (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_i(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_i ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_i_tg(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_i_tg(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_i_tg ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_ff_i_tg(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC_NAME (ARG1, ARG2), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_ff_i_tg(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
RUN_TEST_ff_i_tg ((ARRAY)[i].arg_str, FUNC_NAME, \
(ARRAY)[i].arg1, (ARRAY)[i].arg2, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_b(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_bool (test_name, FUNC_TEST (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_b(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_b ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_b_tg(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_bool (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_b_tg(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_b_tg ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_l(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_long (test_name, FUNC_TEST (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_l(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_l ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_L(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_longlong (test_name, FUNC_TEST (FUNC_NAME) (ARG), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_L(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_f_L ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.expected, \
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_fFF_11(ARG_STR, FUNC_NAME, ARG, EXCEPTIONS, \
EXTRA1_VAR, EXTRA1_TEST, \
EXTRA1_EXPECTED, EXTRA2_VAR, \
EXTRA2_TEST, EXTRA2_EXPECTED) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
FUNC_TEST (FUNC_NAME) (ARG, &(EXTRA1_VAR), &(EXTRA2_VAR)); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA1_TEST) \
check_float (extra1_name, EXTRA1_VAR, EXTRA1_EXPECTED, \
EXCEPTIONS); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 2); \
if (EXTRA2_TEST) \
check_float (extra2_name, EXTRA2_VAR, EXTRA2_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (2); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fFF_11(FUNC_NAME, ARRAY, ROUNDING_MODE, \
EXTRA1_VAR, EXTRA2_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
for (size_t i = 0; i < sizeof (ARRAY) / sizeof (ARRAY)[0]; i++) \
RUN_TEST_fFF_11 ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.exceptions, \
EXTRA1_VAR, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra1_test, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra1_expected, \
EXTRA2_VAR, \
Prepare libm-test.inc structures for multi-rounding-mode testing. At present, libm-test.inc tests are run in multiple rounding modes by having a separate array for each rounding mode (which might or might not have the same test inputs as the other such arrays), a separate function calling a RUN_TEST_LOOP_* macro over that array, and a separate call to that function in main. The number of functions tested in multiple rounding modes has gradually increased as rounding-mode-specific bugs have been found and fixed in different functions. It would be better to be able to use a single macro call, in a single function, to run tests for a function over all rounding modes, with this being done for all libm functions except in cases where it's deferred until some bugs can be fixed because XFAILing all affected tests would be painful (that's why the full set of pow tests isn't currently run in all rounding modes). This patch helps prepare for that by making the structures storing expected results for tests store results for all four rounding modes. After this patch, the results for all modes are just duplicates, but tests access the appropriate field in the structure, so helping to pave the way for when the fields stop being duplicates and multiple rounding modes can be tested from a single array. Tests might in future specify a single set of results, to be used in all rounding modes; separate results for each rounding mode, specified manually; or use of auto-libm-tests-* to generate results for each rounding mode. Tested x86_64. * math/libm-test.inc (struct test_f_f_data): Move expected results into structure for each rounding mode. (struct test_ff_f_data): Likewise. (struct test_ff_f_data_nexttoward): Likewise. (struct test_fi_f_data): Likewise. (struct test_fl_f_data): Likewise. (struct test_if_f_data): Likewise. (struct test_fff_f_data): Likewise. (struct test_c_f_data): Likewise. (struct test_f_f1_data): Likewise. (struct test_fF_f1_data): Likewise. (struct test_ffI_f1_data): Likewise. (struct test_c_c_data): Likewise. (struct test_cc_c_data): Likewise. (struct test_f_i_data): Likewise. (struct test_ff_i_data): Likewise. (struct test_f_l_data): Likewise. (struct test_f_L_data): Likewise. (struct test_fFF_11_data): Likewise. (RM_): New macro. (RM_FE_DOWNWARD): Likewise. (RM_FE_TONEAREST): Likewise. (RM_FE_TOWARDZERO): Likewise. (RM_FE_UPWARD): Likewise. (RUN_TEST_LOOP_f_f): Update references to expected results. (RUN_TEST_LOOP_2_f): Likewise. (RUN_TEST_LOOP_fff_f): Likewise. (RUN_TEST_LOOP_c_f): Likewise. (RUN_TEST_LOOP_f_f1): Likewise. (RUN_TEST_LOOP_fF_f1): Likewise. (RUN_TEST_LOOP_fI_f1): Likewise. (RUN_TEST_LOOP_ffI_f1): Likewise. (RUN_TEST_LOOP_c_c): Likewise. (RUN_TEST_LOOP_cc_c): Likewise. (RUN_TEST_LOOP_f_i): Likewise. (RUN_TEST_LOOP_f_i_tg): Likewise. (RUN_TEST_LOOP_ff_i_tg): Likewise. (RUN_TEST_LOOP_f_b): Likewise. (RUN_TEST_LOOP_f_b_tg): Likewise. (RUN_TEST_LOOP_f_l): Likewise. (RUN_TEST_LOOP_f_L): Likewise. (RUN_TEST_LOOP_fFF_11): Likewise. * math/gen-libm-test.pl (parse_args): Output four copies of expected results for each test.
2014-03-06 14:15:00 +00:00
(ARRAY)[i].RM_##ROUNDING_MODE.extra2_test, \
(ARRAY)[i].RM_##ROUNDING_MODE.extra2_expected); \
ROUND_RESTORE_ ## ROUNDING_MODE
#if !TEST_MATHVEC
# define VEC_SUFF
#endif
#define STR_CONCAT(a, b, c) __STRING (a##b##c)
#define STR_CON3(a, b, c) STR_CONCAT (a, b, c)
/* This generated header defines series of macros started with HAVE_VECTOR_. */
#include "libm-have-vector-test.h"
#define HAVE_VECTOR(func) __CONCAT (HAVE_VECTOR_, func)
/* Start and end the tests for a given function. */
#define START(FUN, SUFF, EXACT) \
CHECK_ARCH_EXT; \
if (TEST_MATHVEC && !HAVE_VECTOR (FUNC (FUN))) return; \
const char *this_func = STR_CON3 (FUN, SUFF, VEC_SUFF); \
Automatically check sanity of ulps from libm tests. This patch makes libm-test.inc apply sanity checks to ulps values resulting from tests, or found in libm-test-ulps files, to avoid the need for manual checking/editing of new ulps for cases that are excessively large or involve functions that should not have any ulps. For IBM long double, errors must be at most 14ulp (the largest currently checked-in value), or at most 3ulp (the documented error bound for division) in the case of exactly-determined functions; for other formats, the limits are 9ulp (also the largest currently checked-in value) and 0ulp. Limits from ulps files are saturated to those bounds, and regen-ulps will ignore any errors outside those bounds. (Thus if, say, you have an architecture-specific problem with fma, the tests can still be XFAILed in auto-libm-test-in, but errors outside the permitted range can no longer be listed in libm-test-ulps.) Tested x86_64. * math/libm-test.inc (max_valid_error): New variable. (init_max_error): Take new argument specifying whether function results are exactly determined. Set max_valid_error and bound other variables for errors based on this argument. (set_max_error): Do not record results above max_valid_error. (check_float_internal): Only accept errors of up to 0.5ulps if also at most max_valid_error. (START): Take new argument EXACT and pass it to init_max_error. (acos_test): Update call to START. (acos_test_tonearest): Likewise. (acos_test_towardzero): Likewise. (acos_test_downward): Likewise. (acos_test_upward): Likewise. (acosh_test): Likewise. (asin_test): Likewise. (asin_test_tonearest): Likewise. (asin_test_towardzero): Likewise. (asin_test_downward): Likewise. (asin_test_upward): Likewise. (asinh_test): Likewise. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (cbrt_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (ceil_test): Likewise. (cexp_test): Likewise. (cimag_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cos_test): Likewise. (cos_test_tonearest): Likewise. (cos_test_towardzero): Likewise. (cos_test_downward): Likewise. (cos_test_upward): Likewise. (cosh_test): Likewise. (cosh_test_tonearest): Likewise. (cosh_test_towardzero): Likewise. (cosh_test_downward): Likewise. (cosh_test_upward): Likewise. (cpow_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctan_test_tonearest): Likewise. (ctan_test_towardzero): Likewise. (ctan_test_downward): Likewise. (ctan_test_upward): Likewise. (ctanh_test): Likewise. (ctanh_test_tonearest): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_test_downward): Likewise. (ctanh_test_upward): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp_test_tonearest): Likewise. (exp_test_towardzero): Likewise. (exp_test_downward): Likewise. (exp_test_upward): Likewise. (exp10_test): Likewise. (exp10_test_tonearest): Likewise. (exp10_test_towardzero): Likewise. (exp10_test_downward): Likewise. (exp10_test_upward): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (expm1_test_tonearest): Likewise. (expm1_test_towardzero): Likewise. (expm1_test_downward): Likewise. (expm1_test_upward): Likewise. (fabs_test): Likewise. (fdim_test): Likewise. (floor_test): Likewise. (fma_test): Likewise. (fma_test_towardzero): Likewise. (fma_test_downward): Likewise. (fma_test_upward): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (hypot_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (jn_test): Likewise. (ldexp_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (lrint_test): Likewise. (lrint_test_tonearest): Likewise. (lrint_test_towardzero): Likewise. (lrint_test_downward): Likewise. (lrint_test_upward): Likewise. (llrint_test): Likewise. (llrint_test_tonearest): Likewise. (llrint_test_towardzero): Likewise. (llrint_test_downward): Likewise. (llrint_test_upward): Likewise. (log_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (logb_test_downward): Likewise. (lround_test): Likewise. (llround_test): Likewise. (modf_test): Likewise. (nearbyint_test): Likewise. (nextafter_test): Likewise. (nexttoward_test): Likewise. (pow_test): Likewise. (pow_test_tonearest): Likewise. (pow_test_towardzero): Likewise. (pow_test_downward): Likewise. (pow_test_upward): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Likewise. (rint_test): Likewise. (rint_test_tonearest): Likewise. (rint_test_towardzero): Likewise. (rint_test_downward): Likewise. (rint_test_upward): Likewise. (round_test): Likewise. (scalb_test): Likewise. (scalbn_test): Likewise. (scalbln_test): Likewise. (signbit_test): Likewise. (sin_test): Likewise. (sin_test_tonearest): Likewise. (sin_test_towardzero): Likewise. (sin_test_downward): Likewise. (sin_test_upward): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sinh_test_tonearest): Likewise. (sinh_test_towardzero): Likewise. (sinh_test_downward): Likewise. (sinh_test_upward): Likewise. (sqrt_test): Likewise. (sqrt_test_tonearest): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_test_downward): Likewise. (sqrt_test_upward): Likewise. (tan_test): Likewise. (tan_test_tonearest): Likewise. (tan_test_towardzero): Likewise. (tan_test_downward): Likewise. (tan_test_upward): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise. (trunc_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. (yn_test): Likewise. (significand_test): Likewise.
2014-03-05 15:05:20 +00:00
init_max_error (this_func, EXACT)
#define END \
print_max_error (this_func)
#define END_COMPLEX \
print_complex_max_error (this_func)
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
/* Run tests for a given function in all rounding modes. */
#define ALL_RM_TEST(FUNC, EXACT, ARRAY, LOOP_MACRO, END_MACRO, ...) \
do \
{ \
do \
{ \
START (FUNC,, EXACT); \
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
LOOP_MACRO (FUNC, ARRAY, , ## __VA_ARGS__); \
END_MACRO; \
} \
while (0); \
do \
{ \
START (FUNC, _downward, EXACT); \
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
LOOP_MACRO (FUNC, ARRAY, FE_DOWNWARD, ## __VA_ARGS__); \
END_MACRO; \
} \
while (0); \
do \
{ \
START (FUNC, _towardzero, EXACT); \
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
LOOP_MACRO (FUNC, ARRAY, FE_TOWARDZERO, ## __VA_ARGS__); \
END_MACRO; \
} \
while (0); \
do \
{ \
START (FUNC, _upward, EXACT); \
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
LOOP_MACRO (FUNC, ARRAY, FE_UPWARD, ## __VA_ARGS__); \
END_MACRO; \
} \
while (0); \
} \
while (0);
/* This is to prevent messages from the SVID libm emulation. */
int
matherr (struct exception *x __attribute__ ((unused)))
{
return 1;
}
/****************************************************************************
Tests for single functions of libm.
Please keep them alphabetically sorted!
****************************************************************************/
static const struct test_f_f_data acos_test_data[] =
{
TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acos, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* |x| > 1: */
TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (acos),
};
static void
acos_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (acos, 0, acos_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data acosh_test_data[] =
{
TEST_f_f (acosh, plus_infty, plus_infty),
TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* x < 1: */
TEST_f_f (acosh, 0.75L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, -min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (acosh),
};
static void
acosh_test (void)
{
ALL_RM_TEST (acosh, 0, acosh_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data asin_test_data[] =
{
TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (asin, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* asin x == qNaN plus invalid exception for |x| > 1. */
TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (asin),
};
static void
asin_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (asin, 0, asin_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data asinh_test_data[] =
{
TEST_f_f (asinh, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (asinh, minus_infty, minus_infty, NO_TEST_INLINE),
TEST_f_f (asinh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (asinh),
};
static void
asinh_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (asinh, 0, asinh_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data atan_test_data[] =
{
TEST_f_f (atan, plus_infty, M_PI_2l),
TEST_f_f (atan, minus_infty, -M_PI_2l),
TEST_f_f (atan, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (atan),
};
static void
atan_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (atan, 0, atan_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data atanh_test_data[] =
{
TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (atanh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* atanh (x) == qNaN plus invalid exception if |x| > 1. */
TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM|NO_TEST_INLINE),
TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM|NO_TEST_INLINE),
TEST_f_f (atanh, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (atanh, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (atanh),
};
static void
atanh_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (atanh, 0, atanh_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_ff_f_data atan2_test_data[] =
{
/* atan2 (y,inf) == +0 for finite y > 0. */
TEST_ff_f (atan2, 1, plus_infty, 0),
/* atan2 (y,inf) == -0 for finite y < 0. */
TEST_ff_f (atan2, -1, plus_infty, minus_zero),
/* atan2(+inf, x) == pi/2 for finite x. */
TEST_ff_f (atan2, plus_infty, -1, M_PI_2l),
/* atan2(-inf, x) == -pi/2 for finite x. */
TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l),
/* atan2 (y,-inf) == +pi for finite y > 0. */
TEST_ff_f (atan2, 1, minus_infty, M_PIl),
/* atan2 (y,-inf) == -pi for finite y < 0. */
TEST_ff_f (atan2, -1, minus_infty, -M_PIl),
TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l),
TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l),
TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l),
TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l),
TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_ff_f (atan2),
};
Update. 2003-11-28 Ulrich Drepper <drepper@redhat.com> * sysdeps/x86_64/fpu/libm-test-ulps: Add some more minor changes to compensate other setup. 2003-11-27 Andreas Jaeger <aj@suse.de> * sysdeps/x86_64/fpu/libm-test-ulps: Add ulps for new atan2 test. * math/libm-test.inc (atan2_test): Add test that run infinitly. Reported by "Willus" <etc231etc231@willus.com>. 2003-11-27 Michael Matz <matz@suse.de> * sysdeps/ieee754/dbl-64/mpsqrt.c (fastiroot): Fix 64-bit problem with wrong types. 2003-11-28 Jakub Jelinek <jakub@redhat.com> * posix/regexec.c (acquire_init_state_context): Make inline. Add always_inline attribute. (check_matching): Add BE macro. Move if (cur_state->has_backref) into if (dfa->nbackref). (sift_states_backward): Fix comment. (transit_state): Add BE macro. Move if (next_state->has_backref) into if (dfa->nbackref && next_state). Don't check for next_state != NULL twice. * posix/regcomp.c (peek_token): Use opr.ctx_type instead of opr.idx for ANCHOR. (parse_expression): Only call init_word_char if word context will be needed. * posix/bug-regex11.c (tests): Add new tests. * posix/tst-regex.c: Include getopt.h. (timing): New variable. (main): Set timing to 1 if --timing argument is present. Add 2 new tests. (run_test, run_test_backwards): Handle timing. 2003-11-27 Jakub Jelinek <jakub@redhat.com> * posix/regex_internal.h (re_string_t): Remove mbs_case field. Add offsets, valid_raw_len, raw_len, raw_stop, mbs_allocated and offsets_needed fields. Change icase, is_utf8 and map_notascii type from int bitfield to unsigned char. (MBS_ALLOCATED, MBS_CASE_ALLOCATED): Remove. (build_wcs_upper_buffer): Change prototype to return int. (re_string_peek_byte_case, re_string_fetch_byte_case): Remove defines, add prototypes. * posix/regex_internal.c (re_string_allocate): Don't initialize stop here. Don't initialize mbs_case. Set valid_raw_len. Use mbs_allocated instead of MBS_* macros. (re_string_construct): Don't initialize stop and valid_len here. Don't initialize mbs_case. Use mbs_allocated instead of MBS_* macros. Reallocate buffers if build_wcs_upper_buffer converted too few bytes. Set valid_len to bufs_len only for single byte no translation and set in that case valid_raw_len as well. (re_string_realloc_buffers): Reallocate offsets if not NULL. Use mbs_allocated instead of MBS_ALLOCATED. Don't reallocate mbs_case. (re_string_construct_common): Initialize raw_len, mbs_allocated, stop and raw_stop. (build_wcs_buffer): Apply pstr->trans before mbrtowc instead of after it. Set valid_raw_len. Don't set mbs_case. (build_wcs_upper_buffer): Return REG_NOERROR or REG_ESPACE. Only use the fast path if !pstr->offsets_needed. Apply pstr->trans before mbrtowc instead of after it. If upper case character uses different number of bytes than lower case, goto to the slow path. Don't call towupper unnecessarily twice. Set valid_raw_len as well. Handle in the slow path the case if lower and upper case use different number of characters. Don't set mbs_case. (re_string_skip_chars): Use valid_raw_len instead of valid_len. (build_upper_buffer): Don't set mbs_case. Add BE macro. Set valid_raw_len. (re_string_translate_buffer): Set mbs instead of mbs_case. Set valid_raw_len. (re_string_reconstruct): Use raw_len/raw_stop to initialize len/stop. Clear valid_raw_len and offsets_needed when clearing valid_len. Use mbs_allocated instead of MBS_* macros. Check original offset against valid_raw_len instead of valid_len. Remove mbs_case handling. Adjust valid_raw_len together with valid_len. If is_utf8 and looking for tip context, apply pstr->trans first. If buffers start with partial multi-byte character, initialize mbs array as well if mbs_allocated. Check return value of build_wcs_upper_buffer. (re_string_peek_byte_case): New function. (re_string_fetch_byte_case): New function. (re_string_destruct): Use mbs_allocated instead of MBS_ALLOCATED. Don't free mbs_case. Free offsets. * posix/regcomp.c (init_dfa): Only check if charset name is UTF-8 if mb_cur_max == 6. * posix/regexec.c (re_search_internal): Initialize input.raw_stop as well. Use valid_raw_len instead of valid_len when looking through fastmap. Adjust registers through input.offsets. (extend_buffers): Allow build_wcs_upper_buffer to fail. * posix/bug-regex18.c (tests): Enable #ifdefed out tests. Add new tests.
2003-11-29 06:13:09 +00:00
static void
atan2_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (atan2, 0, atan2_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_c_f_data cabs_test_data[] =
{
/* cabs (x + iy) is specified as hypot (x,y) */
/* cabs (+inf + i x) == +inf. */
TEST_c_f (cabs, plus_infty, 1.0, plus_infty),
/* cabs (-inf + i x) == +inf. */
TEST_c_f (cabs, minus_infty, 1.0, plus_infty),
TEST_c_f (cabs, minus_infty, qnan_value, plus_infty),
TEST_c_f (cabs, minus_infty, qnan_value, plus_infty),
TEST_c_f (cabs, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_f (cabs),
};
static void
cabs_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (cabs, 0, cabs_test_data, RUN_TEST_LOOP_c_f, END);
}
static const struct test_c_c_data cacos_test_data[] =
{
TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero),
TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero),
TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0),
TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0),
TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty),
TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty),
TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty),
TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty),
TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty),
TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty),
TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty),
TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty),
TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty),
TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty),
TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty),
TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty),
TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty),
TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty),
TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty),
TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty),
TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty),
TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty),
TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN),
TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN),
TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value),
TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value),
TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty),
TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty),
TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value),
TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L),
TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L),
TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L),
TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L),
TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L),
TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L),
TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L),
TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L),
TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L),
TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L),
TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero),
TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero),
TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero),
TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero),
TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero),
TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero),
TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero),
TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero),
TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L),
TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L),
TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L),
TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L),
TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L),
TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L),
TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L),
TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L),
TEST_c_c (cacos, 1.0L, -0x1p50L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436759661753e1L),
TEST_c_c (cacos, -1.0L, -0x1p50L, 1.570796326794897507409741391764983781004L, 3.535050620855721078027883819436759661753e1L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L),
TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L),
TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L),
TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L),
TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L),
TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L),
TEST_c_c (cacos, 1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L),
TEST_c_c (cacos, -1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L),
TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L),
TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L),
TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L),
TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L),
TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L),
TEST_c_c (cacos, 1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L),
TEST_c_c (cacos, -1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L),
#endif
TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L),
#endif
TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L),
TEST_c_c (cacos, 1.5L, -0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -1.5L, -0x1.fp-129L, 3.141592653589793238462643383279502884195L, 9.624236501192068949955178268487368462704e-1L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, -0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, -0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L),
TEST_c_c (cacos, 1.5L, -0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -1.5L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, -0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, -0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L),
TEST_c_c (cacos, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L),
TEST_c_c (cacos, 1.5L, -0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -1.5L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L),
#endif
TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L),
TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L),
TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L),
TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L),
TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L),
TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-1L),
TEST_c_c (cacos, 1.0L, -0.5L, 6.748888455860063801646649673121744318756e-1L, 7.328576759736452608886724437653071523305e-1L),
TEST_c_c (cacos, -1.0L, -0.5L, 2.466703808003786858297978415967328452322L, 7.328576759736452608886724437653071523305e-1L),
TEST_c_c (cacos, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L),
TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L),
TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L),
TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L),
TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L),
TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-1L),
TEST_c_c (cacos, 1.0L, -0.25L, 4.890443302710802929202843732146540079124e-1L, 5.097911466811016354623559941115413499164e-1L),
TEST_c_c (cacos, -1.0L, -0.25L, 2.652548323318712945542359010064848876285L, 5.097911466811016354623559941115413499164e-1L),
TEST_c_c (cacos, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L),
TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L),
TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L),
TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L),
TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L),
TEST_c_c (cacos, 1.0L, -0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, 4.350501469856803800217957402220976497152e-2L),
TEST_c_c (cacos, -1.0L, -0x1.fp-10L, 3.098101355958774410750062883737683164607L, 4.350501469856803800217957402220976497152e-2L),
TEST_c_c (cacos, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L),
TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L),
TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L),
TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L),
TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L),
TEST_c_c (cacos, 1.0L, -0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, 4.247867098745151888768727039216644758847e-5L),
TEST_c_c (cacos, -1.0L, -0x1.fp-30L, 3.141550174918818561961484385371624132331L, 4.247867098745151888768727039216644758847e-5L),
TEST_c_c (cacos, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L),
TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L),
TEST_c_c (cacos, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, 1.236292038260260888664514866457202186027e-15L),
TEST_c_c (cacos, -1.0L, -0x1.fp-100L, 3.141592653589792002170605123018614219682L, 1.236292038260260888664514866457202186027e-15L),
TEST_c_c (cacos, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L),
TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L),
TEST_c_c (cacos, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, 5.335635276982233498398987585285818977933e-20L),
TEST_c_c (cacos, -1.0L, -0x1.fp-129L, 3.141592653589793238409287030509680549213L, 5.335635276982233498398987585285818977933e-20L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L),
TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L),
TEST_c_c (cacos, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L),
TEST_c_c (cacos, -1.0L, -0x1.fp-1000L, 3.141592653589793238462643383279502884197L, 4.252291453851660175550490409247739011867e-151L),
TEST_c_c (cacos, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L),
TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L),
TEST_c_c (cacos, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L),
TEST_c_c (cacos, -1.0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 7.340879205566679497036857179189356754017e-155L),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (cacos, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (cacos, -1.0L, -0x1.fp-10000L, 3.141592653589793238462643383279502884197L, 9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (cacos, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (cacos, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (cacos, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (cacos, -1.0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.023632056840860275214893047597614177639e-2467L),
#endif
TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L),
TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L),
TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L),
TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L),
TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L),
TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L),
TEST_c_c (cacos, 0x1.000002p0L, -0x1p-23L, 2.222118384408546368406374049167636760903e-4L, 5.364668491573609633134147164031476452679e-4L),
TEST_c_c (cacos, -0x1.000002p0L, -0x1p-23L, 3.141370441751352383825802745874586120521L, 5.364668491573609633134147164031476452679e-4L),
TEST_c_c (cacos, 0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L),
TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L),
TEST_c_c (cacos, 0x1.000002p0L, -0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, 4.882812451493617206486388134172712975070e-4L),
TEST_c_c (cacos, -0x1.000002p0L, -0x1.fp-129L, 3.141592653589793238462643383279502878367L, 4.882812451493617206486388134172712975070e-4L),
TEST_c_c (cacos, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, -0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, -0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L),
TEST_c_c (cacos, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L),
TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L),
TEST_c_c (cacos, 0x1.000002p0L, -0.0L, 0.0L, 4.882812451493617206486388134172712975070e-4L),
TEST_c_c (cacos, -0x1.000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.882812451493617206486388134172712975070e-4L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L),
TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L),
TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L),
TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L),
TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L),
TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L),
TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1p-52L, 9.590301705980041385828904092662391018164e-9L, 2.315303644582684770975188768022139415020e-8L),
TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1p-52L, 3.141592643999491532482601997450598791535L, 2.315303644582684770975188768022139415020e-8L),
TEST_c_c (cacos, 0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L),
TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, 2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L),
TEST_c_c (cacos, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, -0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, -0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L),
TEST_c_c (cacos, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L),
TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L),
TEST_c_c (cacos, 0x1.0000000000001p0L, -0.0L, 0.0L, 2.107342425544701550354780375182800088393e-8L),
TEST_c_c (cacos, -0x1.0000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L),
TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L),
TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L),
TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L),
TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L),
TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L),
TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1p-63L, 2.119177303101063432592523199680782317447e-10L, 5.116146586219826555037807251857670783420e-10L),
TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1p-63L, 3.141592653377875508152537040020250564229L, 5.116146586219826555037807251857670783420e-10L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L),
TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L),
TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, 4.656612873077392578082927418388212703712e-10L),
TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L),
# endif
TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, -0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, -0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L),
TEST_c_c (cacos, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L),
TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L),
TEST_c_c (cacos, 0x1.0000000000000002p0L, -0.0L, 0.0L, 4.656612873077392578082927418388212703712e-10L),
TEST_c_c (cacos, -0x1.0000000000000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L),
TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L),
TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1p-106L, 5.394221422390606848017034778914096659726e-17L, 2.285028863093221674154232933662774454211e-16L),
TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1p-106L, 3.141592653589793184520429159373434404027L, 2.285028863093221674154232933662774454211e-16L),
TEST_c_c (cacos, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L),
TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L),
TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, 2.220446049250313080847263336181636063482e-16L),
TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L),
TEST_c_c (cacos, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, -0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, -0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L),
TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L),
TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0.0L, 0.0L, 2.220446049250313080847263336181636063482e-16L),
TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L),
TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L),
TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 4.767863183742677481693563511435642755521e-18L, 2.019699255375255198156433710951064632386e-17L),
TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 3.141592653589793233694780199536825402504L, 2.019699255375255198156433710951064632386e-17L),
TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L),
TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L),
TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, 1.962615573354718824241727964954454332780e-17L),
TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L),
TEST_c_c (cacos, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, -0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, -0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L),
TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L),
TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0.0L, 0.0L, 1.962615573354718824241727964954454332780e-17L),
TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L),
#endif
TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L),
TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L),
TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L),
TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L),
TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L),
TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L),
TEST_c_c (cacos, 0x0.ffffffp0L, -0x1p-23L, 4.391863861910487109445187743978204002614e-4L, 2.714321200917194650737217746780928423385e-4L),
TEST_c_c (cacos, -0x0.ffffffp0L, -0x1p-23L, 3.141153467203602189751698864505105063797L, 2.714321200917194650737217746780928423385e-4L),
TEST_c_c (cacos, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L),
TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L),
TEST_c_c (cacos, 0x0.ffffffp0L, -0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, 8.245504387859737323891843603996428534945e-36L),
TEST_c_c (cacos, -0x0.ffffffp0L, -0x1.fp-129L, 3.141247386605077034875040133796864147700L, 8.245504387859737323891843603996428534945e-36L),
TEST_c_c (cacos, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, -0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, -0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L),
TEST_c_c (cacos, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L),
TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L),
TEST_c_c (cacos, 0x0.ffffffp0L, -0.0L, 3.452669847162035876032494826387364972849e-4L, 0.0L),
TEST_c_c (cacos, -0x0.ffffffp0L, -0.0L, 3.141247386605077034875040133796864147700L, 0.0L),
TEST_c_c (cacos, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L),
TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L),
TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L),
TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L),
TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L),
TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L),
TEST_c_c (cacos, 0.5L, -0x1p-23L, 1.047197551196603215914744618665204532273L, 1.376510308240943236356088341381173571841e-7L),
TEST_c_c (cacos, -0.5L, -0x1p-23L, 2.094395102393190022547898764614298351924L, 1.376510308240943236356088341381173571841e-7L),
TEST_c_c (cacos, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, 0.5L, -0x1.fp-129L, 1.047197551196597746154214461093167628066L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -0.5L, -0x1.fp-129L, 2.094395102393195492308428922186335256131L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L),
TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L),
TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L),
TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L),
TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, 0x1p-23L, -0x1.fp-129L, 1.570796207585607068449789347324000006847L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -0x1p-23L, -0x1.fp-129L, 1.570796446004186170012854035955502877351L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, -0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, -0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L),
TEST_c_c (cacos, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L),
TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L),
TEST_c_c (cacos, 0x1p-23L, -0.0L, 1.570796207585607068449789347324000006847L, 0.0L),
TEST_c_c (cacos, -0x1p-23L, -0.0L, 1.570796446004186170012854035955502877351L, 0.0L),
TEST_c_c (cacos, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L),
TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L),
TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L),
TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L),
TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L),
TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L),
TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.895456983915074112227925127005564372844e-8L, 1.171456840272878582596796205397918831268e-8L),
TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1p-52L, 3.141592634635223399311902261000251614142L, 1.171456840272878582596796205397918831268e-8L),
TEST_c_c (cacos, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.141592638688632044614986995416067458693L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, -0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, -0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L),
TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L),
TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L),
TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0.0L, 1.490116119384765638786343542550461592240e-8L, 0.0L),
TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0.0L, 3.141592638688632044614986995416067458693L, 0.0L),
#endif
TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L),
TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L),
TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L),
TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L),
TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L),
TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L),
TEST_c_c (cacos, 0.5L, -0x1p-52L, 1.047197551196597746154214461093186605110L, 2.563950248511418570403591756798643804971e-16L),
TEST_c_c (cacos, -0.5L, -0x1p-52L, 2.094395102393195492308428922186316279087L, 2.563950248511418570403591756798643804971e-16L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, 0.5L, -0x1.fp-1025L, 1.047197551196597746154214461093167628066L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0.5L, -0x1.fp-1025L, 2.094395102393195492308428922186335256131L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L),
TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L),
TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L),
TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, 0x1p-52L, -0x1.fp-1025L, 1.570796326794896397186716766608443357372L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0x1p-52L, -0x1.fp-1025L, 1.570796326794896841275926616671059526825L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, -0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, -0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L),
TEST_c_c (cacos, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L),
TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L),
TEST_c_c (cacos, 0x1p-52L, -0.0L, 1.570796326794896397186716766608443357372L, 0.0L),
TEST_c_c (cacos, -0x1p-52L, -0.0L, 1.570796326794896841275926616671059526825L, 0.0L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L),
TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L),
TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L),
TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L),
TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L),
TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1p-63L, 4.188407771167967636741951941902992986043e-10L, 2.588578361325995866221775673638805081337e-10L),
TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1p-63L, 3.141592653170952461345846619605307690007L, 2.588578361325995866221775673638805081337e-10L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L),
TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L),
TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, 2.472906068161537187835415298076415423459e-4923L),
TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.141592653260520984471283759942320330996L, 2.472906068161537187835415298076415423459e-4923L),
# endif
TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L),
TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L),
TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0.0L, 3.292722539913596233371825532007990724506e-10L, 0.0L),
TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0.0L, 3.141592653260520984471283759942320330996L, 0.0L),
#endif
TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L),
TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L),
TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L),
TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L),
TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L),
TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L),
TEST_c_c (cacos, 0.5L, -0x1p-63L, 1.047197551196597746154214461093167628070L, 1.251928832280966098829878787499365228659e-19L),
TEST_c_c (cacos, -0.5L, -0x1p-63L, 2.094395102393195492308428922186335256127L, 1.251928832280966098829878787499365228659e-19L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, 0.5L, -0x1.fp-16385L, 1.047197551196597746154214461093167628066L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0.5L, -0x1.fp-16385L, 2.094395102393195492308428922186335256131L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L),
TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L),
TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L),
TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, 0x1p-63L, -0x1.fp-16385L, 1.570796326794896619122901474391200998698L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0x1p-63L, -0x1.fp-16385L, 1.570796326794896619339741908888301885499L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, -0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, -0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L),
TEST_c_c (cacos, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L),
TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L),
TEST_c_c (cacos, 0x1p-63L, -0.0L, 1.570796326794896619122901474391200998698L, 0.0L),
TEST_c_c (cacos, -0x1p-63L, -0.0L, 1.570796326794896619339741908888301885499L, 0.0L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.997188458999618357060632049675702684031e-16L, 1.234330349600789959989661887846005659983e-16L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 3.141592653589793038743797483317667178134L, 1.234330349600789959989661887846005659983e-16L),
TEST_c_c (cacos, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.141592653589793081453397514901996944859L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570092458683775059393382371963565104164e-16L, 0.0L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 3.141592653589793081453397514901996944859L, 0.0L),
#endif
TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L),
TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L),
TEST_c_c (cacos, 0.5L, -0x1p-105L, 1.047197551196597746154214461093167628066L, 2.846556599890768890940941645338546615370e-32L),
TEST_c_c (cacos, -0.5L, -0x1p-105L, 2.094395102393195492308428922186335256131L, 2.846556599890768890940941645338546615370e-32L),
TEST_c_c (cacos, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L),
#ifndef TEST_FLOAT
TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, 0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639726790195L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacos, -0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639776094002L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, -0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, -0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (cacos, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L),
TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L),
TEST_c_c (cacos, 0x1p-105L, -0.0L, 1.570796326794896619231321691639726790195L, 0.0L),
TEST_c_c (cacos, -0x1p-105L, -0.0L, 1.570796326794896619231321691639776094002L, 0.0L),
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.765281878332676474347460257221369818872e-17L, 1.091004200533850618345330909857103457781e-17L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 3.141592653589793220809824599952738140723L, 1.091004200533850618345330909857103457781e-17L),
TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, 5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 3.141592653589793224584855575465046128902L, 5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L),
TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.387778780781445675529539585113525401762e-17L, 0.0L),
TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 3.141592653589793224584855575465046128902L, 0.0L),
#endif
TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L),
TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L),
TEST_c_c (cacos, 0.5L, -0x1p-112L, 1.047197551196597746154214461093167628066L, 2.223872343664663196047610660420739543258e-34L),
TEST_c_c (cacos, -0.5L, -0x1p-112L, 2.094395102393195492308428922186335256131L, 2.223872343664663196047610660420739543258e-34L),
TEST_c_c (cacos, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, 0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751249506L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacos, -0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751634692L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, -0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, -0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (cacos, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L),
TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L),
TEST_c_c (cacos, 0x1p-112L, -0.0L, 1.570796326794896619231321691639751249506L, 0.0L),
TEST_c_c (cacos, -0x1p-112L, -0.0L, 1.570796326794896619231321691639751634692L, 0.0L),
TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L),
TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L),
};
static void
cacos_test (void)
{
ALL_RM_TEST (cacos, 0, cacos_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data cacosh_test_data[] =
{
TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l),
TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l),
TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l),
TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l),
TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l),
TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l),
TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l),
TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l),
TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl),
TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl),
TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl),
TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl),
TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0),
TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0),
TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero),
TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value),
TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value),
TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value),
TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value),
TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value),
TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l),
TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l),
TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l),
TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l),
TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l),
TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l),
TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l),
TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l),
TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l),
TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l),
TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l),
TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l),
TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl),
TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl),
TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl),
TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl),
TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L),
TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L),
TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L),
TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L),
TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero),
TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero),
TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero),
TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero),
TEST_c_c (cacosh, 0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 8.881784197001252323389053344727730248720e-16L),
TEST_c_c (cacosh, 0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -8.881784197001252323389053344727730248720e-16L),
TEST_c_c (cacosh, -0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 3.141592653589792350284223683154270545292L),
TEST_c_c (cacosh, -0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -3.141592653589792350284223683154270545292L),
TEST_c_c (cacosh, 1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794895731052901991514519103193L),
TEST_c_c (cacosh, -1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794897507409741391764983781004L),
TEST_c_c (cacosh, 1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794895731052901991514519103193L),
TEST_c_c (cacosh, -1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794897507409741391764983781004L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L),
TEST_c_c (cacosh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L),
TEST_c_c (cacosh, -0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, -0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (cacosh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (cacosh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (cacosh, -0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, -0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L),
#endif
TEST_c_c (cacosh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (cacosh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L),
#endif
TEST_c_c (cacosh, 0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, 0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, -0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442100L),
TEST_c_c (cacosh, -0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442100L),
TEST_c_c (cacosh, 1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884195L),
TEST_c_c (cacosh, 1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884195L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L),
#endif
TEST_c_c (cacosh, 0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.221357263937683325603909865564381489366L),
TEST_c_c (cacosh, 0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.221357263937683325603909865564381489366L),
TEST_c_c (cacosh, -0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.920235389652109912858733517715121394831L),
TEST_c_c (cacosh, -0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.920235389652109912858733517715121394831L),
TEST_c_c (cacosh, 1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 6.748888455860063801646649673121744318756e-1L),
TEST_c_c (cacosh, -1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 2.466703808003786858297978415967328452322L),
TEST_c_c (cacosh, 1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -6.748888455860063801646649673121744318756e-1L),
TEST_c_c (cacosh, -1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -2.466703808003786858297978415967328452322L),
TEST_c_c (cacosh, 0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.394493894017929688812643125003661339452L),
TEST_c_c (cacosh, 0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.394493894017929688812643125003661339452L),
TEST_c_c (cacosh, -0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.747098759571863549650000258275841544745L),
TEST_c_c (cacosh, -0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.747098759571863549650000258275841544745L),
TEST_c_c (cacosh, 1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 4.890443302710802929202843732146540079124e-1L),
TEST_c_c (cacosh, -1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 2.652548323318712945542359010064848876285L),
TEST_c_c (cacosh, 1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -4.890443302710802929202843732146540079124e-1L),
TEST_c_c (cacosh, -1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -2.652548323318712945542359010064848876285L),
TEST_c_c (cacosh, 0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.569458417435338878318763342108699202986L),
TEST_c_c (cacosh, 0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.569458417435338878318763342108699202986L),
TEST_c_c (cacosh, -0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.572134236154454360143880041170803681211L),
TEST_c_c (cacosh, -0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.572134236154454360143880041170803681211L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 4.349129763101882771258049954181971959031e-2L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 3.098101355958774410750062883737683164607L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -4.349129763101882771258049954181971959031e-2L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -3.098101355958774410750062883737683164607L),
TEST_c_c (cacosh, 0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796325518966635014803151387033957091L),
TEST_c_c (cacosh, 0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796325518966635014803151387033957091L),
TEST_c_c (cacosh, -0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796328070826603447840231892468927106L),
TEST_c_c (cacosh, -0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796328070826603447840231892468927106L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 4.247867097467650115899790787875186617316e-5L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 3.141550174918818561961484385371624132331L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -4.247867097467650115899790787875186617316e-5L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -3.141550174918818561961484385371624132331L),
TEST_c_c (cacosh, 0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691638670687364L),
TEST_c_c (cacosh, 0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691638670687364L),
TEST_c_c (cacosh, -0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691640832196834L),
TEST_c_c (cacosh, -0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691640832196834L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 1.236292038260260888664514866456887257525e-15L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 3.141592653589792002170605123018614219682L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -1.236292038260260888664514866456887257525e-15L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -3.141592653589792002170605123018614219682L),
TEST_c_c (cacosh, 0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, 0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, -0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, -0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 5.335635276982233498398987585285818977930e-20L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 3.141592653589793238409287030509680549213L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -5.335635276982233498398987585285818977930e-20L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -3.141592653589793238409287030509680549213L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -3.141592653589793238462643383279502884197L),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (cacosh, -1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (cacosh, -1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -3.141592653589793238462643383279502884197L),
#endif
TEST_c_c (cacosh, 0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796242501204621739026081991856762292L),
TEST_c_c (cacosh, 0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796242501204621739026081991856762292L),
TEST_c_c (cacosh, -0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796411088588616723617301287646121905L),
TEST_c_c (cacosh, -0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796411088588616723617301287646121905L),
TEST_c_c (cacosh, 0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 2.222118384408546368406374049167636760903e-4L),
TEST_c_c (cacosh, -0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 3.141370441751352383825802745874586120521L),
TEST_c_c (cacosh, 0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -2.222118384408546368406374049167636760903e-4L),
TEST_c_c (cacosh, -0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -3.141370441751352383825802745874586120521L),
TEST_c_c (cacosh, 0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, 0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, -0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, -0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, 0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 5.830451806317544230969669308596361881467e-36L),
TEST_c_c (cacosh, -0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502878367L),
TEST_c_c (cacosh, 0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -5.830451806317544230969669308596361881467e-36L),
TEST_c_c (cacosh, -0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502878367L),
TEST_c_c (cacosh, 0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 0.0L),
TEST_c_c (cacosh, -0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -0.0L),
TEST_c_c (cacosh, -0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502884197L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896462222075823262262934288L),
TEST_c_c (cacosh, 0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896462222075823262262934288L),
TEST_c_c (cacosh, -0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896776240567560017239949909L),
TEST_c_c (cacosh, -0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896776240567560017239949909L),
TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 9.590301705980041385828904092662391018164e-9L),
TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 3.141592643999491532482601997450598791535L),
TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -9.590301705980041385828904092662391018164e-9L),
TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -3.141592643999491532482601997450598791535L),
TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 0.0L),
TEST_c_c (cacosh, -0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -0.0L),
TEST_c_c (cacosh, -0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (cacosh, 0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619154657020805582738031L),
TEST_c_c (cacosh, 0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619154657020805582738031L),
TEST_c_c (cacosh, -0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619307986362473920146166L),
TEST_c_c (cacosh, -0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619307986362473920146166L),
TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 2.119177303101063432592523199680782317447e-10L),
TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 3.141592653377875508152537040020250564229L),
TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -2.119177303101063432592523199680782317447e-10L),
TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -3.141592653377875508152537040020250564229L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 1.748608650034385653922359120438227480943e-4923L),
TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -1.748608650034385653922359120438227480943e-4923L),
TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L),
# endif
TEST_c_c (cacosh, 0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 0.0L),
TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -0.0L),
TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (cacosh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639742726335L),
TEST_c_c (cacosh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639742726335L),
TEST_c_c (cacosh, -0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639760157863L),
TEST_c_c (cacosh, -0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639760157863L),
TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 5.394221422390606848017034778914096659726e-17L),
TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 3.141592653589793184520429159373434404027L),
TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -5.394221422390606848017034778914096659726e-17L),
TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -3.141592653589793184520429159373434404027L),
TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 0.0L),
TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -0.0L),
TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (cacosh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751374007L),
TEST_c_c (cacosh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751374007L),
TEST_c_c (cacosh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751510190L),
TEST_c_c (cacosh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751510190L),
TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 4.767863183742677481693563511435642755521e-18L),
TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 3.141592653589793233694780199536825402504L),
TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -4.767863183742677481693563511435642755521e-18L),
TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -3.141592653589793233694780199536825402504L),
TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 4.148847925325683229178506116378864361396e-4916L),
TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -4.148847925325683229178506116378864361396e-4916L),
TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 0.0L),
TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L),
TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -0.0L),
TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L),
#endif
TEST_c_c (cacosh, 0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796242501197085295336701632142060969L),
TEST_c_c (cacosh, 0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796242501197085295336701632142060969L),
TEST_c_c (cacosh, -0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796411088596153167306681647360823228L),
TEST_c_c (cacosh, -0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796411088596153167306681647360823228L),
TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 4.391863861910487109445187743978204002614e-4L),
TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 3.141153467203602189751698864505105063797L),
TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -4.391863861910487109445187743978204002614e-4L),
TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -3.141153467203602189751698864505105063797L),
TEST_c_c (cacosh, 0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, 0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442097L),
TEST_c_c (cacosh, -0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, -0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.452669847162035876032494826387364972849e-4L),
TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.141247386605077034875040133796864147700L),
TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.452669847162035876032494826387364972849e-4L),
TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.141247386605077034875040133796864147700L),
TEST_c_c (cacosh, 0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.ffffffp0L, 0.0L, 0.0L, 3.452669847162035876032494826387364972849e-4L),
TEST_c_c (cacosh, -0x0.ffffffp0L, 0.0L, 0.0L, 3.141247386605077034875040133796864147700L),
TEST_c_c (cacosh, 0x0.ffffffp0L, -0.0L, 0.0L, -3.452669847162035876032494826387364972849e-4L),
TEST_c_c (cacosh, -0x0.ffffffp0L, -0.0L, 0.0L, -3.141247386605077034875040133796864147700L),
TEST_c_c (cacosh, 0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796220170866625230343643673321150378L),
TEST_c_c (cacosh, 0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796220170866625230343643673321150378L),
TEST_c_c (cacosh, -0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796433418926613232299739606181733819L),
TEST_c_c (cacosh, -0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796433418926613232299739606181733819L),
TEST_c_c (cacosh, 0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 1.047197551196603215914744618665204532273L),
TEST_c_c (cacosh, -0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 2.094395102393190022547898764614298351924L),
TEST_c_c (cacosh, 0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -1.047197551196603215914744618665204532273L),
TEST_c_c (cacosh, -0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -2.094395102393190022547898764614298351924L),
TEST_c_c (cacosh, 0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442096L),
TEST_c_c (cacosh, 0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442096L),
TEST_c_c (cacosh, -0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, -0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, 0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, 0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796207585607068450636380271254316214L),
TEST_c_c (cacosh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796207585607068450636380271254316214L),
TEST_c_c (cacosh, -0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796446004186170012007003008248567984L),
TEST_c_c (cacosh, -0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796446004186170012007003008248567984L),
TEST_c_c (cacosh, 0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442096L),
TEST_c_c (cacosh, 0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442096L),
TEST_c_c (cacosh, -0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, -0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442101L),
TEST_c_c (cacosh, 0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, 0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, 0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-23L, 0.0L, 0.0L, 1.570796207585607068449789347324000006847L),
TEST_c_c (cacosh, -0x1p-23L, 0.0L, 0.0L, 1.570796446004186170012854035955502877351L),
TEST_c_c (cacosh, 0x1p-23L, -0.0L, 0.0L, -1.570796207585607068449789347324000006847L),
TEST_c_c (cacosh, -0x1p-23L, -0.0L, 0.0L, -1.570796446004186170012854035955502877351L),
TEST_c_c (cacosh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (cacosh, -0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896462222075823262236786996L),
TEST_c_c (cacosh, 0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896462222075823262236786996L),
TEST_c_c (cacosh, -0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896776240567560017266097201L),
TEST_c_c (cacosh, -0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896776240567560017266097201L),
TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 1.895456983915074112227925127005564372844e-8L),
TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 3.141592634635223399311902261000251614142L),
TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -1.895456983915074112227925127005564372844e-8L),
TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -3.141592634635223399311902261000251614142L),
TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, 0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0.0L, 0.0L, 1.490116119384765638786343542550461592240e-8L),
TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0.0L, 0.0L, 3.141592638688632044614986995416067458693L),
TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0.0L, 0.0L, -1.490116119384765638786343542550461592240e-8L),
TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0.0L, 0.0L, -3.141592638688632044614986995416067458693L),
#endif
TEST_c_c (cacosh, 0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896420628589431857911675917L),
TEST_c_c (cacosh, 0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896420628589431857911675917L),
TEST_c_c (cacosh, -0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896817834053951421591208280L),
TEST_c_c (cacosh, -0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896817834053951421591208280L),
TEST_c_c (cacosh, 0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 1.047197551196597746154214461093186605110L),
TEST_c_c (cacosh, -0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 2.094395102393195492308428922186316279087L),
TEST_c_c (cacosh, 0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -1.047197551196597746154214461093186605110L),
TEST_c_c (cacosh, -0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -2.094395102393195492308428922186316279087L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, 0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (cacosh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896397186716766608443357372L),
TEST_c_c (cacosh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896397186716766608443357372L),
TEST_c_c (cacosh, -0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896841275926616671059526825L),
TEST_c_c (cacosh, -0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896841275926616671059526825L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, 0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (cacosh, 0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-52L, 0.0L, 0.0L, 1.570796326794896397186716766608443357372L),
TEST_c_c (cacosh, -0x1p-52L, 0.0L, 0.0L, 1.570796326794896841275926616671059526825L),
TEST_c_c (cacosh, 0x1p-52L, -0.0L, 0.0L, -1.570796326794896397186716766608443357372L),
TEST_c_c (cacosh, -0x1p-52L, -0.0L, 0.0L, -1.570796326794896841275926616671059526825L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (cacosh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619154657020805582738025L),
TEST_c_c (cacosh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619154657020805582738025L),
TEST_c_c (cacosh, -0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619307986362473920146173L),
TEST_c_c (cacosh, -0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619307986362473920146173L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 4.188407771167967636741951941902992986043e-10L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 3.141592653170952461345846619605307690007L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -4.188407771167967636741951941902992986043e-10L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -3.141592653170952461345846619605307690007L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.292722539913596233371825532007990724506e-10L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.141592653260520984471283759942320330996L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.292722539913596233371825532007990724506e-10L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.141592653260520984471283759942320330996L),
# endif
TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.292722539913596233371825532007990724506e-10L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.141592653260520984471283759942320330996L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.292722539913596233371825532007990724506e-10L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.141592653260520984471283759942320330996L),
#endif
TEST_c_c (cacosh, 0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619134347701278529840650L),
TEST_c_c (cacosh, 0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619134347701278529840650L),
TEST_c_c (cacosh, -0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619328295682000973043547L),
TEST_c_c (cacosh, -0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619328295682000973043547L),
TEST_c_c (cacosh, 0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 1.047197551196597746154214461093167628070L),
TEST_c_c (cacosh, -0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 2.094395102393195492308428922186335256127L),
TEST_c_c (cacosh, 0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -1.047197551196597746154214461093167628070L),
TEST_c_c (cacosh, -0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -2.094395102393195492308428922186335256127L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, 0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (cacosh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619122901474391200998698L),
TEST_c_c (cacosh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619122901474391200998698L),
TEST_c_c (cacosh, -0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619339741908888301885499L),
TEST_c_c (cacosh, -0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619339741908888301885499L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, 0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (cacosh, 0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-63L, 0.0L, 0.0L, 1.570796326794896619122901474391200998698L),
TEST_c_c (cacosh, -0x1p-63L, 0.0L, 0.0L, 1.570796326794896619339741908888301885499L),
TEST_c_c (cacosh, 0x1p-63L, -0.0L, 0.0L, -1.570796326794896619122901474391200998698L),
TEST_c_c (cacosh, -0x1p-63L, -0.0L, 0.0L, -1.570796326794896619339741908888301885499L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (cacosh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639734010571L),
TEST_c_c (cacosh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639734010571L),
TEST_c_c (cacosh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639768873627L),
TEST_c_c (cacosh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639768873627L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 1.997188458999618357060632049675702684031e-16L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 3.141592653589793038743797483317667178134L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -1.997188458999618357060632049675702684031e-16L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -3.141592653589793038743797483317667178134L),
TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 1.570092458683775059393382371963565104164e-16L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 3.141592653589793081453397514901996944859L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -1.570092458683775059393382371963565104164e-16L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -3.141592653589793081453397514901996944859L),
#endif
TEST_c_c (cacosh, 0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639729392766L),
TEST_c_c (cacosh, 0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639729392766L),
TEST_c_c (cacosh, -0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639773491431L),
TEST_c_c (cacosh, -0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639773491431L),
TEST_c_c (cacosh, 0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 1.047197551196597746154214461093167628066L),
TEST_c_c (cacosh, -0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 2.094395102393195492308428922186335256131L),
TEST_c_c (cacosh, 0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -1.047197551196597746154214461093167628066L),
TEST_c_c (cacosh, -0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -2.094395102393195492308428922186335256131L),
TEST_c_c (cacosh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639726790195L),
TEST_c_c (cacosh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639726790195L),
TEST_c_c (cacosh, -0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639776094002L),
TEST_c_c (cacosh, -0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639776094002L),
#ifndef TEST_FLOAT
TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, 0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (cacosh, -0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (cacosh, 0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639726790195L),
TEST_c_c (cacosh, -0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639776094002L),
TEST_c_c (cacosh, 0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639726790195L),
TEST_c_c (cacosh, -0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639776094002L),
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (cacosh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751305915L),
TEST_c_c (cacosh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751305915L),
TEST_c_c (cacosh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751578282L),
TEST_c_c (cacosh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751578282L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 1.765281878332676474347460257221369818872e-17L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 3.141592653589793220809824599952738140723L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -1.765281878332676474347460257221369818872e-17L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -3.141592653589793220809824599952738140723L),
TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 1.387778780781445675529539585113525401762e-17L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 3.141592653589793224584855575465046128902L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -1.387778780781445675529539585113525401762e-17L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -3.141592653589793224584855575465046128902L),
TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 1.387778780781445675529539585113525401762e-17L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 3.141592653589793224584855575465046128902L),
TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -1.387778780781445675529539585113525401762e-17L),
TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -3.141592653589793224584855575465046128902L),
#endif
TEST_c_c (cacosh, 0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751269838L),
TEST_c_c (cacosh, 0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751269838L),
TEST_c_c (cacosh, -0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751614359L),
TEST_c_c (cacosh, -0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751614359L),
TEST_c_c (cacosh, 0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 1.047197551196597746154214461093167628066L),
TEST_c_c (cacosh, -0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 2.094395102393195492308428922186335256131L),
TEST_c_c (cacosh, 0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -1.047197551196597746154214461093167628066L),
TEST_c_c (cacosh, -0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -2.094395102393195492308428922186335256131L),
TEST_c_c (cacosh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751249506L),
TEST_c_c (cacosh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751249506L),
TEST_c_c (cacosh, -0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751634692L),
TEST_c_c (cacosh, -0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751634692L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, 0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION),
TEST_c_c (cacosh, -0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (cacosh, 0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, -0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L),
TEST_c_c (cacosh, 0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751249506L),
TEST_c_c (cacosh, -0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751634692L),
TEST_c_c (cacosh, 0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751249506L),
TEST_c_c (cacosh, -0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751634692L),
TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L),
TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L),
};
static void
cacosh_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (cacosh, 0, cacosh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_f_data carg_test_data[] =
{
/* carg (x + iy) is specified as atan2 (y, x) */
/* carg (inf + i y) == +0 for finite y > 0. */
TEST_c_f (carg, plus_infty, 2.0, 0),
/* carg (inf + i y) == -0 for finite y < 0. */
TEST_c_f (carg, plus_infty, -2.0, minus_zero),
/* carg(x + i inf) == pi/2 for finite x. */
TEST_c_f (carg, 10.0, plus_infty, M_PI_2l),
/* carg(x - i inf) == -pi/2 for finite x. */
TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l),
/* carg (-inf + i y) == +pi for finite y > 0. */
TEST_c_f (carg, minus_infty, 10.0, M_PIl),
/* carg (-inf + i y) == -pi for finite y < 0. */
TEST_c_f (carg, minus_infty, -10.0, -M_PIl),
TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l),
TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l),
TEST_c_f (carg, minus_infty, plus_infty, M_PI_34l),
TEST_c_f (carg, minus_infty, minus_infty, -M_PI_34l),
TEST_c_f (carg, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_f (carg),
};
Update. 1999-10-24 Ulrich Drepper <drepper@cygnus.com> * math/libm-test.inc: Disable some boundary case tests for inline function testing. * math/math.h: Pretty printing. * sysdeps/i386/fpu/e_atanh.S: Correct handling of NaN. * sysdeps/i386/fpu/e_atanhf.S: Likewise. * sysdeps/i386/fpu/e_atanhl.S: Likewise. * sysdeps/i386/fpu/e_log10.S: Likewise. * sysdeps/i386/fpu/e_log10f.S: Likewise. * sysdeps/i386/fpu/e_log10l.S: Likewise. * sysdeps/i386/fpu/s_log1p.S: Likewise. * sysdeps/i386/fpu/s_log1pf.S: Likewise. * sysdeps/i386/fpu/s_log1pl.S: Likewise. * sysdeps/i386/fpu/s_log2.S: Likewise. * sysdeps/i386/fpu/s_log2f.S: Likewise. * sysdeps/i386/fpu/s_log2l.S: Likewise. * sysdeps/i386/fpu/libm-test-ulps: New file. * sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Correct return value for x == 0. (pow): Correct case x == 0. (__sgn1l): Correct handling of -0.0. 1999-10-22 Andreas Jaeger <aj@suse.de> * math/libm-test.inc (asinh_test): Add test for NaN as input parameter. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (carg_test): Likewise. (ceil_test): Likewise. (cos_test): Likewise. (cosh_test): Likewise. (cpow_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmod_test): Likewise. (gamma_test): Likewise. (lgamma_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (nearbyint_test): Likewise. (remainder_test): Likewise. (remquo_test): Likewise. (sin_test): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sqrt_test): Likewise. (tan_test): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise.
1999-10-24 22:04:52 +00:00
static void
carg_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (carg, 0, carg_test_data, RUN_TEST_LOOP_c_f, END);
}
static const struct test_c_c_data casin_test_data[] =
{
TEST_c_c (casin, 0, 0, 0.0, 0.0),
TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0),
TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero),
TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero),
TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty),
TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty),
TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty),
TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty),
TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty),
TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty),
TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty),
TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty),
TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty),
TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty),
TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty),
TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty),
TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty),
TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty),
TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty),
TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty),
TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty),
TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty),
TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty),
TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty),
TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty),
TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty),
TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value),
TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value),
TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN),
TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN),
TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value),
TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L),
TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L),
TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L),
TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L),
TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L),
TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L),
TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L),
TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L),
TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L),
TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L),
TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L),
TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L),
TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L),
TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L),
TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero),
TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero),
TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero),
TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero),
TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero),
TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero),
TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero),
TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero),
TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L),
TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L),
TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L),
TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L),
TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L),
TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L),
TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L),
TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L),
TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L),
TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L),
TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L),
TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L),
TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L),
TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L),
TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L),
TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L),
TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L),
TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L),
TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L),
TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L),
TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L),
TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L),
TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L),
TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L),
#endif
TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L),
#endif
TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L),
TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L),
#endif
TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L),
TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L),
TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L),
TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L),
TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L),
TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L),
TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L),
TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L),
TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L),
TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L),
TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L),
TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L),
TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L),
TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L),
TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L),
TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L),
TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L),
TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L),
TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L),
TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L),
TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L),
TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L),
TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L),
TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L),
TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L),
TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L),
TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L),
TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L),
TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L),
TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L),
TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L),
TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L),
TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L),
TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L),
TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L),
TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L),
TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L),
TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L),
TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L),
TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L),
TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L),
TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L),
TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L),
TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L),
TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L),
TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L),
TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L),
TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L),
TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L),
TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L),
#endif
TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L),
TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L),
TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L),
TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L),
TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L),
TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L),
TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L),
TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L),
TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L),
TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L),
TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L),
TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L),
TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L),
TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L),
TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L),
TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L),
TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L),
TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L),
TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L),
TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L),
TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L),
TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L),
TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L),
TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L),
TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L),
TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L),
TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L),
TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L),
TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L),
TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L),
TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L),
TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L),
TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L),
TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L),
TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L),
TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L),
TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L),
TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L),
TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L),
TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L),
TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L),
TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L),
TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L),
TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L),
TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L),
TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L),
TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L),
TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L),
TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L),
# endif
TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L),
TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L),
TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L),
TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L),
TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L),
TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L),
TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L),
TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L),
TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L),
TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L),
TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L),
TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L),
TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L),
TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L),
TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L),
TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L),
TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L),
TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L),
TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L),
TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L),
TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L),
TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L),
TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L),
TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L),
TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L),
TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L),
TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L),
TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L),
TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L),
TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L),
TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L),
TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L),
#endif
TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L),
TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L),
TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L),
TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L),
TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L),
TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L),
TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L),
TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L),
TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L),
TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L),
TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L),
TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L),
TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L),
TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L),
TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L),
TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L),
TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L),
TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L),
TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L),
TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L),
TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L),
TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L),
TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L),
TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L),
TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L),
TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L),
TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L),
TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L),
TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L),
TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L),
TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L),
TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L),
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L),
TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L),
TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L),
TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L),
TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L),
TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L),
TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L),
TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L),
TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L),
TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L),
TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L),
TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L),
TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L),
TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L),
TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L),
TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L),
TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L),
TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L),
TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L),
TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L),
TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L),
TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L),
TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L),
TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L),
#endif
TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L),
TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L),
TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L),
TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L),
TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L),
TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L),
TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L),
TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L),
TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L),
TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L),
TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L),
#ifndef TEST_FLOAT
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L),
TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L),
TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L),
TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L),
TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L),
TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L),
TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L),
TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L),
#ifndef TEST_FLOAT
TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L),
TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L),
TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L),
TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L),
TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L),
TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L),
TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L),
TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L),
TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L),
TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L),
TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L),
# endif
TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L),
TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L),
TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L),
TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L),
TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L),
TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L),
TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L),
TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L),
#endif
TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L),
TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L),
TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L),
TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L),
TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L),
TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L),
TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L),
TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L),
TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L),
TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L),
TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L),
TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L),
TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L),
TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L),
TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L),
TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L),
TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L),
TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L),
TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L),
#endif
TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L),
TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L),
TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L),
TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L),
TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L),
#ifndef TEST_FLOAT
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L),
TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L),
TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L),
TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L),
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L),
TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L),
TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L),
TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L),
TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L),
#endif
TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L),
TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L),
TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L),
TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L),
TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L),
TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L),
TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L),
TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L),
TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L),
TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L),
TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L),
};
static void
casin_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (casin, 0, casin_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data casinh_test_data[] =
{
TEST_c_c (casinh, 0, 0, 0.0, 0.0),
TEST_c_c (casinh, minus_zero, 0, minus_zero, 0),
TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero),
TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero),
TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l),
TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l),
TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l),
TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l),
TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l),
TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l),
TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l),
TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l),
TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0),
TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero),
TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0),
TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero),
TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0),
TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0),
TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero),
TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value),
TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0),
TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero),
TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN),
TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN),
TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value),
TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l),
TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l),
TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l),
TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l),
TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L),
TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L),
TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L),
TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L),
TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l),
TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l),
TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l),
TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l),
TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero),
TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero),
TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero),
TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero),
TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero),
TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero),
TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero),
TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero),
TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero),
TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero),
TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero),
TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero),
TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L),
TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L),
TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L),
TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L),
TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L),
TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L),
TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L),
TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L),
TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L),
TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L),
TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L),
TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L),
#endif
TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L),
#endif
TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L),
TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L),
TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L),
TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L),
TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L),
TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L),
TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L),
TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L),
TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L),
TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L),
TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L),
TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L),
TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L),
TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L),
TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L),
TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L),
TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L),
TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L),
TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L),
TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L),
TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L),
TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L),
TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L),
TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L),
TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L),
TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L),
TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L),
TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L),
TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L),
TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L),
TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L),
TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L),
TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L),
TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L),
TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L),
TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L),
TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L),
TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L),
TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L),
TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L),
TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L),
TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L),
TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L),
TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L),
TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L),
TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L),
TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L),
TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L),
TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L),
TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L),
TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L),
TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L),
TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L),
TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L),
TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L),
TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L),
TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L),
TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L),
TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L),
TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L),
TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L),
TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L),
TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L),
TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L),
TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L),
TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L),
TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L),
TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L),
TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L),
TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L),
TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L),
TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L),
TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L),
TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L),
TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L),
TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L),
TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L),
TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L),
TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L),
TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L),
TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L),
TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L),
TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L),
TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L),
TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L),
TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION),
# endif
TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L),
TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L),
TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L),
TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L),
TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L),
TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L),
TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L),
TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L),
TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L),
TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L),
TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L),
TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L),
TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L),
TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L),
TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L),
TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L),
TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L),
TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L),
TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L),
TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L),
TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L),
TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L),
TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L),
TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L),
TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L),
TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L),
TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L),
#endif
TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L),
TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L),
TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L),
TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L),
TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L),
TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L),
TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L),
TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L),
TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L),
TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L),
TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L),
TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L),
TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L),
TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L),
TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L),
TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L),
TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L),
TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L),
TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L),
TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L),
TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L),
TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L),
TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L),
TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L),
TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L),
TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT),
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L),
TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L),
TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L),
TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L),
TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L),
TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L),
TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L),
TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L),
TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L),
TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L),
TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L),
TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L),
TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L),
TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L),
TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L),
TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L),
TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L),
TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L),
TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L),
TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L),
TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L),
TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L),
TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L),
TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L),
#endif
TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L),
TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L),
TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L),
TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L),
TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L),
TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L),
TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L),
TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L),
TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L),
TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L),
TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE),
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L),
TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L),
TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L),
TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L),
TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L),
TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L),
TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L),
TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L),
TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L),
TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L),
TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L),
TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L),
TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L),
TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L),
TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L),
# if LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION),
# endif
TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L),
TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L),
TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L),
TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L),
TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L),
#endif
TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L),
TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L),
TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L),
TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L),
TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L),
TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L),
TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L),
TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L),
TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L),
TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L),
TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION),
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L),
TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L),
TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L),
TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L),
TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L),
TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L),
TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L),
TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L),
TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L),
TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L),
TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L),
TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L),
TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L),
TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L),
TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L),
#endif
TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L),
TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L),
TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L),
TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L),
TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L),
#ifndef TEST_FLOAT
TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE),
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L),
TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L),
TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L),
TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L),
TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L),
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L),
TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L),
TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L),
TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L),
TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L),
TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L),
TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L),
#endif
TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L),
TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L),
TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L),
TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L),
TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L),
TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION),
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-18 21:10:49 +00:00
TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L),
TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L),
TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L),
TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L),
TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L),
TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L),
TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L),
};
static void
casinh_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (casinh, 0, casinh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data catan_test_data[] =
{
TEST_c_c (catan, 0, 0, 0, 0),
TEST_c_c (catan, minus_zero, 0, minus_zero, 0),
TEST_c_c (catan, 0, minus_zero, 0, minus_zero),
TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero),
TEST_c_c (catan, 1.0L, plus_zero, M_PI_4l, plus_zero),
TEST_c_c (catan, 1.0L, minus_zero, M_PI_4l, minus_zero),
TEST_c_c (catan, -1.0L, plus_zero, -M_PI_4l, plus_zero),
TEST_c_c (catan, -1.0L, minus_zero, -M_PI_4l, minus_zero),
TEST_c_c (catan, plus_zero, 1.0L, plus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catan, minus_zero, 1.0L, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catan, plus_zero, -1.0L, plus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catan, minus_zero, -1.0L, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0),
TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero),
TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0),
TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero),
TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero),
TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero),
TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero),
TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero),
TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0),
TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0),
TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0),
TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0),
TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero),
TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero),
TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero),
TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero),
TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0),
TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0),
TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0),
TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0),
TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0),
TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero),
TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0),
TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero),
TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value),
TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value),
TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value),
TEST_c_c (catan, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L, 0.0L),
TEST_c_c (catan, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L, -0.0L),
TEST_c_c (catan, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L, 0.0L),
TEST_c_c (catan, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1p50L, 1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L),
TEST_c_c (catan, -0.0L, 0x1p50L, -1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L),
TEST_c_c (catan, 0.0L, -0x1p50L, 1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L),
TEST_c_c (catan, -0.0L, -0x1p50L, -1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L),
#ifndef TEST_FLOAT
TEST_c_c (catan, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L),
TEST_c_c (catan, -0.0L, 0x1p500L, -1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L),
TEST_c_c (catan, 0.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L),
TEST_c_c (catan, -0.0L, -0x1p500L, -1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catan, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (catan, -0.0L, 0x1p5000L, -1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (catan, 0.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L),
TEST_c_c (catan, -0.0L, -0x1p5000L, -1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L),
#endif
TEST_c_c (catan, 0x1p63L, 0.5L, 1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0x1p63L, -0.5L, 1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x1p63L, 0.5L, -1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x1p63L, -0.5L, -1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0.5L, 0x1p63L, 1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L),
TEST_c_c (catan, -0.5L, 0x1p63L, -1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L),
TEST_c_c (catan, 0.5L, -0x1p63L, 1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L),
TEST_c_c (catan, -0.5L, -0x1p63L, -1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L),
#ifndef TEST_FLOAT
TEST_c_c (catan, 0x1p511L, 0.5L, 1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1p511L, -0.5L, 1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1p511L, 0.5L, -1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1p511L, -0.5L, -1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0.5L, 0x1p511L, 1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L),
TEST_c_c (catan, -0.5L, 0x1p511L, -1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L),
TEST_c_c (catan, 0.5L, -0x1p511L, 1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L),
TEST_c_c (catan, -0.5L, -0x1p511L, -1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catan, 0x1p8191L, 0.5L, 1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1p8191L, -0.5L, 1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1p8191L, 0.5L, -1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1p8191L, -0.5L, -1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0.5L, 0x1p8191L, 1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L),
TEST_c_c (catan, -0.5L, 0x1p8191L, -1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L),
TEST_c_c (catan, 0.5L, -0x1p8191L, 1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L),
TEST_c_c (catan, -0.5L, -0x1p8191L, -1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L),
#endif
TEST_c_c (catan, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L, 0.0L),
TEST_c_c (catan, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L, -0.0L),
TEST_c_c (catan, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L, 0.0L),
TEST_c_c (catan, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1p100L, 1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L),
TEST_c_c (catan, -0.0L, 0x1p100L, -1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L),
TEST_c_c (catan, 0.0L, -0x1p100L, 1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L),
TEST_c_c (catan, -0.0L, -0x1p100L, -1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L),
TEST_c_c (catan, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L, 0.0L),
TEST_c_c (catan, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L, -0.0L),
TEST_c_c (catan, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L, 0.0L),
TEST_c_c (catan, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1.fp127L, 1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0.0L, 0x1.fp127L, -1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0.0L, -0x1.fp127L, 1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0.0L, -0x1.fp127L, -1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0x1.fp127L, 0x1.fp127L, 1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0x1.fp127L, -0x1.fp127L, 1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x1.fp127L, 0x1.fp127L, -1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x1.fp127L, -0x1.fp127L, -1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (catan, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1p900L, 1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L),
TEST_c_c (catan, -0.0L, 0x1p900L, -1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L),
TEST_c_c (catan, 0.0L, -0x1p900L, 1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L),
TEST_c_c (catan, -0.0L, -0x1p900L, -1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L),
TEST_c_c (catan, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0.0L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0.0L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0.0L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1.fp1023L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1.fp1023L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.fp1023L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.fp1023L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catan, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1p10000L, 1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L),
TEST_c_c (catan, -0.0L, 0x1p10000L, -1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L),
TEST_c_c (catan, 0.0L, -0x1p10000L, 1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L),
TEST_c_c (catan, -0.0L, -0x1p10000L, -1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L),
TEST_c_c (catan, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L),
TEST_c_c (catan, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L),
TEST_c_c (catan, 0.0L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0.0L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0.0L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0.0L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1.fp16383L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1.fp16383L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1.fp16383L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1.fp16383L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (catan, 0x1p-13L, 1.0L, 7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L),
TEST_c_c (catan, 0x1p-13L, -1.0L, 7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L),
TEST_c_c (catan, -0x1p-13L, 1.0L, -7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L),
TEST_c_c (catan, -0x1p-13L, -1.0L, -7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L),
TEST_c_c (catan, 1.0L, 0x1p-13L, 7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L),
TEST_c_c (catan, -1.0L, 0x1p-13L, -7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L),
TEST_c_c (catan, 1.0L, -0x1p-13L, 7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L),
TEST_c_c (catan, -1.0L, -0x1p-13L, -7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L),
TEST_c_c (catan, 0x1p-27L, 1.0L, 7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L),
TEST_c_c (catan, 0x1p-27L, -1.0L, 7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L),
TEST_c_c (catan, -0x1p-27L, 1.0L, -7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L),
TEST_c_c (catan, -0x1p-27L, -1.0L, -7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L),
TEST_c_c (catan, 1.0L, 0x1p-27L, 7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L),
TEST_c_c (catan, -1.0L, 0x1p-27L, -7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L),
TEST_c_c (catan, 1.0L, -0x1p-27L, 7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L),
TEST_c_c (catan, -1.0L, -0x1p-27L, -7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L),
TEST_c_c (catan, 0x1p-33L, 1.0L, 7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L),
TEST_c_c (catan, 0x1p-33L, -1.0L, 7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L),
TEST_c_c (catan, -0x1p-33L, 1.0L, -7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L),
TEST_c_c (catan, -0x1p-33L, -1.0L, -7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L),
TEST_c_c (catan, 1.0L, 0x1p-33L, 7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L),
TEST_c_c (catan, -1.0L, 0x1p-33L, -7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L),
TEST_c_c (catan, 1.0L, -0x1p-33L, 7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L),
TEST_c_c (catan, -1.0L, -0x1p-33L, -7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L),
TEST_c_c (catan, 0x1p-54L, 1.0L, 7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L),
TEST_c_c (catan, 0x1p-54L, -1.0L, 7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L),
TEST_c_c (catan, -0x1p-54L, 1.0L, -7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L),
TEST_c_c (catan, -0x1p-54L, -1.0L, -7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L),
TEST_c_c (catan, 1.0L, 0x1p-54L, 7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L),
TEST_c_c (catan, -1.0L, 0x1p-54L, -7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L),
TEST_c_c (catan, 1.0L, -0x1p-54L, 7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L),
TEST_c_c (catan, -1.0L, -0x1p-54L, -7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L),
TEST_c_c (catan, 0x1p-57L, 1.0L, 7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L),
TEST_c_c (catan, 0x1p-57L, -1.0L, 7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L),
TEST_c_c (catan, -0x1p-57L, 1.0L, -7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L),
TEST_c_c (catan, -0x1p-57L, -1.0L, -7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L),
TEST_c_c (catan, 1.0L, 0x1p-57L, 7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L),
TEST_c_c (catan, -1.0L, 0x1p-57L, -7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L),
TEST_c_c (catan, 1.0L, -0x1p-57L, 7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L),
TEST_c_c (catan, -1.0L, -0x1p-57L, -7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L),
TEST_c_c (catan, 0x1p-13L, 0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L),
TEST_c_c (catan, 0x1p-13L, -0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L),
TEST_c_c (catan, -0x1p-13L, 0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L),
TEST_c_c (catan, -0x1p-13L, -0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L),
TEST_c_c (catan, 0x1.000002p0L, 0x1p-13L, 7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L),
TEST_c_c (catan, -0x1.000002p0L, 0x1p-13L, -7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L),
TEST_c_c (catan, 0x1.000002p0L, -0x1p-13L, 7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L),
TEST_c_c (catan, -0x1.000002p0L, -0x1p-13L, -7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L),
TEST_c_c (catan, 0x1p-13L, 0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L),
TEST_c_c (catan, 0x1p-13L, -0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L),
TEST_c_c (catan, -0x1p-13L, 0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L),
TEST_c_c (catan, -0x1p-13L, -0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L),
TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-13L, 7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L),
TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-13L, -7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L),
TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-13L, 7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L),
TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-13L, -7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L),
#ifndef TEST_FLOAT
TEST_c_c (catan, 0x1p-27L, 0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L),
TEST_c_c (catan, 0x1p-27L, -0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L),
TEST_c_c (catan, -0x1p-27L, 0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L),
TEST_c_c (catan, -0x1p-27L, -0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L),
TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-27L, 7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L),
TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-27L, -7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L),
TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-27L, 7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L),
TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-27L, -7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L),
TEST_c_c (catan, 0x1p-27L, 0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L),
TEST_c_c (catan, 0x1p-27L, -0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L),
TEST_c_c (catan, -0x1p-27L, 0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L),
TEST_c_c (catan, -0x1p-27L, -0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L),
TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-27L, 7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L),
TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-27L, -7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L),
TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-27L, 7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L),
TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-27L, -7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (catan, 0x1p-33L, 0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L),
TEST_c_c (catan, 0x1p-33L, -0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L),
TEST_c_c (catan, -0x1p-33L, 0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L),
TEST_c_c (catan, -0x1p-33L, -0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L),
TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-33L, 7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L),
TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-33L, -7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L),
TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-33L, 7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L),
TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-33L, -7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L),
TEST_c_c (catan, 0x1p-33L, 0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L),
TEST_c_c (catan, 0x1p-33L, -0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L),
TEST_c_c (catan, -0x1p-33L, 0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L),
TEST_c_c (catan, -0x1p-33L, -0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L),
TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-33L, 7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L),
TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-33L, -7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L),
TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-33L, 7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L),
TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-33L, -7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (catan, 0x1p-54L, 0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L),
TEST_c_c (catan, 0x1p-54L, -0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L),
TEST_c_c (catan, -0x1p-54L, 0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L),
TEST_c_c (catan, -0x1p-54L, -0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L),
TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-54L, 7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L),
TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-54L, -7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L),
TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-54L, 7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L),
TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-54L, -7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L),
TEST_c_c (catan, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L),
TEST_c_c (catan, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L),
TEST_c_c (catan, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L),
TEST_c_c (catan, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (catan, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L),
TEST_c_c (catan, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L),
TEST_c_c (catan, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L),
TEST_c_c (catan, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L),
TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L),
TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L),
TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L),
TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L),
TEST_c_c (catan, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L),
TEST_c_c (catan, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L),
TEST_c_c (catan, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L),
TEST_c_c (catan, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L),
#endif
TEST_c_c (catan, 1.0L, 0x1p-64L, 7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L),
TEST_c_c (catan, 1.0L, -0x1p-64L, 7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L),
TEST_c_c (catan, -1.0L, 0x1p-64L, -7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L),
TEST_c_c (catan, -1.0L, -0x1p-64L, -7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L),
TEST_c_c (catan, 0x1p-64L, 1.0L, 7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L),
TEST_c_c (catan, -0x1p-64L, 1.0L, -7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L),
TEST_c_c (catan, 0x1p-64L, -1.0L, 7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L),
TEST_c_c (catan, -0x1p-64L, -1.0L, -7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L),
TEST_c_c (catan, 1.0L, 0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L),
TEST_c_c (catan, 1.0L, -0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L),
TEST_c_c (catan, -1.0L, 0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L),
TEST_c_c (catan, -1.0L, -0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L),
TEST_c_c (catan, 0x1.3p-73L, 1.0L, 7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L),
TEST_c_c (catan, -0x1.3p-73L, 1.0L, -7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L),
TEST_c_c (catan, 0x1.3p-73L, -1.0L, 7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L),
TEST_c_c (catan, -0x1.3p-73L, -1.0L, -7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L),
TEST_c_c (catan, 1.0L, 0x1p-124L, 7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L),
TEST_c_c (catan, 1.0L, -0x1p-124L, 7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L),
TEST_c_c (catan, -1.0L, 0x1p-124L, -7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L),
TEST_c_c (catan, -1.0L, -0x1p-124L, -7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L),
TEST_c_c (catan, 0x1p-124L, 1.0L, 7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L),
TEST_c_c (catan, -0x1p-124L, 1.0L, -7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L),
TEST_c_c (catan, 0x1p-124L, -1.0L, 7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L),
TEST_c_c (catan, -0x1p-124L, -1.0L, -7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L),
TEST_c_c (catan, 0x1.000002p0L, 0x1p-126L, 7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0x1.000002p0L, -0x1p-126L, 7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x1.000002p0L, 0x1p-126L, -7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x1.000002p0L, -0x1p-126L, -7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0x1p-126L, 0x1.000002p0L, 1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L),
TEST_c_c (catan, -0x1p-126L, 0x1.000002p0L, -1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L),
TEST_c_c (catan, 0x1p-126L, -0x1.000002p0L, 1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L),
TEST_c_c (catan, -0x1p-126L, -0x1.000002p0L, -1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L),
TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-126L, 7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-126L, 7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-126L, -7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-126L, -7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catan, 0x1p-126L, 0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L),
TEST_c_c (catan, -0x1p-126L, 0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L),
TEST_c_c (catan, 0x1p-126L, -0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L),
TEST_c_c (catan, -0x1p-126L, -0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L),
#ifndef TEST_FLOAT
TEST_c_c (catan, 1.0L, 0x1p-512L, 7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L),
TEST_c_c (catan, 1.0L, -0x1p-512L, 7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L),
TEST_c_c (catan, -1.0L, 0x1p-512L, -7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L),
TEST_c_c (catan, -1.0L, -0x1p-512L, -7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L),
TEST_c_c (catan, 0x1p-512L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L),
TEST_c_c (catan, -0x1p-512L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L),
TEST_c_c (catan, 0x1p-512L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L),
TEST_c_c (catan, -0x1p-512L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L),
TEST_c_c (catan, 1.0L, 0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L),
TEST_c_c (catan, 1.0L, -0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L),
TEST_c_c (catan, -1.0L, 0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L),
TEST_c_c (catan, -1.0L, -0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L),
TEST_c_c (catan, 0x1.3p-536L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L),
TEST_c_c (catan, -0x1.3p-536L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L),
TEST_c_c (catan, 0x1.3p-536L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L),
TEST_c_c (catan, -0x1.3p-536L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L),
TEST_c_c (catan, 1.0L, 0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catan, 1.0L, -0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catan, -1.0L, 0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catan, -1.0L, -0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catan, 0x1p-1020L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L),
TEST_c_c (catan, -0x1p-1020L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L),
TEST_c_c (catan, 0x1p-1020L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L),
TEST_c_c (catan, -0x1p-1020L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L),
TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L),
TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L),
TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L),
TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L),
TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catan, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catan, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catan, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L),
TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L),
TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L),
TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L),
TEST_c_c (catan, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L),
TEST_c_c (catan, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L),
TEST_c_c (catan, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L),
TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L),
TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L),
TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catan, 1.0L, 0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L),
TEST_c_c (catan, 1.0L, -0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L),
TEST_c_c (catan, -1.0L, 0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L),
TEST_c_c (catan, -1.0L, -0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L),
TEST_c_c (catan, 0x1p-8192L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L),
TEST_c_c (catan, -0x1p-8192L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L),
TEST_c_c (catan, 0x1p-8192L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L),
TEST_c_c (catan, -0x1p-8192L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L),
TEST_c_c (catan, 1.0L, 0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L),
TEST_c_c (catan, 1.0L, -0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L),
TEST_c_c (catan, -1.0L, 0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L),
TEST_c_c (catan, -1.0L, -0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L),
TEST_c_c (catan, 0x1.3p-8221L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L),
TEST_c_c (catan, -0x1.3p-8221L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L),
TEST_c_c (catan, 0x1.3p-8221L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L),
TEST_c_c (catan, -0x1.3p-8221L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L),
TEST_c_c (catan, 1.0L, 0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L),
TEST_c_c (catan, 1.0L, -0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L),
TEST_c_c (catan, -1.0L, 0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L),
TEST_c_c (catan, -1.0L, -0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L),
TEST_c_c (catan, 0x1.3p-8246L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L),
TEST_c_c (catan, -0x1.3p-8246L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L),
TEST_c_c (catan, 0x1.3p-8246L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L),
TEST_c_c (catan, -0x1.3p-8246L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L),
TEST_c_c (catan, 1.0L, 0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L),
TEST_c_c (catan, 1.0L, -0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L),
TEST_c_c (catan, -1.0L, 0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L),
TEST_c_c (catan, -1.0L, -0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L),
TEST_c_c (catan, 0x1p-16380L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L),
TEST_c_c (catan, -0x1p-16380L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L),
TEST_c_c (catan, 0x1p-16380L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L),
TEST_c_c (catan, -0x1p-16380L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L),
TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L),
TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L),
TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L),
TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L),
TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L),
# if LDBL_MANT_DIG >= 113
TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L),
TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L),
TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L),
TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION),
TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L),
TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L),
TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L),
TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L),
# endif
#endif
TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L),
TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L),
};
static void
catan_test (void)
{
Fix catan, catanh, __ieee754_logf in round-downward mode (bug 16799, bug 16800). This patch fixes incorrect results from catan and catanh of certain special inputs in round-downward mode (bug 16799), and incorrect results of __ieee754_logf (+/-0) in round-downward mode (bug 16800) that show up through catan/catanh when tested in all rounding modes, but not directly in the testing for logf because the bug gets hidden by the wrappers. Both bugs involve a zero that should be +0 being -0 instead: one computed as (1-x)*(1+x) in the catan/catanh case, and one as (x-x) in the logf case. The fixes ensure positive zero is used. Testing of catan and catanh in all rounding modes is duly enabled. I expect there are various other bugs in special cases in __ieee754_* functions that are normally hidden by the wrappers but would show up for testing with -lieee (or in future with -fno-math-errno if we replace -lieee and _LIB_VERSION with compile-time redirection to new *_noerrno symbol names). Tested x86_64 and x86 and ulps updated accordingly. [BZ #16799] [BZ #16800] * math/s_catan.c (__catan): Avoid passing -0 denominator to atan2 with 0 numerator. * math/s_catanf.c (__catanf): Likewise. * math/s_catanh.c (__catanh): Likewise. * math/s_catanhf.c (__catanhf): Likewise. * math/s_catanhl.c (__catanhl): Likewise. * math/s_catanl.c (__catanl): Likewise. * sysdeps/ieee754/flt-32/e_logf.c (__ieee754_logf): Always divide by positive zero when computing -Inf result. * math/libm-test.inc (catan_test): Use ALL_RM_TEST. (catanh_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-04-02 17:41:02 +00:00
ALL_RM_TEST (catan, 0, catan_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data catanh_test_data[] =
{
TEST_c_c (catanh, 0, 0, 0.0, 0.0),
TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0),
TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero),
TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero),
TEST_c_c (catanh, 1.0L, plus_zero, plus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catanh, 1.0L, minus_zero, plus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catanh, -1.0L, plus_zero, minus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catanh, -1.0L, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (catanh, plus_zero, 1.0L, plus_zero, M_PI_4l),
TEST_c_c (catanh, minus_zero, 1.0L, minus_zero, M_PI_4l),
TEST_c_c (catanh, plus_zero, -1.0L, plus_zero, -M_PI_4l),
TEST_c_c (catanh, minus_zero, -1.0L, minus_zero, -M_PI_4l),
TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l),
TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l),
TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l),
TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l),
TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l),
TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l),
TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l),
TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l),
TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l),
TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l),
TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l),
TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l),
TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l),
TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l),
TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l),
TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l),
TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l),
TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l),
TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l),
TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l),
TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value),
TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value),
TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value),
TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value),
TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value),
TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value),
TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN),
TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN),
TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value),
TEST_c_c (catanh, 0x1p50L, 0.0L, 8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p50L, -0.0L, 8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p50L, 0.0L, -8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p50L, -0.0L, -8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L),
TEST_c_c (catanh, -0.0L, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L),
TEST_c_c (catanh, 0.0L, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L),
TEST_c_c (catanh, -0.0L, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L),
#ifndef TEST_FLOAT
TEST_c_c (catanh, 0x1p500L, 0.0L, 3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p500L, -0.0L, 3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p500L, 0.0L, -3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p500L, -0.0L, -3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catanh, 0x1p5000L, 0.0L, 7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p5000L, -0.0L, 7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p5000L, 0.0L, -7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p5000L, -0.0L, -7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L),
#endif
TEST_c_c (catanh, 0x1p63L, 0.5L, 1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L),
TEST_c_c (catanh, 0x1p63L, -0.5L, 1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L),
TEST_c_c (catanh, -0x1p63L, 0.5L, -1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L),
TEST_c_c (catanh, -0x1p63L, -0.5L, -1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L),
TEST_c_c (catanh, 0.5L, 0x1p63L, 5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0.5L, 0x1p63L, -5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, 0.5L, -0x1p63L, 5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0.5L, -0x1p63L, -5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (catanh, 0x1p511L, 0.5L, 1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p511L, -0.5L, 1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p511L, 0.5L, -1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p511L, -0.5L, -1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.5L, 0x1p511L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0.5L, 0x1p511L, -1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0.5L, -0x1p511L, 1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0.5L, -0x1p511L, -1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catanh, 0x1p8191L, 0.5L, 1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p8191L, -0.5L, 1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p8191L, 0.5L, -1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p8191L, -0.5L, -1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.5L, 0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0.5L, 0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0.5L, -0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0.5L, -0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (catanh, 0x1p100L, 0.0L, 7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p100L, -0.0L, 7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p100L, 0.0L, -7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p100L, -0.0L, -7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L),
TEST_c_c (catanh, -0.0L, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L),
TEST_c_c (catanh, 0.0L, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L),
TEST_c_c (catanh, -0.0L, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L),
TEST_c_c (catanh, 0x1.fp127L, 0.0L, 3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, 0x1.fp127L, -0.0L, 3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1.fp127L, 0.0L, -3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1.fp127L, -0.0L, -3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, 0.0L, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L),
TEST_c_c (catanh, -0.0L, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L),
TEST_c_c (catanh, 0.0L, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L),
TEST_c_c (catanh, -0.0L, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L),
TEST_c_c (catanh, 0x1.fp127L, 0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, 0x1.fp127L, -0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1.fp127L, 0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1.fp127L, -0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (catanh, 0x1p900L, 0.0L, 1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p900L, -0.0L, 1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p900L, 0.0L, -1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p900L, -0.0L, -1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.fp1023L, 0.0L, 5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1.fp1023L, -0.0L, 5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1.fp1023L, 0.0L, -5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1.fp1023L, -0.0L, -5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0.0L, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.fp1023L, 0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1.fp1023L, -0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1.fp1023L, 0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1.fp1023L, -0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catanh, 0x1p10000L, 0.0L, 5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p10000L, -0.0L, 5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p10000L, 0.0L, -5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1p10000L, -0.0L, -5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.fp16383L, 0.0L, 8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x1.fp16383L, -0.0L, 8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1.fp16383L, 0.0L, -8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1.fp16383L, -0.0L, -8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0.0L, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0.0L, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0.0L, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.fp16383L, 0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x1.fp16383L, -0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1.fp16383L, 0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1.fp16383L, -0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION),
#endif
TEST_c_c (catanh, 0x1p-13L, 1.0L, 6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L),
TEST_c_c (catanh, 0x1p-13L, -1.0L, 6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L),
TEST_c_c (catanh, -0x1p-13L, 1.0L, -6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L),
TEST_c_c (catanh, -0x1p-13L, -1.0L, -6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-13L, 4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-13L, -4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-13L, 4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-13L, -4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L),
TEST_c_c (catanh, 0x1p-27L, 1.0L, 3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, 0x1p-27L, -1.0L, 3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, -0x1p-27L, 1.0L, -3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, -0x1p-27L, -1.0L, -3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-27L, 9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-27L, -9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-27L, 9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-27L, -9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L),
TEST_c_c (catanh, 0x1p-33L, 1.0L, 5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L),
TEST_c_c (catanh, 0x1p-33L, -1.0L, 5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L),
TEST_c_c (catanh, -0x1p-33L, 1.0L, -5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L),
TEST_c_c (catanh, -0x1p-33L, -1.0L, -5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-33L, 1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-33L, -1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-33L, 1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-33L, -1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L),
TEST_c_c (catanh, 0x1p-54L, 1.0L, 2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L),
TEST_c_c (catanh, 0x1p-54L, -1.0L, 2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L),
TEST_c_c (catanh, -0x1p-54L, 1.0L, -2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L),
TEST_c_c (catanh, -0x1p-54L, -1.0L, -2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-54L, 1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-54L, -1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-54L, 1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-54L, -1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L),
TEST_c_c (catanh, 0x1p-57L, 1.0L, 3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L),
TEST_c_c (catanh, 0x1p-57L, -1.0L, 3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L),
TEST_c_c (catanh, -0x1p-57L, 1.0L, -3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L),
TEST_c_c (catanh, -0x1p-57L, -1.0L, -3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-57L, 2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-57L, -2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-57L, 2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-57L, -2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L),
TEST_c_c (catanh, 0x1p-13L, 0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L),
TEST_c_c (catanh, 0x1p-13L, -0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L),
TEST_c_c (catanh, -0x1p-13L, 0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L),
TEST_c_c (catanh, -0x1p-13L, -0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L),
TEST_c_c (catanh, 0x1.000002p0L, 0x1p-13L, 4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L),
TEST_c_c (catanh, -0x1.000002p0L, 0x1p-13L, -4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L),
TEST_c_c (catanh, 0x1.000002p0L, -0x1p-13L, 4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L),
TEST_c_c (catanh, -0x1.000002p0L, -0x1p-13L, -4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L),
TEST_c_c (catanh, 0x1p-13L, 0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L),
TEST_c_c (catanh, 0x1p-13L, -0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L),
TEST_c_c (catanh, -0x1p-13L, 0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L),
TEST_c_c (catanh, -0x1p-13L, -0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L),
TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-13L, 4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L),
TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-13L, -4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L),
TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-13L, 4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L),
TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-13L, -4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L),
#ifndef TEST_FLOAT
TEST_c_c (catanh, 0x1p-27L, 0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L),
TEST_c_c (catanh, 0x1p-27L, -0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L),
TEST_c_c (catanh, -0x1p-27L, 0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L),
TEST_c_c (catanh, -0x1p-27L, -0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L),
TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-27L, 9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L),
TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-27L, -9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L),
TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-27L, 9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L),
TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-27L, -9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L),
TEST_c_c (catanh, 0x1p-27L, 0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L),
TEST_c_c (catanh, 0x1p-27L, -0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L),
TEST_c_c (catanh, -0x1p-27L, 0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L),
TEST_c_c (catanh, -0x1p-27L, -0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L),
TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-27L, 9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L),
TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-27L, -9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L),
TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-27L, 9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L),
TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-27L, -9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (catanh, 0x1p-33L, 0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L),
TEST_c_c (catanh, 0x1p-33L, -0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L),
TEST_c_c (catanh, -0x1p-33L, 0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L),
TEST_c_c (catanh, -0x1p-33L, -0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L),
TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-33L, 1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L),
TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-33L, -1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L),
TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-33L, 1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L),
TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-33L, -1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L),
TEST_c_c (catanh, 0x1p-33L, 0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L),
TEST_c_c (catanh, 0x1p-33L, -0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L),
TEST_c_c (catanh, -0x1p-33L, 0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L),
TEST_c_c (catanh, -0x1p-33L, -0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L),
TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-33L, 1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L),
TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-33L, -1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L),
TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-33L, 1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L),
TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-33L, -1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (catanh, 0x1p-54L, 0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L),
TEST_c_c (catanh, 0x1p-54L, -0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L),
TEST_c_c (catanh, -0x1p-54L, 0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L),
TEST_c_c (catanh, -0x1p-54L, -0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L),
TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-54L, 1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L),
TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-54L, -1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L),
TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-54L, 1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L),
TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-54L, -1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L),
TEST_c_c (catanh, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L),
TEST_c_c (catanh, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L),
TEST_c_c (catanh, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L),
TEST_c_c (catanh, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
TEST_c_c (catanh, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L),
TEST_c_c (catanh, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L),
TEST_c_c (catanh, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L),
TEST_c_c (catanh, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L),
TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L),
TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L),
TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L),
TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L),
TEST_c_c (catanh, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L),
TEST_c_c (catanh, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L),
TEST_c_c (catanh, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L),
TEST_c_c (catanh, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L),
#endif
TEST_c_c (catanh, 1.0L, 0x1p-64L, 2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-64L, 2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-64L, -2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-64L, -2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L),
TEST_c_c (catanh, 0x1p-64L, 1.0L, 2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L),
TEST_c_c (catanh, -0x1p-64L, 1.0L, -2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L),
TEST_c_c (catanh, 0x1p-64L, -1.0L, 2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L),
TEST_c_c (catanh, -0x1p-64L, -1.0L, -2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L),
TEST_c_c (catanh, 1.0L, 0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L),
TEST_c_c (catanh, 1.0L, -0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L),
TEST_c_c (catanh, -1.0L, 0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L),
TEST_c_c (catanh, -1.0L, -0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L),
TEST_c_c (catanh, 0x1.3p-73L, 1.0L, 6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-73L, 1.0L, -6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.3p-73L, -1.0L, 6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-73L, -1.0L, -6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-124L, 4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-124L, 4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-124L, -4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-124L, -4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L),
TEST_c_c (catanh, 0x1p-124L, 1.0L, 2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-124L, 1.0L, -2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-124L, -1.0L, 2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-124L, -1.0L, -2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.000002p0L, 0x1p-126L, 8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L),
TEST_c_c (catanh, 0x1.000002p0L, -0x1p-126L, 8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L),
TEST_c_c (catanh, -0x1.000002p0L, 0x1p-126L, -8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L),
TEST_c_c (catanh, -0x1.000002p0L, -0x1p-126L, -8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L),
TEST_c_c (catanh, 0x1p-126L, 0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1p-126L, 0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, 0x1p-126L, -0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1p-126L, -0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-126L, 8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L),
TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-126L, 8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L),
TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-126L, -8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L),
TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-126L, -8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L),
TEST_c_c (catanh, 0x1p-126L, 0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1p-126L, 0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, 0x1p-126L, -0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT),
TEST_c_c (catanh, -0x1p-126L, -0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT),
#ifndef TEST_FLOAT
TEST_c_c (catanh, 1.0L, 0x1p-512L, 1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-512L, 1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-512L, -1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-512L, -1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-512L, 1.0L, 3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-512L, 1.0L, -3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-512L, -1.0L, 3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-512L, -1.0L, -3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, 0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, -0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, 0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, -0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.3p-536L, 1.0L, 2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-536L, 1.0L, -2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.3p-536L, -1.0L, 2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-536L, -1.0L, -2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-1020L, 3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-1020L, 3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-1020L, -3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-1020L, -3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-1020L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, -0x1p-1020L, 1.0L, -4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, 0x1p-1020L, -1.0L, 4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, -0x1p-1020L, -1.0L, -4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-1022L, 1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-1022L, 1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-1022L, -1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-1022L, -1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-1022L, 1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-1022L, 1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-1022L, -1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-1022L, -1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM),
TEST_c_c (catanh, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-1022L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-1022L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-1022L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-1022L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L),
TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L),
TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L),
TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L),
TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L),
TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (catanh, 1.0L, 0x1p-8192L, 2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-8192L, 2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-8192L, -2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-8192L, -2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-8192L, 1.0L, 4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-8192L, 1.0L, -4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-8192L, -1.0L, 4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-8192L, -1.0L, -4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, 0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, -0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, 0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, -0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.3p-8221L, 1.0L, 1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-8221L, 1.0L, -1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.3p-8221L, -1.0L, 1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-8221L, -1.0L, -1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, 0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, -0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, 0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, -0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.3p-8246L, 1.0L, 3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-8246L, 1.0L, -3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.3p-8246L, -1.0L, 3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1.3p-8246L, -1.0L, -3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, 0x1p-16380L, 5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 1.0L, -0x1p-16380L, 5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, 0x1p-16380L, -5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -1.0L, -0x1p-16380L, -5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-16380L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-16380L, 1.0L, -6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1p-16380L, -1.0L, 6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, -0x1p-16380L, -1.0L, -6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L),
TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-16382L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-16382L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-16382L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-16382L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L),
TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L),
TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L),
TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L),
TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION),
# if LDBL_MANT_DIG >= 113
TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L),
TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L),
TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L),
TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L),
TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION),
TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION),
# endif
#endif
TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L),
TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L),
};
static void
catanh_test (void)
{
Fix catan, catanh, __ieee754_logf in round-downward mode (bug 16799, bug 16800). This patch fixes incorrect results from catan and catanh of certain special inputs in round-downward mode (bug 16799), and incorrect results of __ieee754_logf (+/-0) in round-downward mode (bug 16800) that show up through catan/catanh when tested in all rounding modes, but not directly in the testing for logf because the bug gets hidden by the wrappers. Both bugs involve a zero that should be +0 being -0 instead: one computed as (1-x)*(1+x) in the catan/catanh case, and one as (x-x) in the logf case. The fixes ensure positive zero is used. Testing of catan and catanh in all rounding modes is duly enabled. I expect there are various other bugs in special cases in __ieee754_* functions that are normally hidden by the wrappers but would show up for testing with -lieee (or in future with -fno-math-errno if we replace -lieee and _LIB_VERSION with compile-time redirection to new *_noerrno symbol names). Tested x86_64 and x86 and ulps updated accordingly. [BZ #16799] [BZ #16800] * math/s_catan.c (__catan): Avoid passing -0 denominator to atan2 with 0 numerator. * math/s_catanf.c (__catanf): Likewise. * math/s_catanh.c (__catanh): Likewise. * math/s_catanhf.c (__catanhf): Likewise. * math/s_catanhl.c (__catanhl): Likewise. * math/s_catanl.c (__catanl): Likewise. * sysdeps/ieee754/flt-32/e_logf.c (__ieee754_logf): Always divide by positive zero when computing -Inf result. * math/libm-test.inc (catan_test): Use ALL_RM_TEST. (catanh_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-04-02 17:41:02 +00:00
ALL_RM_TEST (catanh, 0, catanh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_f_f_data cbrt_test_data[] =
{
TEST_f_f (cbrt, plus_infty, plus_infty),
TEST_f_f (cbrt, minus_infty, minus_infty),
TEST_f_f (cbrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (cbrt),
};
static void
cbrt_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (cbrt, 0, cbrt_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_c_c_data ccos_test_data[] =
{
TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero),
TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0),
TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0),
TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero),
TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty),
TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty),
TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty),
TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty),
TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value),
TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value),
TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (ccos),
};
static void
ccos_test (void)
{
ALL_RM_TEST (ccos, 0, ccos_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data ccosh_test_data[] =
{
TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0),
TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero),
TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0),
TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty),
TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty),
TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty),
TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty),
TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (ccosh),
};
static void
ccosh_test (void)
{
ALL_RM_TEST (ccosh, 0, ccosh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_f_f_data ceil_test_data[] =
{
TEST_f_f (ceil, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (ceil, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_f_f (ceil, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (ceil, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (ceil, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* Bug 15479: spurious "inexact" exception may occur. */
TEST_f_f (ceil, M_PIl, 4.0),
TEST_f_f (ceil, -M_PIl, -3.0),
TEST_f_f (ceil, min_subnorm_value, 1.0),
TEST_f_f (ceil, min_value, 1.0),
TEST_f_f (ceil, 0.1, 1.0),
TEST_f_f (ceil, 0.25, 1.0),
TEST_f_f (ceil, 0.625, 1.0),
TEST_f_f (ceil, max_value, max_value),
TEST_f_f (ceil, -min_subnorm_value, minus_zero),
TEST_f_f (ceil, -min_value, minus_zero),
TEST_f_f (ceil, -0.1, minus_zero),
TEST_f_f (ceil, -0.25, minus_zero),
TEST_f_f (ceil, -0.625, minus_zero),
TEST_f_f (ceil, -max_value, -max_value),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L),
TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L),
TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L),
TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L),
TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L),
TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L),
TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L),
TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L),
TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L),
TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L),
TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L),
TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L),
TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L),
TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L),
TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L),
TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L),
TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L),
TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L),
TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L),
TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L),
TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L),
TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L),
TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L),
TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L),
TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L),
TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L),
TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L),
TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L),
TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L),
TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L),
TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L),
TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L),
TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L),
TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L),
TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L),
TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L),
TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L),
TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L),
TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L),
TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L),
TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L),
TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L),
TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L),
/* Check cases where first double is a exact integer higher than 2^52 and
the precision is determined by second long double for IBM long double. */
TEST_f_f (ceil, 34503599627370498.515625L, 34503599627370499.0L),
TEST_f_f (ceil, -34503599627370498.515625L, -34503599627370498.0L),
# if LDBL_MANT_DIG >= 106
TEST_f_f (ceil, 1192568192774434123539907640624.484375L, 1192568192774434123539907640625.0L),
TEST_f_f (ceil, -1192568192774434123539907640624.484375L, -1192568192774434123539907640624.0L),
# endif
TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L),
TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L),
TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L),
TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L),
TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L),
#endif
};
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
static void
ceil_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (ceil, 1, ceil_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_c_c_data cexp_test_data[] =
{
TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0),
TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0),
TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero),
TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0),
TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero),
TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty),
TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty),
TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN),
TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value),
2013-08-23 19:45:38 +00:00
TEST_c_c (cexp, qnan_value, 0.0, qnan_value, 0.0),
TEST_c_c (cexp, qnan_value, minus_zero, qnan_value, minus_zero),
TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (cexp),
};
static void
cexp_test (void)
{
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-24 21:04:51 +00:00
ALL_RM_TEST (cexp, 0, cexp_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_f_data cimag_test_data[] =
{
TEST_c_f (cimag, 1.0, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_f (cimag, 1.0, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_f (cimag, 1.0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_f (cimag, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_f (cimag, 1.0, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_c_f (cimag, 1.0, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_c_f (cimag, 2.0, 3.0, 3.0, NO_INEXACT_EXCEPTION),
};
static void
cimag_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (cimag, 1, cimag_test_data, RUN_TEST_LOOP_c_f, END);
}
static const struct test_c_c_data clog_test_data[] =
{
TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l),
TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l),
TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l),
TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l),
TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l),
TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l),
TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl),
TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl),
TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl),
TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl),
TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0),
TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0),
TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero),
TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value),
TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value),
TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (clog),
};
static void
clog_test (void)
{
ALL_RM_TEST (clog, 0, clog_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data clog10_test_data[] =
{
TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PI_LOG10El, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PI_LOG10El, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION),
TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El),
TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El),
TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El),
TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El),
TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El),
TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El),
TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El),
TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El),
TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El),
TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El),
TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El),
TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El),
TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El),
TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El),
TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El),
TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0),
TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0),
TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero),
TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value),
TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value),
TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (clog10),
};
static void
clog10_test (void)
{
ALL_RM_TEST (clog10, 0, clog10_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data conj_test_data[] =
{
TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0, NO_INEXACT_EXCEPTION),
TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0, NO_INEXACT_EXCEPTION),
};
static void
conj_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (conj, 1, conj_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_ff_f_data copysign_test_data[] =
{
TEST_ff_f (copysign, 0, 4, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, 0, -4, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_zero, 4, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_zero, -4, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, plus_infty, 0, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_infty, 0, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, 0, plus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, 0, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_zero, plus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, 0, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, 0, -qnan_value, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, minus_zero, -qnan_value, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
TEST_ff_f (copysign, qnan_value, minus_zero, -qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
TEST_ff_f (copysign, -qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
TEST_ff_f (copysign, -qnan_value, minus_zero, -qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
TEST_ff_f (copysign, min_value, min_subnorm_value, min_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, min_value, -min_subnorm_value, -min_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, -min_value, min_subnorm_value, min_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, -min_value, -min_subnorm_value, -min_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, min_subnorm_value, max_value, min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, min_subnorm_value, -max_value, -min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, -min_subnorm_value, max_value, min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, -min_subnorm_value, -max_value, -min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, max_value, min_value, max_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, max_value, -min_value, -max_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, -max_value, min_value, max_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (copysign, -max_value, -min_value, -max_value, NO_INEXACT_EXCEPTION),
};
static void
copysign_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (copysign, 1, copysign_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_f_f_data cos_test_data[] =
{
TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (cos, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (cos),
};
static void
cos_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (cos, 0, cos_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data cosh_test_data[] =
{
TEST_f_f (cosh, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (cosh, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (cosh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (cosh),
};
static void
cosh_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (cosh, 0, cosh_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_cc_c_data cpow_test_data[] =
{
TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_cc_c (cpow),
};
static void
cpow_test (void)
{
Test cpow in all rounding modes. This patch enables testing of cpow in all rounding modes using ALL_RM_TEST. There were two reasons this was previously deferred: * MPC has complicated rounding-mode-dependent rules for the signs of exact zero real or imaginary parts in the result of mpc_pow. Annex G does not impose any such requirements and I don't think glibc should try to implement any particular logic here. This patch adds support for gen-auto-libm-tests passing the IGNORE_ZERO_INF_SIGN flag to libm-test.inc. * Error accumulations in some tests in non-default rounding modes exceed the maximum error permitted in libm-test.inc. This patch marks the problem tests with xfail-rounding. (It might be possible to reduce the accumulations a bit by using round-to-nearest when cpow calls clog, but I don't think there's much point; the implementation approach for cpow is fundamentally deficient, as discussed in the existing bug for cpow inaccuracy which can reasonably be considered to cover these less-inaccurate cases as well. It's possible that the test "cpow 2 0 10 0" will also need xfail-rounding on some platforms.) Tested x86_64 and x86 and ulps updated accordingly. * math/gen-auto-libm-tests.c: Document use of ignore-zero-inf-sign. (input_flag_type): Add value flag_ignore_zero_inf_sign. (input_flags): Add ignore-zero-inf-sign. (output_for_one_input_case): Handle flag_ignore_zero_inf_sign. * math/gen-libm-test.pl (generate_testfile): Handle ignore-zero-inf-sign. * math/auto-libm-test-in: Mark some cpow tests with ignore-zero-inf-sign and some with xfail-rounding. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cpow_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-06-23 20:15:14 +00:00
ALL_RM_TEST (cpow, 0, cpow_test_data, RUN_TEST_LOOP_cc_c, END_COMPLEX);
}
static const struct test_c_c_data cproj_test_data[] =
{
TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_zero, qnan_value, plus_zero, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_zero, qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, qnan_value, plus_zero, qnan_value, plus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, qnan_value, minus_zero, qnan_value, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, 1.0, qnan_value, 1.0, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, -1.0, qnan_value, -1.0, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, qnan_value, 1.0, qnan_value, 1.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, qnan_value, -1.0, qnan_value, -1.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, plus_zero, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, minus_zero, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, plus_zero, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, minus_zero, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_zero, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_zero, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_zero, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_zero, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, 1.0, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, -1.0, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, 1.0, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, -1.0, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, 1.0, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, 1.0, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, -1.0, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, -1.0, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, qnan_value, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, plus_infty, -qnan_value, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, qnan_value, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, minus_infty, -qnan_value, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, qnan_value, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, qnan_value, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, -qnan_value, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, -qnan_value, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0, NO_INEXACT_EXCEPTION),
};
static void
cproj_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (cproj, 1, cproj_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_f_data creal_test_data[] =
{
TEST_c_f (creal, 0.0, 1.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_c_f (creal, minus_zero, 1.0, minus_zero, NO_INEXACT_EXCEPTION),
TEST_c_f (creal, qnan_value, 1.0, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_f (creal, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_c_f (creal, plus_infty, 1.0, plus_infty, NO_INEXACT_EXCEPTION),
TEST_c_f (creal, minus_infty, 1.0, minus_infty, NO_INEXACT_EXCEPTION),
TEST_c_f (creal, 2.0, 3.0, 2.0, NO_INEXACT_EXCEPTION),
};
static void
creal_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (creal, 1, creal_test_data, RUN_TEST_LOOP_c_f, END);
}
static const struct test_c_c_data csin_test_data[] =
{
TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty),
TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty),
TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty),
TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty),
TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csin, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty),
TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty),
TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty),
TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty),
TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value),
TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value),
TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value),
AUTO_TESTS_c_c (csin),
TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION),
TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION),
};
static void
csin_test (void)
{
ALL_RM_TEST (csin, 0, csin_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data csinh_test_data[] =
{
TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0),
TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0),
TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero),
TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty),
TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty),
TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty),
TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty),
TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0),
TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero),
TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value),
AUTO_TESTS_c_c (csinh),
TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION),
TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION),
};
static void
csinh_test (void)
{
ALL_RM_TEST (csinh, 0, csinh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data csqrt_test_data[] =
{
TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty),
TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty),
TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty),
TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty),
TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0),
TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0),
TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero),
TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero),
TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty),
TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty),
TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty),
TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty),
TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty),
TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty),
TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty),
TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty),
TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty),
TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty),
TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty),
TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty),
TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN),
TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value),
TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (csqrt),
};
static void
csqrt_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (csqrt, 0, csqrt_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data ctan_test_data[] =
{
TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0),
TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0),
TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0),
TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0),
TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0),
TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0),
TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0),
TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0),
TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value),
TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value),
TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (ctan),
};
2012-04-09 22:31:35 +00:00
static void
ctan_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (ctan, 0, ctan_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_c_c_data ctanh_test_data[] =
{
TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0),
TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0),
TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero),
TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero),
TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0),
TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0),
TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero),
TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero),
TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN),
TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0),
TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero),
TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_c_c (ctanh),
};
static void
ctanh_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (ctanh, 0, ctanh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static const struct test_f_f_data erf_test_data[] =
{
TEST_f_f (erf, plus_infty, 1),
TEST_f_f (erf, minus_infty, -1),
TEST_f_f (erf, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (erf),
};
static void
erf_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (erf, 0, erf_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data erfc_test_data[] =
{
TEST_f_f (erfc, plus_infty, 0.0),
TEST_f_f (erfc, minus_infty, 2.0),
TEST_f_f (erfc, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (erfc),
};
static void
erfc_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (erfc, 0, erfc_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data exp_test_data[] =
{
TEST_f_f (exp, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (exp, minus_infty, 0, NO_TEST_INLINE),
TEST_f_f (exp, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (exp),
};
static void
exp_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (exp, 0, exp_test_data, RUN_TEST_LOOP_f_f, END);
}
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
static const struct test_f_f_data exp10_test_data[] =
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
TEST_f_f (exp10, plus_infty, plus_infty),
TEST_f_f (exp10, minus_infty, 0),
TEST_f_f (exp10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
AUTO_TESTS_f_f (exp10),
};
static void
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
exp10_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (exp10, 0, exp10_test_data, RUN_TEST_LOOP_f_f, END);
}
static void
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
pow10_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
/* pow10 uses the same test data as exp10. */
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (pow10, 0, exp10_test_data, RUN_TEST_LOOP_f_f, END);
}
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
static const struct test_f_f_data exp2_test_data[] =
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
TEST_f_f (exp2, plus_infty, plus_infty),
TEST_f_f (exp2, minus_infty, 0),
TEST_f_f (exp2, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
AUTO_TESTS_f_f (exp2),
};
static void
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
exp2_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (exp2, 0, exp2_test_data, RUN_TEST_LOOP_f_f, END);
}
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
static const struct test_f_f_data expm1_test_data[] =
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
TEST_f_f (expm1, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (expm1, minus_infty, -1, NO_TEST_INLINE),
TEST_f_f (expm1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
AUTO_TESTS_f_f (expm1),
};
static void
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
expm1_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (expm1, 0, expm1_test_data, RUN_TEST_LOOP_f_f, END);
}
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
static const struct test_f_f_data fabs_test_data[] =
{
TEST_f_f (fabs, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_f (fabs, minus_zero, 0, NO_INEXACT_EXCEPTION),
2009-05-16 02:53:09 +00:00
TEST_f_f (fabs, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (fabs, minus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (fabs, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
TEST_f_f (fabs, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
TEST_f_f (fabs, 38.0, 38.0, NO_INEXACT_EXCEPTION),
TEST_f_f (fabs, -M_El, M_El, NO_INEXACT_EXCEPTION),
};
static void
fabs_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (fabs, 1, fabs_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_ff_f_data fdim_test_data[] =
{
TEST_ff_f (fdim, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, 9, 0, 9, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, 0, 9, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, -9, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, 0, -9, 9, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, plus_infty, 9, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, plus_infty, -9, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, minus_infty, 9, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, minus_infty, -9, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, 9, minus_infty, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, -9, minus_infty, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, 9, plus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, -9, plus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, 9, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, -9, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, qnan_value, 9, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, qnan_value, -9, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, plus_infty, plus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, plus_infty, minus_infty, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, minus_infty, plus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (fdim, minus_infty, minus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
};
static void
fdim_test (void)
{
ALL_RM_TEST (fdim, 1, fdim_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_f_f_data floor_test_data[] =
{
TEST_f_f (floor, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (floor, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_f_f (floor, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (floor, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (floor, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* Bug 15479: spurious "inexact" exception may occur. */
TEST_f_f (floor, M_PIl, 3.0),
TEST_f_f (floor, -M_PIl, -4.0),
TEST_f_f (floor, 0.1, 0.0),
TEST_f_f (floor, 0.25, 0.0),
TEST_f_f (floor, 0.625, 0.0),
TEST_f_f (floor, -0.1, -1.0),
TEST_f_f (floor, -0.25, -1.0),
TEST_f_f (floor, -0.625, -1.0),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L),
TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L),
TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L),
TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L),
TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L),
TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L),
TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L),
TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L),
TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L),
TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L),
TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L),
TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L),
TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L),
TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L),
TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L),
TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L),
TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L),
TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L),
TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L),
TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L),
TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L),
TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L),
TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L),
TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L),
TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L),
TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L),
TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L),
TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L),
TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L),
TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L),
TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L),
TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L),
TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L),
TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L),
TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L),
TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L),
TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L),
TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L),
TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L),
TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L),
TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L),
TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L),
TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L),
TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L),
TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
#endif
};
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
static void
floor_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (floor, 1, floor_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_fff_f_data fma_test_data[] =
{
TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value),
TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value),
TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK),
TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_fff_f (fma, -max_value, -max_value, minus_infty, minus_infty),
TEST_fff_f (fma, max_value / 2, max_value / 2, minus_infty, minus_infty),
TEST_fff_f (fma, -max_value, max_value, plus_infty, plus_infty),
TEST_fff_f (fma, max_value / 2, -max_value / 4, plus_infty, plus_infty),
TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty),
TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty),
TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty),
TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_fff_f (fma),
};
static void
fma_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (fma, 1, fma_test_data, RUN_TEST_LOOP_fff_f, END);
}
static const struct test_ff_f_data fmax_test_data[] =
{
TEST_ff_f (fmax, 0, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, 9, 0, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, 0, 9, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, -9, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, 0, -9, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, plus_infty, 9, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, 0, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, -9, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, plus_infty, -9, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, minus_infty, 9, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, minus_infty, -9, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, 9, minus_infty, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, -9, minus_infty, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, 0, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, 9, qnan_value, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, -9, qnan_value, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, qnan_value, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, qnan_value, 9, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, qnan_value, -9, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
};
static void
fmax_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (fmax, 1, fmax_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_ff_f_data fmin_test_data[] =
{
TEST_ff_f (fmin, 0, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, 9, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, 0, 9, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, -9, 0, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, 0, -9, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, plus_infty, 9, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, 9, plus_infty, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, plus_infty, -9, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, -9, plus_infty, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, minus_infty, 9, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, minus_infty, -9, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, 9, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, -9, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, 0, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, 9, qnan_value, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, -9, qnan_value, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, qnan_value, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, qnan_value, 9, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, qnan_value, -9, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
};
static void
fmin_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (fmin, 1, fmin_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_ff_f_data fmod_test_data[] =
{
/* fmod (+0, y) == +0 for y != 0. */
TEST_ff_f (fmod, 0, 3, 0, NO_INEXACT_EXCEPTION),
/* fmod (-0, y) == -0 for y != 0. */
TEST_ff_f (fmod, minus_zero, 3, minus_zero, NO_INEXACT_EXCEPTION),
/* fmod (+inf, y) == qNaN plus invalid exception. */
TEST_ff_f (fmod, plus_infty, 3, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (fmod, plus_infty, -1.1L, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
/* fmod (-inf, y) == qNaN plus invalid exception. */
TEST_ff_f (fmod, minus_infty, 3, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (fmod, minus_infty, -1.1L, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
/* fmod (x, +0) == qNaN plus invalid exception. */
TEST_ff_f (fmod, 3, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (fmod, -1.1L, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
/* fmod (x, -0) == qNaN plus invalid exception. */
TEST_ff_f (fmod, 3, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (fmod, -1.1L, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
/* fmod (x, +inf) == x for x not infinite. */
TEST_ff_f (fmod, 3.0, plus_infty, 3.0, NO_INEXACT_EXCEPTION),
/* fmod (x, -inf) == x for x not infinite. */
TEST_ff_f (fmod, 3.0, minus_infty, 3.0, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, 6.5, 2.25L, 2.0L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, -6.5, 2.25L, -2.0L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, 6.5, -2.25L, 2.0L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, -6.5, -2.25L, -2.0L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero, NO_INEXACT_EXCEPTION),
#ifndef TEST_FLOAT
TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero, NO_INEXACT_EXCEPTION),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero, NO_INEXACT_EXCEPTION),
PowerPC floating point little-endian [4 of 15] http://sourceware.org/ml/libc-alpha/2013-08/msg00084.html Another batch of ieee854 macros and union replacement. These four files also have bugs fixed with this patch. The fact that the two doubles in an IBM long double may have different signs means that negation and absolute value operations can't just twiddle one sign bit as you can with ieee864 style extended double. fmodl, remainderl, erfl and erfcl all had errors of this type. erfl also returned +1 for large magnitude negative input where it should return -1. The hypotl error is innocuous since the value adjusted twice is only used as a flag. The e_hypotl.c tests for large "a" and small "b" are mutually exclusive because we've already exited when x/y > 2**120. That allows some further small simplifications. [BZ #15734], [BZ #15735] * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Rewrite all uses of ieee875 long double macros and unions. Simplify test for 0.0L. Correct |x|<|y| and |x|=|y| test. Use ldbl_extract_mantissa value for ix,iy exponents. Properly normalize after ldbl_extract_mantissa, and don't add hidden bit already handled. Don't treat low word of ieee854 mantissa like low word of IBM long double and mask off bit when testing for zero. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Rewrite all uses of ieee875 long double macros and unions. Simplify tests for 0.0L and inf. Correct double adjustment of k. Delete dead code adjusting ha,hb. Simplify code setting kld. Delete two600 and two1022, instead use their values. Recognise that tests for large "a" and small "b" are mutually exclusive. Rename vars. Comment. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c (__ieee754_remainderl): Rewrite all uses of ieee875 long double macros and unions. Simplify test for 0.0L and nan. Correct negation. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c (__erfl): Rewrite all uses of ieee875 long double macros and unions. Correct output for large magnitude x. Correct absolute value calculation. (__erfcl): Likewise. * math/libm-test.inc: Add tests for errors discovered in IBM long double versions of fmodl, remainderl, erfl and erfcl.
2013-08-17 08:55:51 +00:00
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 56
TEST_ff_f (fmod, -0x1.00000000000004p+0L, 0x1.fffffffffffff8p-1L, -0x1p-53L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, 0x1.fffffffffffffap-1L, 0x1.fffffffffffff8p-1L, 0x1p-56L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, -0x1.fffffffffffffap-1L, 0x1.fffffffffffff8p-1L, -0x1p-56L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, 0x1.fffffffffffffap-1L, -0x1.fffffffffffff8p-1L, 0x1p-56L, NO_INEXACT_EXCEPTION),
TEST_ff_f (fmod, -0x1.fffffffffffffap-1L, -0x1.fffffffffffff8p-1L, -0x1p-56L, NO_INEXACT_EXCEPTION),
#endif
};
static void
fmod_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (fmod, 1, fmod_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_f_i_data fpclassify_test_data[] =
{
TEST_f_i (fpclassify, qnan_value, FP_NAN, NO_INEXACT_EXCEPTION),
TEST_f_i (fpclassify, plus_infty, FP_INFINITE, NO_INEXACT_EXCEPTION),
TEST_f_i (fpclassify, minus_infty, FP_INFINITE, NO_INEXACT_EXCEPTION),
TEST_f_i (fpclassify, plus_zero, FP_ZERO, NO_INEXACT_EXCEPTION),
TEST_f_i (fpclassify, minus_zero, FP_ZERO, NO_INEXACT_EXCEPTION),
TEST_f_i (fpclassify, 1000, FP_NORMAL, NO_INEXACT_EXCEPTION),
TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL, NO_INEXACT_EXCEPTION),
};
static void
fpclassify_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (fpclassify, 1, fpclassify_test_data, RUN_TEST_LOOP_f_i_tg, END);
}
static const struct test_f_f1_data frexp_test_data[] =
{
TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, 0.0, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, 12.8L, 0.8L, 4, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5, NO_INEXACT_EXCEPTION),
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
TEST_fI_f1 (frexp, 1.0L-0x1p-106L, 1.0L-0x1p-106L, 0, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, 1.0L, 0.5L, 1, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, 1.0L+0x1p-105L, 0.5L+0x1p-106L, 1, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, -1.0L+0x1p-106L, -1.0L+0x1p-106L, 0, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, -1.0L, -0.5L, 1, NO_INEXACT_EXCEPTION),
TEST_fI_f1 (frexp, -1.0L-0x1p-105L, -0.5L-0x1p-106L, 1, NO_INEXACT_EXCEPTION),
#endif
};
static void
frexp_test (void)
{
int x;
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (frexp, 1, frexp_test_data, RUN_TEST_LOOP_fI_f1, END, x);
}
static const struct test_ff_f_data hypot_test_data[] =
{
TEST_ff_f (hypot, plus_infty, 1, plus_infty),
TEST_ff_f (hypot, minus_infty, 1, plus_infty),
TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_ff_f (hypot),
};
static void
hypot_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (hypot, 0, hypot_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_f_i_data ilogb_test_data[] =
{
TEST_f_i (ilogb, 1, 0, NO_INEXACT_EXCEPTION),
TEST_f_i (ilogb, M_El, 1, NO_INEXACT_EXCEPTION),
TEST_f_i (ilogb, 1024, 10, NO_INEXACT_EXCEPTION),
TEST_f_i (ilogb, -2000, 10, NO_INEXACT_EXCEPTION),
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 57
TEST_f_i (ilogb, 0x1.ffffffffffffffp1L, 1, NO_INEXACT_EXCEPTION),
TEST_f_i (ilogb, -0x1.ffffffffffffffp1L, 1, NO_INEXACT_EXCEPTION),
#endif
/* ilogb (0.0) == FP_ILOGB0 plus invalid exception */
TEST_f_i (ilogb, 0.0, FP_ILOGB0, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
/* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception */
TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
/* ilogb (inf) == INT_MAX plus invalid exception */
TEST_f_i (ilogb, plus_infty, INT_MAX, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
/* ilogb (-inf) == INT_MAX plus invalid exception */
TEST_f_i (ilogb, minus_infty, INT_MAX, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
};
static void
ilogb_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (ilogb, 1, ilogb_test_data, RUN_TEST_LOOP_f_i, END);
}
static const struct test_f_i_data isfinite_test_data[] =
{
TEST_f_b (isfinite, 0, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (isfinite, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (isfinite, 10, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (isfinite, min_subnorm_value, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (isfinite, plus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isfinite, minus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isfinite, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
isfinite_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isfinite, 1, isfinite_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static void
finite_test (void)
{
/* finite uses the same test data as isfinite. */
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (finite, 1, isfinite_test_data, RUN_TEST_LOOP_f_b, END);
}
static const struct test_ff_i_data isgreater_test_data[] =
{
TEST_ff_i (isgreater, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, minus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, minus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, plus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, plus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, plus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, qnan_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, qnan_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreater, qnan_value, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
isgreater_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isgreater, 1, isgreater_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_ff_i_data isgreaterequal_test_data[] =
{
TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
isgreaterequal_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isgreaterequal, 1, isgreaterequal_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_f_i_data isinf_test_data[] =
{
TEST_f_b (isinf, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isinf, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isinf, 10, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isinf, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isinf, plus_infty, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (isinf, minus_infty, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (isinf, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
isinf_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isinf, 1, isinf_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_ff_i_data isless_test_data[] =
{
TEST_ff_i (isless, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, minus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, minus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, plus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, plus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, plus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, qnan_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, qnan_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isless, qnan_value, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
isless_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isless, 1, isless_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_ff_i_data islessequal_test_data[] =
{
TEST_ff_i (islessequal, minus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, minus_zero, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, minus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, plus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, plus_zero, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, plus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, qnan_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, qnan_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessequal, qnan_value, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
islessequal_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (islessequal, 1, islessequal_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_ff_i_data islessgreater_test_data[] =
{
TEST_ff_i (islessgreater, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, minus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, minus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, plus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, plus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, plus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, qnan_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, qnan_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (islessgreater, qnan_value, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
islessgreater_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (islessgreater, 1, islessgreater_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_f_i_data isnan_test_data[] =
{
TEST_f_b (isnan, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnan, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnan, 10, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnan, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnan, plus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnan, minus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnan, qnan_value, 1, NO_INEXACT_EXCEPTION),
};
static void
isnan_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isnan, 1, isnan_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_f_i_data isnormal_test_data[] =
{
TEST_f_b (isnormal, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnormal, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnormal, 10, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (isnormal, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnormal, plus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnormal, minus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (isnormal, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
isnormal_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isnormal, 1, isnormal_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_f_i_data issignaling_test_data[] =
{
TEST_f_b (issignaling, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (issignaling, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (issignaling, 10, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (issignaling, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (issignaling, plus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (issignaling, minus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (issignaling, qnan_value, 0, NO_INEXACT_EXCEPTION),
};
static void
issignaling_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (issignaling, 1, issignaling_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_ff_i_data isunordered_test_data[] =
{
TEST_ff_i (isunordered, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, minus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, minus_zero, qnan_value, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, plus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, plus_zero, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, plus_zero, qnan_value, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, qnan_value, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, qnan_value, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1, NO_INEXACT_EXCEPTION),
TEST_ff_i (isunordered, qnan_value, qnan_value, 1, NO_INEXACT_EXCEPTION),
};
static void
isunordered_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (isunordered, 1, isunordered_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_f_f_data j0_test_data[] =
{
/* j0 is the Bessel function of the first kind of order 0 */
TEST_f_f (j0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (j0, plus_infty, 0),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (j0),
};
static void
j0_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (j0, 0, j0_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data j1_test_data[] =
{
/* j1 is the Bessel function of the first kind of order 1 */
TEST_f_f (j1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (j1, plus_infty, 0),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (j1),
};
static void
j1_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (j1, 0, j1_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_if_f_data jn_test_data[] =
{
/* jn is the Bessel function of the first kind of order n. */
/* jn (0, x) == j0 (x) */
TEST_if_f (jn, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_if_f (jn, 0, plus_infty, 0),
/* jn (1, x) == j1 (x) */
TEST_if_f (jn, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_if_f (jn, 1, plus_infty, 0),
/* jn (3, x) */
TEST_if_f (jn, 3, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_if_f (jn, 3, plus_infty, 0),
/* jn (10, x) */
TEST_if_f (jn, 10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_if_f (jn, 10, plus_infty, 0),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_if_f (jn),
};
static void
jn_test (void)
{
Use round-to-nearest internally in jn, test with ALL_RM_TEST (bug 18602). Some existing jn tests, if run in non-default rounding modes, produce errors above those accepted in glibc, which causes problems for moving tests of jn to use ALL_RM_TEST. This patch makes jn set rounding to-nearest internally, as was done for yn some time ago, then computes the appropriate underflowing value for results that underflowed to zero in to-nearest, and moves the tests to ALL_RM_TEST. It does nothing about the general inaccuracy of Bessel function implementations in glibc, though it should make jn more accurate on average in non-default rounding modes through reduced error accumulation. The recomputation of results that underflowed to zero should as a side-effect fix some cases of bug 16559, where jn just used an exact zero, but that is *not* the goal of this patch and other cases of that bug remain unfixed. (Most of the changes in the patch are reindentation to add new scopes for SET_RESTORE_ROUND*.) Tested for x86_64, x86, powerpc and mips64. [BZ #16559] [BZ #18602] * sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_jn): Set round-to-nearest internally then recompute results that underflowed to zero in the original rounding mode. * sysdeps/ieee754/flt-32/e_jnf.c (__ieee754_jnf): Likewise. * sysdeps/ieee754/ldbl-128/e_jnl.c (__ieee754_jnl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Likewise. * sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_jnl): Likewise * math/libm-test.inc (jn_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 21:46:02 +00:00
ALL_RM_TEST (jn, 0, jn_test_data, RUN_TEST_LOOP_if_f, END);
}
static const struct test_f_f1_data lgamma_test_data[] =
{
TEST_f_f1 (lgamma, plus_infty, plus_infty, 1),
TEST_f_f1 (lgamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f1 (lgamma, minus_zero, plus_infty, -1, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f1 (lgamma, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
/* lgamma (x) == +inf plus divide by zero exception for integer x <= 0. */
TEST_f_f1 (lgamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f1 (lgamma, minus_infty, plus_infty, IGNORE),
TEST_f_f1 (lgamma, -max_value, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f1 (lgamma),
};
static void
lgamma_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (lgamma, 0, lgamma_test_data, RUN_TEST_LOOP_f_f1, END, signgam);
}
static void
gamma_test (void)
{
/* gamma uses the same test data as lgamma. */
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (gamma, 0, lgamma_test_data, RUN_TEST_LOOP_f_f1, END, signgam);
}
static const struct test_f_l_data lrint_test_data[] =
{
TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION),
TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION),
TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION),
TEST_f_l (lrint, -0.2L, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION),
TEST_f_l (lrint, 0.5L, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION),
TEST_f_l (lrint, -0.5L, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION),
TEST_f_l (lrint, 0.8L, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION),
TEST_f_l (lrint, -0.8L, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_l (lrint, 1.4L, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 2, INEXACT_EXCEPTION),
TEST_f_l (lrint, -1.4L, -2, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_l (lrint, 8388600.3L, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388601, INEXACT_EXCEPTION),
TEST_f_l (lrint, -8388600.3L, -8388601, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION),
#ifndef TEST_FLOAT
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_l (lrint, 1071930.0008, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071931, INEXACT_EXCEPTION),
TEST_f_l (lrint, 1073741824.01, 1073741824, INEXACT_EXCEPTION, 1073741824, INEXACT_EXCEPTION, 1073741824, INEXACT_EXCEPTION, 1073741825, INEXACT_EXCEPTION),
# if LONG_MAX > 281474976710656 && defined TEST_LDOUBLE
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_l (lrint, 281474976710656.025L, 281474976710656, INEXACT_EXCEPTION, 281474976710656, INEXACT_EXCEPTION, 281474976710656, INEXACT_EXCEPTION, 281474976710657, INEXACT_EXCEPTION),
# endif
#endif
};
static void
lrint_test (void)
{
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
ALL_RM_TEST (lrint, 1, lrint_test_data, RUN_TEST_LOOP_f_l, END);
}
static const struct test_f_L_data llrint_test_data[] =
{
TEST_f_L (llrint, plus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_L (llrint, minus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_L (llrint, qnan_value, IGNORE, INVALID_EXCEPTION),
TEST_f_L (llrint, 0.0, 0, NO_INEXACT_EXCEPTION),
TEST_f_L (llrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 0.2L, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION),
TEST_f_L (llrint, -0.2L, -1, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION, 0, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 1.4L, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 1, INEXACT_EXCEPTION, 2, INEXACT_EXCEPTION),
TEST_f_L (llrint, -1.4L, -2, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION, -1, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 8388600.3L, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388600, INEXACT_EXCEPTION, 8388601, INEXACT_EXCEPTION),
TEST_f_L (llrint, -8388600.3L, -8388601, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION, -8388600, INEXACT_EXCEPTION),
#ifndef TEST_FLOAT
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 1071930.0008, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071930, INEXACT_EXCEPTION, 1071931, INEXACT_EXCEPTION),
#endif
/* Test boundary conditions. */
/* 0x1FFFFF */
TEST_f_L (llrint, 2097151.0,2097151LL, NO_INEXACT_EXCEPTION),
/* 0x800000 */
TEST_f_L (llrint, 8388608.0, 8388608LL, NO_INEXACT_EXCEPTION),
/* 0x1000000 */
TEST_f_L (llrint, 16777216.0, 16777216LL, NO_INEXACT_EXCEPTION),
/* 0x20000000000 */
TEST_f_L (llrint, 2199023255552.0, 2199023255552LL, NO_INEXACT_EXCEPTION),
/* 0x40000000000 */
TEST_f_L (llrint, 4398046511104.0, 4398046511104LL, NO_INEXACT_EXCEPTION),
/* 0x1000000000000 */
TEST_f_L (llrint, 281474976710656.0, 281474976710656LL, NO_INEXACT_EXCEPTION),
/* 0x10000000000000 */
TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL, NO_INEXACT_EXCEPTION),
/* 0x10000080000000 */
TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL, NO_INEXACT_EXCEPTION),
/* 0x20000000000000 */
TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL, NO_INEXACT_EXCEPTION),
/* 0x80000000000000 */
TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL, NO_INEXACT_EXCEPTION),
/* 0x100000000000000 */
TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL, NO_INEXACT_EXCEPTION),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
#ifdef TEST_LDOUBLE
/* The input can only be represented in long double. */
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370498LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370498LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL, INEXACT_EXCEPTION, -4503599627370498LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
# if LDBL_MANT_DIG > 100
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370498LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL, INEXACT_EXCEPTION, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370494LL, INEXACT_EXCEPTION, 4503599627370495LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370495LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION, 4503599627370496LL, INEXACT_EXCEPTION, 4503599627370497LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION, -4503599627370494LL, INEXACT_EXCEPTION, -4503599627370494LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION, -4503599627370495LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370497LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION, -4503599627370496LL, INEXACT_EXCEPTION),
# endif
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740991LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740994LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740994LL, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740991LL, INEXACT_EXCEPTION, -9007199254740991LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL, INEXACT_EXCEPTION, -9007199254740994LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION),
# if LDBL_MANT_DIG > 100
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL, INEXACT_EXCEPTION, 9007199254740991LL, INEXACT_EXCEPTION, 9007199254740991LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740994LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740991LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740992LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740994LL, INEXACT_EXCEPTION, 9007199254740993LL, INEXACT_EXCEPTION, 9007199254740994LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740991LL, INEXACT_EXCEPTION, -9007199254740991LL, INEXACT_EXCEPTION, -9007199254740991LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740991LL, INEXACT_EXCEPTION, -9007199254740991LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION, -9007199254740992LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL, INEXACT_EXCEPTION, -9007199254740994LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION, -9007199254740993LL, INEXACT_EXCEPTION),
# endif
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL, INEXACT_EXCEPTION, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927935LL, INEXACT_EXCEPTION, 72057594037927936LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927937LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927937LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927937LL, INEXACT_EXCEPTION, 72057594037927936LL, INEXACT_EXCEPTION, 72057594037927937LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL, INEXACT_EXCEPTION, 72057594037927938LL, INEXACT_EXCEPTION, 72057594037927937LL, INEXACT_EXCEPTION, 72057594037927938LL, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION, -72057594037927935LL, INEXACT_EXCEPTION, -72057594037927935LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL, INEXACT_EXCEPTION, -72057594037927937LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION, -72057594037927936LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL, INEXACT_EXCEPTION, -72057594037927938LL, INEXACT_EXCEPTION, -72057594037927937LL, INEXACT_EXCEPTION, -72057594037927937LL, INEXACT_EXCEPTION),
# if LDBL_MANT_DIG > 100
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL, INEXACT_EXCEPTION, 9223372036854775806LL, INEXACT_EXCEPTION, 9223372036854775805LL, INEXACT_EXCEPTION, 9223372036854775806LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION, -9223372036854775805LL, INEXACT_EXCEPTION, -9223372036854775805LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL, NO_INEXACT_EXCEPTION),
TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL, INEXACT_EXCEPTION, 9223372036854775806LL, INEXACT_EXCEPTION, 9223372036854775806LL, INEXACT_EXCEPTION, 9223372036854775807LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L, INEXACT_EXCEPTION, 9223372036854775806L, INEXACT_EXCEPTION, 9223372036854775806L, INEXACT_EXCEPTION, 9223372036854775807L, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL, INEXACT_EXCEPTION, 9223372036854775807LL, INEXACT_EXCEPTION, 9223372036854775806LL, INEXACT_EXCEPTION, 9223372036854775807LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL, INEXACT_EXCEPTION, -9223372036854775807LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION, -9223372036854775806LL, INEXACT_EXCEPTION),
TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL, NO_INEXACT_EXCEPTION),
TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL, NO_INEXACT_EXCEPTION),
# endif
#endif
};
static void
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
llrint_test (void)
{
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
ALL_RM_TEST (llrint, 1, llrint_test_data, RUN_TEST_LOOP_f_L, END);
}
static const struct test_f_f_data log_test_data[] =
{
TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log, plus_infty, plus_infty),
TEST_f_f (log, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (log),
};
static void
log_test (void)
{
ALL_RM_TEST (log, 0, log_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data log10_test_data[] =
{
TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
/* log10 (x) == qNaN plus invalid exception if x < 0. */
TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log10, plus_infty, plus_infty),
TEST_f_f (log10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (log10),
};
static void
log10_test (void)
{
ALL_RM_TEST (log10, 0, log10_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data log1p_test_data[] =
{
Set errno for log1p on pole/domain error. According to bug 6792, errno is not set to ERANGE/EDOM by calling log1p/log1pf/log1pl with x = -1 or x < -1. This patch adds a wrapper which sets errno in those cases and returns the value of the existing __log1p function. The log1p is now an alias to the wrapper function instead of __log1p. The files in sysdeps are reflecting these changes. The ia64 implementation sets errno by itself, thus the wrapper-file is empty. The libm-test is adjusted for log1p-tests to check errno. [BZ #6792] * math/w_log1p.c: New file. * math/w_log1pf.c: Likewise. * math/w_log1pl.c: Likewise. * math/Makefile (libm-calls): Add w_log1p. * math/s_log1pl.c (log1pl): Remove weak_alias. * sysdeps/i386/fpu/s_log1p.S (log1p): Likewise. * sysdeps/i386/fpu/s_log1pf.S (log1pf): Likewise. * sysdeps/i386/fpu/s_log1pl.S (log1pl): Likewise. * sysdeps/x86_64/fpu/s_log1pl.S (log1pl): Likewise. * sysdeps/ieee754/dbl-64/s_log1p.c (log1p): Likewise. [NO_LONG_DOUBLE] (log1pl): Likewise. * sysdeps/ieee754/flt-32/s_log1pf.c (log1pf): Likewise. * sysdeps/ieee754/ldbl-128/s_log1pl.c (log1pl): Likewise. * sysdeps/ieee754/ldbl-64-128/s_log1pl.c (log1p): Remove long_double_symbol. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (log1pl): Likewise. * sysdeps/ieee754/ldbl-64-128/w_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_log1pl.c: Likewise. * sysdeps/m68k/m680x0/fpu/s_log1p.c: Define empty weak_alias to remove weak_alias for corresponding log1p function. * sysdeps/m68k/m680x0/fpu/s_log1pf.c: Likewise. * sysdeps/m68k/m680x0/fpu/s_log1pl.c: Likewise. * sysdeps/ia64/fpu/w_log1p.c: New file. * sysdeps/ia64/fpu/w_log1pf.c: Likewise. * sysdeps/ia64/fpu/w_log1pl.c: Likewise. * math/libm-test.inc (log1p_test_data): Add errno expectations.
2015-04-13 19:16:56 +00:00
TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log1p, plus_infty, plus_infty),
TEST_f_f (log1p, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (log1p),
};
static void
log1p_test (void)
{
Relax gen-auto-libm-tests may-underflow rules, test log1p in all rounding modes. gen-auto-libm-tests presently allows but does not require underflow exceptions for results with magnitude in the range (greatest subnormal, least normal]. In some cases, the magnitude of the exact result is very slightly above the least normal, but rounding in the implementation results in it effectively computing an infinite-precision result that is slightly below the least normal, so raising an underflow exception. This is in accordance with the documented accuracy goals, but results in testsuite failures. This patch changes the logic to allow underflows when the mathematical result is up to 0.5ulp above the least normal (so in any case where the round-to-nearest result is the least normal). Ideally underflows in all these cases would be accepted only when an underflow with the actual result is consistent with the rounding mode (in FE_TOWARDZERO mode, a return value of the least normal implies that the infinite-precision result did not underflow so there should be no underflow exception, for example), so as to match the documented goals more precisely - whereas at present the tests for exceptions are completely independent of the tests of the returned values. (The same applies to overflow exceptions as well - they too should be checked for consistency with the result, as in FE_TOWARDZERO mode a result 1ulp below the largest finite value should be inconsistent with an overflow exception and cause a failure with overflow rather than simply being considered a 1ulp error when overflow is expected.) But the present patch at least deals with the cases causing spurious failures so that (a) certain existing tests no longer need to be marked as having spurious exceptions (such markings in auto-libm-test-in end up applying to more cases than just those they are needed for) and (b) log1p can be tested in all rounding modes without introducing more such failures. This patch duly moves tests of log1p to ALL_RM_TEST. Tested x86_64 and x86 and ulps updated accordingly. [BZ #16357] [BZ #16599] * math/gen-auto-libm-tests.c (fp_format_desc): Add field min_plus_half. (fp_formats): Update initializers. (init_fp_formats): Initialize new field. (output_for_one_input_case): Allow underflow for results up to min_plus_half. * math/libm-test.inc (log1p_test): Use ALL_RM_TEST. * math/auto-libm-test-in: Don't mark some underflows from asin and atanh as spurious. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-25 12:26:06 +00:00
ALL_RM_TEST (log1p, 0, log1p_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data log2_test_data[] =
{
TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log2, plus_infty, plus_infty),
TEST_f_f (log2, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (log2),
};
static void
log2_test (void)
{
ALL_RM_TEST (log2, 0, log2_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data logb_test_data[] =
{
TEST_f_f (logb, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, minus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0, minus_infty, NO_INEXACT_EXCEPTION|DIVIDE_BY_ZERO_EXCEPTION),
TEST_f_f (logb, minus_zero, minus_infty, NO_INEXACT_EXCEPTION|DIVIDE_BY_ZERO_EXCEPTION),
TEST_f_f (logb, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 1, 0, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, M_El, 1, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 1024, 10, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, -2000, 10, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.1p-127, -131, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.01p-127, -135, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.011p-127, -135, NO_INEXACT_EXCEPTION),
#ifndef TEST_FLOAT
TEST_f_f (logb, 0x0.8p-1022, -1023, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.1p-1022, -1026, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.00111p-1022, -1034, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.00001p-1022, -1042, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.000011p-1022, -1042, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x0.0000000000001p-1022, -1074, NO_INEXACT_EXCEPTION),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
TEST_f_f (logb, 0x1p-16400L, -16400, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, 0x.00000000001p-16382L, -16426, NO_INEXACT_EXCEPTION),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 57
TEST_f_f (logb, 0x1.ffffffffffffffp1L, 1, NO_INEXACT_EXCEPTION),
TEST_f_f (logb, -0x1.ffffffffffffffp1L, 1, NO_INEXACT_EXCEPTION),
#endif
};
static void
logb_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (logb, 1, logb_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_l_data lround_test_data[] =
{
TEST_f_l (lround, plus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_l (lround, minus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_l (lround, qnan_value, IGNORE, INVALID_EXCEPTION),
TEST_f_l (lround, 0, 0),
TEST_f_l (lround, minus_zero, 0),
TEST_f_l (lround, 0.2L, 0.0),
TEST_f_l (lround, -0.2L, 0),
TEST_f_l (lround, 0.5, 1),
TEST_f_l (lround, -0.5, -1),
TEST_f_l (lround, 0.8L, 1),
TEST_f_l (lround, -0.8L, -1),
TEST_f_l (lround, 1.5, 2),
TEST_f_l (lround, -1.5, -2),
TEST_f_l (lround, 22514.5, 22515),
TEST_f_l (lround, -22514.5, -22515),
TEST_f_l (lround, 1071930.0008, 1071930),
#ifndef TEST_FLOAT
TEST_f_l (lround, 1073741824.01, 1073741824),
# if LONG_MAX > 281474976710656
TEST_f_l (lround, 281474976710656.025, 281474976710656),
TEST_f_l (lround, 18014398509481974, 18014398509481974),
# endif
TEST_f_l (lround, 2097152.5, 2097153),
TEST_f_l (lround, -2097152.5, -2097153),
/* nextafter(0.5,-1) */
TEST_f_l (lround, 0x1.fffffffffffffp-2, 0),
/* nextafter(-0.5,1) */
TEST_f_l (lround, -0x1.fffffffffffffp-2, 0),
#else
/* nextafter(0.5,-1) */
TEST_f_l (lround, 0x1.fffffp-2, 0),
/* nextafter(-0.5,1) */
TEST_f_l (lround, -0x1.fffffp-2, 0),
TEST_f_l (lround, 0x1.fffffep+23, 16777215),
TEST_f_l (lround, -0x1.fffffep+23, -16777215),
#endif
};
static void
lround_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (lround, 1, lround_test_data, RUN_TEST_LOOP_f_l, END);
}
static const struct test_f_L_data llround_test_data[] =
{
TEST_f_L (llround, plus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_L (llround, minus_infty, IGNORE, INVALID_EXCEPTION),
TEST_f_L (llround, qnan_value, IGNORE, INVALID_EXCEPTION),
TEST_f_L (llround, 0, 0),
TEST_f_L (llround, minus_zero, 0),
TEST_f_L (llround, 0.2L, 0.0),
TEST_f_L (llround, -0.2L, 0),
TEST_f_L (llround, 0.5, 1),
TEST_f_L (llround, -0.5, -1),
TEST_f_L (llround, 0.8L, 1),
TEST_f_L (llround, -0.8L, -1),
TEST_f_L (llround, 1.5, 2),
TEST_f_L (llround, -1.5, -2),
TEST_f_L (llround, 22514.5, 22515),
TEST_f_L (llround, -22514.5, -22515),
TEST_f_L (llround, 1071930.0008, 1071930),
#ifndef TEST_FLOAT
TEST_f_L (llround, 2097152.5, 2097153),
TEST_f_L (llround, -2097152.5, -2097153),
TEST_f_L (llround, 34359738368.5, 34359738369ll),
TEST_f_L (llround, -34359738368.5, -34359738369ll),
TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL),
#endif
/* Test boundary conditions. */
/* 0x1FFFFF */
TEST_f_L (llround, 2097151.0, 2097151LL),
/* 0x800000 */
TEST_f_L (llround, 8388608.0, 8388608LL),
/* 0x1000000 */
TEST_f_L (llround, 16777216.0, 16777216LL),
/* 0x20000000000 */
TEST_f_L (llround, 2199023255552.0, 2199023255552LL),
/* 0x40000000000 */
TEST_f_L (llround, 4398046511104.0, 4398046511104LL),
/* 0x1000000000000 */
TEST_f_L (llround, 281474976710656.0, 281474976710656LL),
/* 0x10000000000000 */
TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL),
/* 0x10000080000000 */
TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL),
/* 0x20000000000000 */
TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL),
/* 0x80000000000000 */
TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL),
/* 0x100000000000000 */
TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL),
Update. 2001-06-04 Bruno Haible <haible@clisp.cons.org> * iconv/loop.c (UNICODE_TAG_HANDLER): New macro. * iconv/gconv_simple.c (__gconv_transform_internal_ascii): Invoke UNICODE_TAG_HANDLER. (__gconv_transform_internal_ucs2): Likewise. (__gconv_transform_internal_ucs2reverse): Likewise. * iconvdata/8bit-gap.c (BODY for TO_LOOP): Invoke UNICODE_TAG_HANDLER. * iconvdata/8bit-generic.c (BODY for TO_LOOP): Likewise. * iconvdata/ansi_x3.110.c (BODY for TO_LOOP): Likewise. * iconvdata/big5.c (BODY for TO_LOOP): Likewise. * iconvdata/big5hkscs.c (BODY for TO_LOOP): Likewise. * iconvdata/cp1255.c (BODY for TO_LOOP): Likewise. * iconvdata/cp1258.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-cn.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-jp.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-kr.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-tw.c (BODY for TO_LOOP): Likewise. * iconvdata/gbk.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm930.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm932.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm933.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm935.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm937.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm939.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm943.c (BODY for TO_LOOP): Likewise. * iconvdata/iso646.c (BODY for TO_LOOP): Likewise. * iconvdata/iso8859-1.c (BODY for TO_LOOP): Likewise. * iconvdata/iso_6937.c (BODY for TO_LOOP): Likewise. * iconvdata/iso_6937-2.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-cn.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-cn-ext.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-kr.c (BODY for TO_LOOP): Likewise. * iconvdata/johab.c (BODY for TO_LOOP): Likewise. * iconvdata/sjis.c (BODY for TO_LOOP): Likewise. * iconvdata/t.61.c (BODY for TO_LOOP): Likewise. * iconvdata/uhc.c (BODY for TO_LOOP): Likewise. * iconvdata/unicode.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-jp.c (TAG_none, TAG_language, TAG_language_j, TAG_language_ja, TAG_language_k, TAG_language_ko, TAG_language_z, TAG_language_zh, CURRENT_TAG_MASK): New enum values. (EMIT_SHIFT_TO_INIT): Don't emit an escape sequence if ASCII_set is already selected but set2 or tag are set. (conversion): New enum type. (cvlist_t): New type. (CVLIST, CVLIST_FIRST, CVLIST_REST): New macros. (conversion_lists): New array. (BODY for TO_LOOP): Keep track of Unicode 3.1 language tag. If "ja", prefer conversion to Japanese character sets. If "zh", prefer conversion to GB2312. If "ko", prefer conversion to KSC5601. Small optimizations. (INIT_PARAMS): Add tag. (UPDATE_PARAMS): Add tag. 2001-06-04 Bruno Haible <haible@clisp.cons.org> * locale/programs/locfile.c (write_locale_data): Before creat(), unlink the file, to avoid crashing the processes that mmap it. Change a double slash to a single slash. Free fname in case of error return. 2001-06-02 Jakub Jelinek <jakub@redhat.com> * sysdeps/i386/fpu/s_frexpl.S (__frexpl): Mostly revert 2000-12-03 changes, do the special handling for denormal numbers, not for normalized numbers (patch by <trevin@xmission.com>). * math/test-misc.c (main): Test frexpl with denormal arguments. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/libm-test.inc (llround_test): Add two new llround tests. * sysdeps/ieee754/ldbl-96/s_llroundl.c (__llroundl): Don't allow overflow when rounding away from zero. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/Makefile (libm-calls): Add e_log2, w_log2, remove s_log2. * math/math_private.h (__ieee754_log2, __ieee754_log2f, __ieee754_log2l): New prototypes. * sysdeps/generic/w_log2.c: New file. * sysdeps/generic/w_log2f.c: New file. * sysdeps/generic/w_log2l.c: New file. * sysdeps/generic/s_log2l.c: Move... * sysdeps/generic/e_log2l.c: ...to here. Rename to __ieee754_log2l. * sysdeps/ieee754/k_standard.c (__kernel_standard): Handle log2(0) and log2(x < 0). * sysdeps/i386/fpu/s_log2.S: Move... * sysdeps/i386/fpu/e_log2.S: ...to here. Rename to __ieee754_log2. * sysdeps/i386/fpu/s_log2f.S: Move... * sysdeps/i386/fpu/e_log2f.S: ...to here. Rename to __ieee754_log2f. * sysdeps/i386/fpu/s_log2l.S: Move... * sysdeps/i386/fpu/e_log2l.S: ...to here. Rename to __ieee754_log2l. * sysdeps/m68k/fpu/s_log2.S: Move... * sysdeps/m68k/fpu/e_log2.S: ...to here. Rename to __ieee754_log2. * sysdeps/m68k/fpu/s_log2f.S: Move... * sysdeps/m68k/fpu/e_log2f.S: ...to here. Rename to __ieee754_log2f. * sysdeps/m68k/fpu/s_log2l.S: Move... * sysdeps/m68k/fpu/e_log2l.S: ...to here. Rename to __ieee754_log2l. * sysdeps/ieee754/dbl-64/s_log2.c: Move... * sysdeps/ieee754/dbl-64/e_log2.c: ...to here. Rename to __ieee754_log2. * sysdeps/ieee754/flt-32/s_log2f.c: Move... * sysdeps/ieee754/flt-32/e_log2f.c: ...to here. Rename to __ieee754_log2f. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/w_exp2.c (u_threshold): Lower threshold so that even arguments which result in denormalized exp2 are accepted. (__exp2): Arguments equal to u_threshold already result into underflow. * sysdeps/generic/w_exp2f.c (u_threshold, __exp2f): Likewise. * sysdeps/generic/w_exp2l.c (u_threshold, __exp2l): Likewise. * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Lomark was too low, with corrected lowmark use greaterequal, not greater. * sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/libm-test.inc (ilogb_test): Test that ilogb(+-Inf) == INT_MAX. * sysdeps/i386/fpu/s_ilogb.S (__ilogb): Return INT_MAX for +-Inf. * sysdeps/i386/fpu/s_ilogbf.S (__ilogbf): Likewise. * sysdeps/i386/fpu/s_ilogbl.S (__ilogbl): Likewise. * sysdeps/ieee754/dbl-64/s_ilogb.c (__ilogb): Likewise. * sysdeps/ieee754/flt-32/s_ilogbf.c (__ilogbf): Likewise. * sysdeps/ieee754/ldbl-128/s_ilogbl.c (__ilogbl): Likewise. * sysdeps/ieee754/ldbl-96/s_ilogbl.c (__ilogbl): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/w_coshl.c (__coshl): Test if finite argument gave non-finite result instead of using constant in generic version. * sysdeps/generic/w_coshf.c (__coshf): Likewise. * sysdeps/generic/w_cosh.c (__cosh): Likewise. * sysdeps/generic/w_exp10.c (o_threshold, u_threshold): Remove. (__exp10): Test if finite argument gave non-finite result. * sysdeps/generic/w_exp10f.c (o_threshold, u_threshold, __exp10f): Likewise. * sysdeps/generic/w_exp10l.c (o_threshold, u_threshold, __exp10l): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/ieee754/ldbl-96/e_coshl.c (__ieee754_coshl): Fix overflow threshold constant (log(LDBL_MAX)+M_LN2l). 2001-05-29 Bruno Haible <haible@clisp.cons.org> * locale/programs/ld-ctype.c (idx_table): New struct type. (idx_table_init, idx_table_get, idx_table_add): New functions. (MAX_CHARNAMES_IDX): Remove macro. (locale_ctype_t): Change type of charnames_idx field. (ctype_startup): Change initialization of charnames_idx field. (find_idx): Use idx_table_get and idx_table_add for speed. * locale/programs/charmap.c (charmap_new_char): Fix ucs4 value computation of characters in a range. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * iconvdata/gb18030.c (__fourbyte_to_ucs1): Add mappings for <U03F4>, <U03F5>. (__ucs_to_gb18030_tab1): Likewise. (BODY for FROM_LOOP): Add mapping for <U00010000>..<U0010FFFF>. (BODY for TO_LOOP): Likewise. * iconvdata/tst-table-charmap.sh: Update for charmaps containing <U00xxxxxx> syntax. * iconvdata/tst-table-from.c (bmp_only): New variable. (utf8_decode): If bmp_only, don't return characters outside Unicode plane 0. (main): When testing UTF-8 or GB18030, set bmp_only to 1. Don't print a conversion line if utf8_decode returns NULL. * iconvdata/tst-table-to.c (main): When testing encodings other than UTF-8 and GB18030, loop upto U+30000 instead of U+10000. Use UTF-8 instead of UCS-2 as input. * iconvdata/tst-table.sh: For GB18030, use only the part < 0x10000 of the charmap. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * iconvdata/cns11643l1.c: Update to Unicode 3.1. (__cns11643l1_to_ucs4_tab): Regenerated. (__cns11643l1_from_ucs4_tab12): Regenerated. * iconvdata/cns11643.c: Update to Unicode 3.1. (__cns11643l14_to_ucs4_tab): Remove array. (__cns11643l3_to_ucs4_tab, __cns11643l4_to_ucs4_tab, __cns11643l5_to_ucs4_tab, __cns11643l6_to_ucs4_tab, __cns11643l7_to_ucs4_tab, __cns11643l15_to_ucs4_tab): New arrays. (__cns11643_from_ucs4p0_tab): Renamed from __cns11643_from_ucs4_tab. (__cns11643_from_ucs4p2_tab): New array. * iconvdata/cns11643.h (__cns11643l14_to_ucs4_tab): Remove declaration. (__cns11643l3_to_ucs4_tab, __cns11643l4_to_ucs4_tab, __cns11643l5_to_ucs4_tab, __cns11643l6_to_ucs4_tab, __cns11643l7_to_ucs4_tab, __cns11643l15_to_ucs4_tab): New declarations. (cns11643_to_ucs4): Treat planes 3, 4, 5, 6, 7, 15 instead of 14. (__cns11643_from_ucs4_tab): Remove declaration. (__cns11643_from_ucs4p0_tab, __cns11643_from_ucs4p2_tab): New declarations. (ucs4_to_cns11643): Update for new arrays. Treat U+3400..U+4DFF and U+20000..U+2A6D6. * iconvdata/cns11643l2.h (__cns11643_from_ucs4_tab): Remove declaration. (__cns11643_from_ucs4p0_tab): New declaration. (ucs4_to_cns11643l2): Update for new arrays. * iconvdata/iso-2022-cn-ext.c (BODY for FROM_LOOP): Handle planes 3 to 7. (BODY for TO_LOOP): Handle planes 3 to 7, instead of plane 14. * iconvdata/EUC-TW.irreversible: New file. * iconvdata/tst-table.sh: Use it. * iconvdata/Makefile (distribute): Add CP1255.irreversible, CP1258.irreversible, EUC-TW.irreversible. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * locale/C-translit.h.in: Add transliterations for new Unicode 3.1 mathematical symbols.
2001-06-06 12:55:46 +00:00
#ifndef TEST_FLOAT
/* 0x100000000 */
TEST_f_L (llround, 4294967295.5, 4294967296LL),
/* 0x200000000 */
TEST_f_L (llround, 8589934591.5, 8589934592LL),
/* nextafter(0.5,-1) */
TEST_f_L (llround, 0x1.fffffffffffffp-2, 0),
/* nextafter(-0.5,1) */
TEST_f_L (llround, -0x1.fffffffffffffp-2, 0),
/* On PowerPC an exponent of '52' is the largest incrementally
* representable sequence of whole-numbers in the 'double' range. We test
* lround to make sure that a guard bit set during the lround operation
* hasn't forced an erroneous shift giving us an incorrect result. The odd
* numbers between +-(2^52+1 and 2^53-1) are affected since they have the
* rightmost bit set. */
/* +-(2^52+1) */
TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL),
TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL),
/* +-(2^53-1): Input is the last (positive and negative) incrementally
* representable whole-number in the 'double' range that might round
* erroneously. */
TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL),
TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL),
#else
/* nextafter(0.5,-1) */
TEST_f_L (llround, 0x1.fffffep-2, 0),
/* nextafter(-0.5,1) */
TEST_f_L (llround, -0x1.fffffep-2, 0),
/* As above, on PowerPC an exponent of '23' is the largest incrementally
* representable sequence of whole-numbers in the 'float' range.
* Likewise, numbers between +-(2^23+1 and 2^24-1) are affected. */
TEST_f_L (llround, 0x1.000002p+23,8388609),
TEST_f_L (llround, -0x1.000002p+23,-8388609),
TEST_f_L (llround, 0x1.fffffep+23, 16777215),
TEST_f_L (llround, -0x1.fffffep+23, -16777215),
Update. 2001-06-04 Bruno Haible <haible@clisp.cons.org> * iconv/loop.c (UNICODE_TAG_HANDLER): New macro. * iconv/gconv_simple.c (__gconv_transform_internal_ascii): Invoke UNICODE_TAG_HANDLER. (__gconv_transform_internal_ucs2): Likewise. (__gconv_transform_internal_ucs2reverse): Likewise. * iconvdata/8bit-gap.c (BODY for TO_LOOP): Invoke UNICODE_TAG_HANDLER. * iconvdata/8bit-generic.c (BODY for TO_LOOP): Likewise. * iconvdata/ansi_x3.110.c (BODY for TO_LOOP): Likewise. * iconvdata/big5.c (BODY for TO_LOOP): Likewise. * iconvdata/big5hkscs.c (BODY for TO_LOOP): Likewise. * iconvdata/cp1255.c (BODY for TO_LOOP): Likewise. * iconvdata/cp1258.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-cn.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-jp.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-kr.c (BODY for TO_LOOP): Likewise. * iconvdata/euc-tw.c (BODY for TO_LOOP): Likewise. * iconvdata/gbk.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm930.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm932.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm933.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm935.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm937.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm939.c (BODY for TO_LOOP): Likewise. * iconvdata/ibm943.c (BODY for TO_LOOP): Likewise. * iconvdata/iso646.c (BODY for TO_LOOP): Likewise. * iconvdata/iso8859-1.c (BODY for TO_LOOP): Likewise. * iconvdata/iso_6937.c (BODY for TO_LOOP): Likewise. * iconvdata/iso_6937-2.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-cn.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-cn-ext.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-kr.c (BODY for TO_LOOP): Likewise. * iconvdata/johab.c (BODY for TO_LOOP): Likewise. * iconvdata/sjis.c (BODY for TO_LOOP): Likewise. * iconvdata/t.61.c (BODY for TO_LOOP): Likewise. * iconvdata/uhc.c (BODY for TO_LOOP): Likewise. * iconvdata/unicode.c (BODY for TO_LOOP): Likewise. * iconvdata/iso-2022-jp.c (TAG_none, TAG_language, TAG_language_j, TAG_language_ja, TAG_language_k, TAG_language_ko, TAG_language_z, TAG_language_zh, CURRENT_TAG_MASK): New enum values. (EMIT_SHIFT_TO_INIT): Don't emit an escape sequence if ASCII_set is already selected but set2 or tag are set. (conversion): New enum type. (cvlist_t): New type. (CVLIST, CVLIST_FIRST, CVLIST_REST): New macros. (conversion_lists): New array. (BODY for TO_LOOP): Keep track of Unicode 3.1 language tag. If "ja", prefer conversion to Japanese character sets. If "zh", prefer conversion to GB2312. If "ko", prefer conversion to KSC5601. Small optimizations. (INIT_PARAMS): Add tag. (UPDATE_PARAMS): Add tag. 2001-06-04 Bruno Haible <haible@clisp.cons.org> * locale/programs/locfile.c (write_locale_data): Before creat(), unlink the file, to avoid crashing the processes that mmap it. Change a double slash to a single slash. Free fname in case of error return. 2001-06-02 Jakub Jelinek <jakub@redhat.com> * sysdeps/i386/fpu/s_frexpl.S (__frexpl): Mostly revert 2000-12-03 changes, do the special handling for denormal numbers, not for normalized numbers (patch by <trevin@xmission.com>). * math/test-misc.c (main): Test frexpl with denormal arguments. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/libm-test.inc (llround_test): Add two new llround tests. * sysdeps/ieee754/ldbl-96/s_llroundl.c (__llroundl): Don't allow overflow when rounding away from zero. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/Makefile (libm-calls): Add e_log2, w_log2, remove s_log2. * math/math_private.h (__ieee754_log2, __ieee754_log2f, __ieee754_log2l): New prototypes. * sysdeps/generic/w_log2.c: New file. * sysdeps/generic/w_log2f.c: New file. * sysdeps/generic/w_log2l.c: New file. * sysdeps/generic/s_log2l.c: Move... * sysdeps/generic/e_log2l.c: ...to here. Rename to __ieee754_log2l. * sysdeps/ieee754/k_standard.c (__kernel_standard): Handle log2(0) and log2(x < 0). * sysdeps/i386/fpu/s_log2.S: Move... * sysdeps/i386/fpu/e_log2.S: ...to here. Rename to __ieee754_log2. * sysdeps/i386/fpu/s_log2f.S: Move... * sysdeps/i386/fpu/e_log2f.S: ...to here. Rename to __ieee754_log2f. * sysdeps/i386/fpu/s_log2l.S: Move... * sysdeps/i386/fpu/e_log2l.S: ...to here. Rename to __ieee754_log2l. * sysdeps/m68k/fpu/s_log2.S: Move... * sysdeps/m68k/fpu/e_log2.S: ...to here. Rename to __ieee754_log2. * sysdeps/m68k/fpu/s_log2f.S: Move... * sysdeps/m68k/fpu/e_log2f.S: ...to here. Rename to __ieee754_log2f. * sysdeps/m68k/fpu/s_log2l.S: Move... * sysdeps/m68k/fpu/e_log2l.S: ...to here. Rename to __ieee754_log2l. * sysdeps/ieee754/dbl-64/s_log2.c: Move... * sysdeps/ieee754/dbl-64/e_log2.c: ...to here. Rename to __ieee754_log2. * sysdeps/ieee754/flt-32/s_log2f.c: Move... * sysdeps/ieee754/flt-32/e_log2f.c: ...to here. Rename to __ieee754_log2f. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/w_exp2.c (u_threshold): Lower threshold so that even arguments which result in denormalized exp2 are accepted. (__exp2): Arguments equal to u_threshold already result into underflow. * sysdeps/generic/w_exp2f.c (u_threshold, __exp2f): Likewise. * sysdeps/generic/w_exp2l.c (u_threshold, __exp2l): Likewise. * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Lomark was too low, with corrected lowmark use greaterequal, not greater. * sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * math/libm-test.inc (ilogb_test): Test that ilogb(+-Inf) == INT_MAX. * sysdeps/i386/fpu/s_ilogb.S (__ilogb): Return INT_MAX for +-Inf. * sysdeps/i386/fpu/s_ilogbf.S (__ilogbf): Likewise. * sysdeps/i386/fpu/s_ilogbl.S (__ilogbl): Likewise. * sysdeps/ieee754/dbl-64/s_ilogb.c (__ilogb): Likewise. * sysdeps/ieee754/flt-32/s_ilogbf.c (__ilogbf): Likewise. * sysdeps/ieee754/ldbl-128/s_ilogbl.c (__ilogbl): Likewise. * sysdeps/ieee754/ldbl-96/s_ilogbl.c (__ilogbl): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/w_coshl.c (__coshl): Test if finite argument gave non-finite result instead of using constant in generic version. * sysdeps/generic/w_coshf.c (__coshf): Likewise. * sysdeps/generic/w_cosh.c (__cosh): Likewise. * sysdeps/generic/w_exp10.c (o_threshold, u_threshold): Remove. (__exp10): Test if finite argument gave non-finite result. * sysdeps/generic/w_exp10f.c (o_threshold, u_threshold, __exp10f): Likewise. * sysdeps/generic/w_exp10l.c (o_threshold, u_threshold, __exp10l): Likewise. 2001-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/ieee754/ldbl-96/e_coshl.c (__ieee754_coshl): Fix overflow threshold constant (log(LDBL_MAX)+M_LN2l). 2001-05-29 Bruno Haible <haible@clisp.cons.org> * locale/programs/ld-ctype.c (idx_table): New struct type. (idx_table_init, idx_table_get, idx_table_add): New functions. (MAX_CHARNAMES_IDX): Remove macro. (locale_ctype_t): Change type of charnames_idx field. (ctype_startup): Change initialization of charnames_idx field. (find_idx): Use idx_table_get and idx_table_add for speed. * locale/programs/charmap.c (charmap_new_char): Fix ucs4 value computation of characters in a range. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * iconvdata/gb18030.c (__fourbyte_to_ucs1): Add mappings for <U03F4>, <U03F5>. (__ucs_to_gb18030_tab1): Likewise. (BODY for FROM_LOOP): Add mapping for <U00010000>..<U0010FFFF>. (BODY for TO_LOOP): Likewise. * iconvdata/tst-table-charmap.sh: Update for charmaps containing <U00xxxxxx> syntax. * iconvdata/tst-table-from.c (bmp_only): New variable. (utf8_decode): If bmp_only, don't return characters outside Unicode plane 0. (main): When testing UTF-8 or GB18030, set bmp_only to 1. Don't print a conversion line if utf8_decode returns NULL. * iconvdata/tst-table-to.c (main): When testing encodings other than UTF-8 and GB18030, loop upto U+30000 instead of U+10000. Use UTF-8 instead of UCS-2 as input. * iconvdata/tst-table.sh: For GB18030, use only the part < 0x10000 of the charmap. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * iconvdata/cns11643l1.c: Update to Unicode 3.1. (__cns11643l1_to_ucs4_tab): Regenerated. (__cns11643l1_from_ucs4_tab12): Regenerated. * iconvdata/cns11643.c: Update to Unicode 3.1. (__cns11643l14_to_ucs4_tab): Remove array. (__cns11643l3_to_ucs4_tab, __cns11643l4_to_ucs4_tab, __cns11643l5_to_ucs4_tab, __cns11643l6_to_ucs4_tab, __cns11643l7_to_ucs4_tab, __cns11643l15_to_ucs4_tab): New arrays. (__cns11643_from_ucs4p0_tab): Renamed from __cns11643_from_ucs4_tab. (__cns11643_from_ucs4p2_tab): New array. * iconvdata/cns11643.h (__cns11643l14_to_ucs4_tab): Remove declaration. (__cns11643l3_to_ucs4_tab, __cns11643l4_to_ucs4_tab, __cns11643l5_to_ucs4_tab, __cns11643l6_to_ucs4_tab, __cns11643l7_to_ucs4_tab, __cns11643l15_to_ucs4_tab): New declarations. (cns11643_to_ucs4): Treat planes 3, 4, 5, 6, 7, 15 instead of 14. (__cns11643_from_ucs4_tab): Remove declaration. (__cns11643_from_ucs4p0_tab, __cns11643_from_ucs4p2_tab): New declarations. (ucs4_to_cns11643): Update for new arrays. Treat U+3400..U+4DFF and U+20000..U+2A6D6. * iconvdata/cns11643l2.h (__cns11643_from_ucs4_tab): Remove declaration. (__cns11643_from_ucs4p0_tab): New declaration. (ucs4_to_cns11643l2): Update for new arrays. * iconvdata/iso-2022-cn-ext.c (BODY for FROM_LOOP): Handle planes 3 to 7. (BODY for TO_LOOP): Handle planes 3 to 7, instead of plane 14. * iconvdata/EUC-TW.irreversible: New file. * iconvdata/tst-table.sh: Use it. * iconvdata/Makefile (distribute): Add CP1255.irreversible, CP1258.irreversible, EUC-TW.irreversible. 2001-05-29 Bruno Haible <haible@clisp.cons.org> * locale/C-translit.h.in: Add transliterations for new Unicode 3.1 mathematical symbols.
2001-06-06 12:55:46 +00:00
#endif
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
#ifdef TEST_LDOUBLE
/* The input can only be represented in long double. */
TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL),
TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL),
TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL),
TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL),
TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL),
TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL),
TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL),
TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL),
TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL),
TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL),
TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL),
TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL),
TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL),
TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL),
TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL),
TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL),
# endif
TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL),
TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL),
TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL),
TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL),
TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL),
TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL),
TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL),
TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL),
TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL),
TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL),
TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL),
TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL),
TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL),
TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL),
TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL),
TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL),
TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL),
TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL),
TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL),
TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL),
# endif
TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL),
TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL),
TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL),
TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL),
TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL),
TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL),
TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL),
TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL),
TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL),
TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL),
TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL),
TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL),
TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL),
TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL),
TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL),
TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL),
TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL),
TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL),
TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL),
TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL),
TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL),
#endif
};
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
static void
llround_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (llround, 1, llround_test_data, RUN_TEST_LOOP_f_L, END);
}
static const struct test_fF_f1_data modf_test_data[] =
{
TEST_fF_f1 (modf, plus_infty, 0, plus_infty, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, 0, 0, 0, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, 1.5, 0.5, 1, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, 2.5, 0.5, 2, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, -2.5, -0.5, -2, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, 20, 0, 20, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, 21, 0, 21, NO_INEXACT_EXCEPTION),
TEST_fF_f1 (modf, 89.5, 0.5, 89, NO_INEXACT_EXCEPTION),
};
static void
modf_test (void)
{
FLOAT x;
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (modf, 1, modf_test_data, RUN_TEST_LOOP_fF_f1, END, x);
}
static const struct test_f_f_data nearbyint_test_data[] =
{
TEST_f_f (nearbyint, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4.5, 4.0, NO_INEXACT_EXCEPTION, 4.0, NO_INEXACT_EXCEPTION, 4.0, NO_INEXACT_EXCEPTION, 5.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 3.5, 3.0, NO_INEXACT_EXCEPTION, 4.0, NO_INEXACT_EXCEPTION, 3.0, NO_INEXACT_EXCEPTION, 4.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 2.5, 2.0, NO_INEXACT_EXCEPTION, 2.0, NO_INEXACT_EXCEPTION, 2.0, NO_INEXACT_EXCEPTION, 3.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 2.0, 2.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 1.5, 1.0, NO_INEXACT_EXCEPTION, 2.0, NO_INEXACT_EXCEPTION, 1.0, NO_INEXACT_EXCEPTION, 2.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 1.0, 1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 0.5, 0.0, NO_INEXACT_EXCEPTION, 0.0, NO_INEXACT_EXCEPTION, 0.0, NO_INEXACT_EXCEPTION, 1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -0.5, -1.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -1.0, -1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -1.5, -2.0, NO_INEXACT_EXCEPTION, -2.0, NO_INEXACT_EXCEPTION, -1.0, NO_INEXACT_EXCEPTION, -1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -2.0, -2.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -2.5, -3.0, NO_INEXACT_EXCEPTION, -2.0, NO_INEXACT_EXCEPTION, -2.0, NO_INEXACT_EXCEPTION, -2.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -3.5, -4.0, NO_INEXACT_EXCEPTION, -4.0, NO_INEXACT_EXCEPTION, -3.0, NO_INEXACT_EXCEPTION, -3.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4.5, -5.0, NO_INEXACT_EXCEPTION, -4.0, NO_INEXACT_EXCEPTION, -4.0, NO_INEXACT_EXCEPTION, -4.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 0.1, 0.0, NO_INEXACT_EXCEPTION, 0.0, NO_INEXACT_EXCEPTION, 0.0, NO_INEXACT_EXCEPTION, 1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 0.25, 0.0, NO_INEXACT_EXCEPTION, 0.0, NO_INEXACT_EXCEPTION, 0.0, NO_INEXACT_EXCEPTION, 1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 0.625, 0.0, NO_INEXACT_EXCEPTION, 1.0, NO_INEXACT_EXCEPTION, 0.0, NO_INEXACT_EXCEPTION, 1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -0.1, -1.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -0.25, -1.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -0.625, -1.0, NO_INEXACT_EXCEPTION, -1.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION, -0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 262144.75, 262144.0, NO_INEXACT_EXCEPTION, 262145.0, NO_INEXACT_EXCEPTION, 262144.0, NO_INEXACT_EXCEPTION, 262145.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 262142.75, 262142.0, NO_INEXACT_EXCEPTION, 262143.0, NO_INEXACT_EXCEPTION, 262142.0, NO_INEXACT_EXCEPTION, 262143.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 524286.75, 524286.0, NO_INEXACT_EXCEPTION, 524287.0, NO_INEXACT_EXCEPTION, 524286.0, NO_INEXACT_EXCEPTION, 524287.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 524288.75, 524288.0, NO_INEXACT_EXCEPTION, 524289.0, NO_INEXACT_EXCEPTION, 524288.0, NO_INEXACT_EXCEPTION, 524289.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 1048576.75, 1048576.0, NO_INEXACT_EXCEPTION, 1048577.0, NO_INEXACT_EXCEPTION, 1048576.0, NO_INEXACT_EXCEPTION, 1048577.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 2097152.75, 2097152.0, NO_INEXACT_EXCEPTION, 2097153.0, NO_INEXACT_EXCEPTION, 2097152.0, NO_INEXACT_EXCEPTION, 2097153.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 2492472.75, 2492472.0, NO_INEXACT_EXCEPTION, 2492473.0, NO_INEXACT_EXCEPTION, 2492472.0, NO_INEXACT_EXCEPTION, 2492473.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 2886220.75, 2886220.0, NO_INEXACT_EXCEPTION, 2886221.0, NO_INEXACT_EXCEPTION, 2886220.0, NO_INEXACT_EXCEPTION, 2886221.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 3058792.75, 3058792.0, NO_INEXACT_EXCEPTION, 3058793.0, NO_INEXACT_EXCEPTION, 3058792.0, NO_INEXACT_EXCEPTION, 3058793.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -1048576.75, -1048577.0, NO_INEXACT_EXCEPTION, -1048577.0, NO_INEXACT_EXCEPTION, -1048576.0, NO_INEXACT_EXCEPTION, -1048576.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -2097152.75, -2097153.0, NO_INEXACT_EXCEPTION, -2097153.0, NO_INEXACT_EXCEPTION, -2097152.0, NO_INEXACT_EXCEPTION, -2097152.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -2492472.75, -2492473.0, NO_INEXACT_EXCEPTION, -2492473.0, NO_INEXACT_EXCEPTION, -2492472.0, NO_INEXACT_EXCEPTION, -2492472.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -2886220.75, -2886221.0, NO_INEXACT_EXCEPTION, -2886221.0, NO_INEXACT_EXCEPTION, -2886220.0, NO_INEXACT_EXCEPTION, -2886220.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -3058792.75, -3058793.0, NO_INEXACT_EXCEPTION, -3058793.0, NO_INEXACT_EXCEPTION, -3058792.0, NO_INEXACT_EXCEPTION, -3058792.0, NO_INEXACT_EXCEPTION),
#ifndef TEST_FLOAT
TEST_f_f (nearbyint, 70368744177664.75, 70368744177664.0, NO_INEXACT_EXCEPTION, 70368744177665.0, NO_INEXACT_EXCEPTION, 70368744177664.0, NO_INEXACT_EXCEPTION, 70368744177665.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 140737488355328.75, 140737488355328.0, NO_INEXACT_EXCEPTION, 140737488355329.0, NO_INEXACT_EXCEPTION, 140737488355328.0, NO_INEXACT_EXCEPTION, 140737488355329.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 281474976710656.75, 281474976710656.0, NO_INEXACT_EXCEPTION, 281474976710657.0, NO_INEXACT_EXCEPTION, 281474976710656.0, NO_INEXACT_EXCEPTION, 281474976710657.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 562949953421312.75, 562949953421312.0, NO_INEXACT_EXCEPTION, 562949953421313.0, NO_INEXACT_EXCEPTION, 562949953421312.0, NO_INEXACT_EXCEPTION, 562949953421313.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842624.0, NO_INEXACT_EXCEPTION, 1125899906842625.0, NO_INEXACT_EXCEPTION, 1125899906842624.0, NO_INEXACT_EXCEPTION, 1125899906842625.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0, NO_INEXACT_EXCEPTION, -70368744177665.0, NO_INEXACT_EXCEPTION, -70368744177664.0, NO_INEXACT_EXCEPTION, -70368744177664.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0, NO_INEXACT_EXCEPTION, -140737488355329.0, NO_INEXACT_EXCEPTION, -140737488355328.0, NO_INEXACT_EXCEPTION, -140737488355328.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0, NO_INEXACT_EXCEPTION, -281474976710657.0, NO_INEXACT_EXCEPTION, -281474976710656.0, NO_INEXACT_EXCEPTION, -281474976710656.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0, NO_INEXACT_EXCEPTION, -562949953421313.0, NO_INEXACT_EXCEPTION, -562949953421312.0, NO_INEXACT_EXCEPTION, -562949953421312.0, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0, NO_INEXACT_EXCEPTION, -1125899906842625.0, NO_INEXACT_EXCEPTION, -1125899906842624.0, NO_INEXACT_EXCEPTION, -1125899906842624.0, NO_INEXACT_EXCEPTION),
#endif
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
TEST_f_f (nearbyint, 4503599627370495.5L, 4503599627370495.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370495.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4503599627370496.25L, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370497.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4503599627370496.5L, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370497.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4503599627370496.75L, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370497.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370497.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4503599627370497.5L, 4503599627370497.0L, NO_INEXACT_EXCEPTION, 4503599627370498.0L, NO_INEXACT_EXCEPTION, 4503599627370497.0L, NO_INEXACT_EXCEPTION, 4503599627370498.0L, NO_INEXACT_EXCEPTION),
# if LDBL_MANT_DIG > 100
TEST_f_f (nearbyint, 1024.5000000000001L, 1024.0L, NO_INEXACT_EXCEPTION, 1025.0L, NO_INEXACT_EXCEPTION, 1024.0L, NO_INEXACT_EXCEPTION, 1025.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 1025.5000000000001L, 1025.0L, NO_INEXACT_EXCEPTION, 1026.0L, NO_INEXACT_EXCEPTION, 1025.0L, NO_INEXACT_EXCEPTION, 1026.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -1024.5000000000001L, -1025.0L, NO_INEXACT_EXCEPTION, -1025.0L, NO_INEXACT_EXCEPTION, -1024.0L, NO_INEXACT_EXCEPTION, -1024.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -1025.5000000000001L, -1026.0L, NO_INEXACT_EXCEPTION, -1026.0L, NO_INEXACT_EXCEPTION, -1025.0L, NO_INEXACT_EXCEPTION, -1025.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4503599627370494.5000000000001L, 4503599627370494.0L, NO_INEXACT_EXCEPTION, 4503599627370495.0L, NO_INEXACT_EXCEPTION, 4503599627370494.0L, NO_INEXACT_EXCEPTION, 4503599627370495.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4503599627370495.5000000000001L, 4503599627370495.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370495.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 4503599627370496.5000000000001L, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370497.0L, NO_INEXACT_EXCEPTION, 4503599627370496.0L, NO_INEXACT_EXCEPTION, 4503599627370497.0L, NO_INEXACT_EXCEPTION),
# endif
TEST_f_f (nearbyint, -4503599627370495.5L, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370495.0L, NO_INEXACT_EXCEPTION, -4503599627370495.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4503599627370496.25L, -4503599627370497.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4503599627370496.5L, -4503599627370497.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4503599627370496.75L, -4503599627370497.0L, NO_INEXACT_EXCEPTION, -4503599627370497.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4503599627370497.5L, -4503599627370498.0L, NO_INEXACT_EXCEPTION, -4503599627370498.0L, NO_INEXACT_EXCEPTION, -4503599627370497.0L, NO_INEXACT_EXCEPTION, -4503599627370497.0L, NO_INEXACT_EXCEPTION),
# if LDBL_MANT_DIG > 100
TEST_f_f (nearbyint, -4503599627370494.5000000000001L, -4503599627370495.0L, NO_INEXACT_EXCEPTION, -4503599627370495.0L, NO_INEXACT_EXCEPTION, -4503599627370494.0L, NO_INEXACT_EXCEPTION, -4503599627370494.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4503599627370495.5000000000001L, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370495.0L, NO_INEXACT_EXCEPTION, -4503599627370495.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4503599627370496.5000000000001L, -4503599627370497.0L, NO_INEXACT_EXCEPTION, -4503599627370497.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION, -4503599627370496.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740991.0000000000001L, 9007199254740991.0L, NO_INEXACT_EXCEPTION, 9007199254740991.0L, NO_INEXACT_EXCEPTION, 9007199254740991.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740992.0000000000001L, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740993.0000000000001L, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740994.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740991.5000000000001L, 9007199254740991.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740991.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740992.5000000000001L, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740993.5000000000001L, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740994.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740994.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740991.0000000000001L, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740991.0L, NO_INEXACT_EXCEPTION, -9007199254740991.0L, NO_INEXACT_EXCEPTION, -9007199254740991.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740992.0000000000001L, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740993.0000000000001L, -9007199254740994.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740991.5000000000001L, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740991.0L, NO_INEXACT_EXCEPTION, -9007199254740991.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740992.5000000000001L, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740993.5000000000001L, -9007199254740994.0L, NO_INEXACT_EXCEPTION, -9007199254740994.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION),
# endif
TEST_f_f (nearbyint, 9007199254740991.5L, 9007199254740991.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740991.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740992.25L, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740992.5L, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740992.75L, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740992.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 9007199254740993.5L, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740994.0L, NO_INEXACT_EXCEPTION, 9007199254740993.0L, NO_INEXACT_EXCEPTION, 9007199254740994.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740991.5L, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740991.0L, NO_INEXACT_EXCEPTION, -9007199254740991.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740992.25L, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740992.5L, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740992.75L, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION, -9007199254740992.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -9007199254740993.5L, -9007199254740994.0L, NO_INEXACT_EXCEPTION, -9007199254740994.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION, -9007199254740993.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 72057594037927935.5L, 72057594037927935.0L, NO_INEXACT_EXCEPTION, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927935.0L, NO_INEXACT_EXCEPTION, 72057594037927936.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 72057594037927936.25L, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927937.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 72057594037927936.5L, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927937.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 72057594037927936.75L, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927937.0L, NO_INEXACT_EXCEPTION, 72057594037927936.0L, NO_INEXACT_EXCEPTION, 72057594037927937.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 72057594037927937.5L, 72057594037927937.0L, NO_INEXACT_EXCEPTION, 72057594037927938.0L, NO_INEXACT_EXCEPTION, 72057594037927937.0L, NO_INEXACT_EXCEPTION, 72057594037927938.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -72057594037927935.5L, -72057594037927936.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION, -72057594037927935.0L, NO_INEXACT_EXCEPTION, -72057594037927935.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -72057594037927936.25L, -72057594037927937.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -72057594037927936.5L, -72057594037927937.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -72057594037927936.75L, -72057594037927937.0L, NO_INEXACT_EXCEPTION, -72057594037927937.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION, -72057594037927936.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -72057594037927937.5L, -72057594037927938.0L, NO_INEXACT_EXCEPTION, -72057594037927938.0L, NO_INEXACT_EXCEPTION, -72057594037927937.0L, NO_INEXACT_EXCEPTION, -72057594037927937.0L, NO_INEXACT_EXCEPTION),
# if LDBL_MANT_DIG > 100
TEST_f_f (nearbyint, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643007.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643010.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, NO_INEXACT_EXCEPTION, 10141204801825835211973625643010.0L, NO_INEXACT_EXCEPTION),
# endif
/* Check cases where first double is a exact integer higher than
2^52 and the precision is determined by second long double for
IBM long double. */
TEST_f_f (nearbyint, 34503599627370498.515625L, 34503599627370498.0L, NO_INEXACT_EXCEPTION, 34503599627370499.0L, NO_INEXACT_EXCEPTION, 34503599627370498.0L, NO_INEXACT_EXCEPTION, 34503599627370499.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -34503599627370498.515625L, -34503599627370499.0L, NO_INEXACT_EXCEPTION, -34503599627370499.0L, NO_INEXACT_EXCEPTION, -34503599627370498.0L, NO_INEXACT_EXCEPTION, -34503599627370498.0L, NO_INEXACT_EXCEPTION),
# if LDBL_MANT_DIG >= 106
TEST_f_f (nearbyint, 1192568192774434123539907640624.484375L, 1192568192774434123539907640624.0L, NO_INEXACT_EXCEPTION, 1192568192774434123539907640624.0L, NO_INEXACT_EXCEPTION, 1192568192774434123539907640624.0L, NO_INEXACT_EXCEPTION, 1192568192774434123539907640625.0L, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -1192568192774434123539907640624.484375L, -1192568192774434123539907640625.0L, NO_INEXACT_EXCEPTION, -1192568192774434123539907640624.0L, NO_INEXACT_EXCEPTION, -1192568192774434123539907640624.0L, NO_INEXACT_EXCEPTION, -1192568192774434123539907640624.0L, NO_INEXACT_EXCEPTION),
# endif
#endif
#ifndef TEST_FLOAT
TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307, NO_INEXACT_EXCEPTION),
TEST_f_f (nearbyint, -4.45015e-308, -1.0, NO_INEXACT_EXCEPTION, minus_zero, NO_INEXACT_EXCEPTION, minus_zero, NO_INEXACT_EXCEPTION, minus_zero, NO_INEXACT_EXCEPTION),
#endif
};
static void
nearbyint_test (void)
{
ALL_RM_TEST (nearbyint, 1, nearbyint_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_ff_f_data nextafter_test_data[] =
{
TEST_ff_f (nextafter, 0, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, minus_zero, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, 0, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, 9, 9, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, -9, -9, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (nextafter, max_value, plus_infty, plus_infty, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_ff_f (nextafter, -max_value, minus_infty, minus_infty, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
#ifdef TEST_LDOUBLE
// XXX Enable once gcc is fixed.
//TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L),
#endif
#if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
TEST_ff_f (nextafter, 1.0L, -10.0L, 1.0L-0x1p-106L, NO_EXCEPTION),
TEST_ff_f (nextafter, 1.0L, 10.0L, 1.0L+0x1p-105L, NO_EXCEPTION),
TEST_ff_f (nextafter, 1.0L-0x1p-106L, 10.0L, 1.0L, NO_EXCEPTION),
TEST_ff_f (nextafter, -1.0L, -10.0L, -1.0L-0x1p-105L, NO_EXCEPTION),
TEST_ff_f (nextafter, -1.0L, 10.0L, -1.0L+0x1p-106L, NO_EXCEPTION),
TEST_ff_f (nextafter, -1.0L+0x1p-106L, -10.0L, -1.0L, NO_EXCEPTION),
#endif
/* XXX We need the hexadecimal FP number representation here for further
tests. */
};
static void
nextafter_test (void)
{
Fix nextafter overflow in non-default rounding modes (bug 16677). ISO C requires the result of nextafter to be independent of the rounding mode, even when underflow or overflow occurs. This patch fixes the bug in various nextafter implementations that, having done an overflowing computation to force an overflow exception (correct), they then return the result of that computation rather than an infinity computed some other way (incorrect, when the overflowing result of arithmetic with that sign and rounding mode is finite but the correct result is infinite) - generally by falling through to existing code to return a value that in fact is correct for this case (but was computed by an integer increment and so without generating the exceptions required). Having fixed the bug, the previously deferred conversion of nextafter testing in libm-test.inc to ALL_RM_TEST is also included. Tested x86_64 and x86; also spot-checked results of nextafter tests for powerpc32 and mips64 to test the ldbl-128ibm and ldbl-128 changes. (The m68k change is untested.) [BZ #16677] * math/s_nextafter.c (__nextafter): Do not return value from overflowing computation. * sysdeps/i386/fpu/s_nextafterl.c (__nextafterl): Likewise. * sysdeps/ieee754/flt-32/s_nextafterf.c (__nextafterf): Likewise. * sysdeps/ieee754/ldbl-128/s_nextafterl.c (__nextafterl): Likewise. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c (__nextafterl): Likewise. * sysdeps/m68k/m680x0/fpu/s_nextafterl.c (__nextafterl): Likewise. * math/libm-test.inc (nextafter_test): Use ALL_RM_TEST.
2014-03-11 22:24:00 +00:00
ALL_RM_TEST (nextafter, 1, nextafter_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_ff_f_data_nexttoward nexttoward_test_data[] =
{
TEST_ff_f (nexttoward, 0, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, minus_zero, 0, 0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 0, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 9, 9, 9, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -9, -9, -9, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
2012-05-01 15:37:43 +00:00
#ifdef TEST_FLOAT
TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
2012-05-01 15:37:43 +00:00
# if LDBL_MANT_DIG >= 64
TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0, NO_INEXACT_EXCEPTION),
2012-05-01 15:37:43 +00:00
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0, NO_INEXACT_EXCEPTION),
2012-05-01 15:37:43 +00:00
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0, NO_INEXACT_EXCEPTION),
2012-05-01 15:37:43 +00:00
# endif
#endif
#ifdef TEST_DOUBLE
TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
2012-05-01 15:37:43 +00:00
# if LDBL_MANT_DIG >= 64
TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
2012-05-01 15:37:43 +00:00
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
2012-05-01 15:37:43 +00:00
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0, NO_INEXACT_EXCEPTION),
TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0, NO_INEXACT_EXCEPTION),
2012-05-01 15:37:43 +00:00
# endif
#endif
};
static void
nexttoward_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (nexttoward, 1, nexttoward_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_ff_f_data pow_test_data[] =
{
TEST_ff_f (pow, qnan_value, 0, 1),
TEST_ff_f (pow, qnan_value, minus_zero, 1),
TEST_ff_f (pow, 1.1L, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, -1.1L, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, 0.9L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, 1e-7L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, -0.9L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, -1e-7L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, 1.1L, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, -1.1L, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, 0.9L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, -0.9L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, 1, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, 1e7L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -1e-7L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -1, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -1e7L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1, minus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 11, minus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1001, minus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 2, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 12, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1002, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 0.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 11.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1, minus_zero, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -11, minus_zero, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1001, minus_zero, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -2, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -12, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1002, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -0.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -11.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1001.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0, NO_TEST_INLINE),
TEST_ff_f (pow, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, 1, qnan_value, 1, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, -1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION),
/* pow (x, qNaN) == qNaN. */
TEST_ff_f (pow, 3.0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, minus_zero, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, -3.0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, 3.0, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, -3.0, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, 2.5, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, -2.5, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, 1, plus_infty, 1),
TEST_ff_f (pow, -1, plus_infty, 1),
TEST_ff_f (pow, 1, minus_infty, 1),
TEST_ff_f (pow, -1, minus_infty, 1),
/* pow (x, +-0) == 1. */
TEST_ff_f (pow, plus_infty, 0, 1),
TEST_ff_f (pow, plus_infty, minus_zero, 1),
TEST_ff_f (pow, minus_infty, 0, 1),
TEST_ff_f (pow, minus_infty, minus_zero, 1),
TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#ifndef TEST_FLOAT
TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#endif
#ifdef TEST_LDOUBLE
# if LDBL_MANT_DIG >= 64
TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
#endif
TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#ifndef TEST_FLOAT
TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#endif
#ifdef TEST_LDOUBLE
# if LDBL_MANT_DIG >= 64
TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
#endif
TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (pow, 0, plus_infty, 0),
TEST_ff_f (pow, minus_zero, plus_infty, 0),
TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK),
TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK),
/* pow (x, +inf) == +inf for |x| > 1. */
TEST_ff_f (pow, 1.5, plus_infty, plus_infty, NO_TEST_INLINE),
/* pow (x, +inf) == +0 for |x| < 1. */
TEST_ff_f (pow, 0.5, plus_infty, 0.0, NO_TEST_INLINE),
/* pow (x, -inf) == +0 for |x| > 1. */
TEST_ff_f (pow, 1.5, minus_infty, 0.0, NO_TEST_INLINE),
/* pow (x, -inf) == +inf for |x| < 1. */
TEST_ff_f (pow, 0.5, minus_infty, plus_infty, NO_TEST_INLINE),
/* pow (+inf, y) == +inf for y > 0. */
TEST_ff_f (pow, plus_infty, 2, plus_infty),
TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty),
#ifndef TEST_FLOAT
TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty),
#endif
#ifdef TEST_LDOUBLE
# if LDBL_MANT_DIG >= 64
TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty),
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty),
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty),
# endif
#endif
TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty),
TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty),
TEST_ff_f (pow, plus_infty, max_value, plus_infty),
/* pow (+inf, y) == +0 for y < 0. */
TEST_ff_f (pow, plus_infty, -1, 0.0),
TEST_ff_f (pow, plus_infty, -0xffffff, 0.0),
#ifndef TEST_FLOAT
TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0),
#endif
#ifdef TEST_LDOUBLE
# if LDBL_MANT_DIG >= 64
TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0),
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0),
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0),
# endif
#endif
TEST_ff_f (pow, plus_infty, -0x1p24, 0.0),
TEST_ff_f (pow, plus_infty, -0x1p127, 0.0),
TEST_ff_f (pow, plus_infty, -max_value, 0.0),
/* pow (-inf, y) == -inf for y an odd integer > 0. */
TEST_ff_f (pow, minus_infty, 27, minus_infty),
TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty),
TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty),
#ifndef TEST_FLOAT
TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty),
TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty),
#endif
#ifdef TEST_LDOUBLE
# if LDBL_MANT_DIG >= 64
TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty),
TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty),
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty),
TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty),
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty),
TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty),
# endif
#endif
/* pow (-inf, y) == +inf for y > 0 and not an odd integer. */
TEST_ff_f (pow, minus_infty, 28, plus_infty),
TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty),
TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty),
TEST_ff_f (pow, minus_infty, max_value, plus_infty),
/* pow (-inf, y) == -0 for y an odd integer < 0. */
TEST_ff_f (pow, minus_infty, -3, minus_zero),
TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero),
TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero),
#ifndef TEST_FLOAT
TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero),
TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero),
#endif
#ifdef TEST_LDOUBLE
# if LDBL_MANT_DIG >= 64
TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero),
TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero),
# endif
# if LDBL_MANT_DIG >= 106
TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero),
TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero),
# endif
# if LDBL_MANT_DIG >= 113
TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero),
TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero),
# endif
#endif
/* pow (-inf, y) == +0 for y < 0 and not an odd integer. */
TEST_ff_f (pow, minus_infty, -2.0, 0.0),
TEST_ff_f (pow, minus_infty, -0x1p24, 0.0),
TEST_ff_f (pow, minus_infty, -0x1p127, 0.0),
TEST_ff_f (pow, minus_infty, -max_value, 0.0),
TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_ff_f (pow),
};
static void
pow_test (void)
{
Fix pow overflow in non-default rounding modes (bug 16315). This patch fixes bug 16315, bad pow handling of overflow/underflow in non-default rounding modes. Tests of pow are duly converted to ALL_RM_TEST to run all tests in all rounding modes. There are two main issues here. First, various implementations compute a negative result by negating a positive result, but this yields inappropriate overflow / underflow values for directed rounding, so either overflow / underflow results need recomputing in the correct sign, or the relevant overflowing / underflowing operation needs to be made to have a result of the correct sign. Second, the dbl-64 implementation sets FE_TONEAREST internally; in the overflow / underflow case, the result needs recomputing in the original rounding mode. Tested x86_64 and x86 and ulps updated accordingly. [BZ #16315] * sysdeps/i386/fpu/e_pow.S (__ieee754_pow): Ensure possibly overflowing or underflowing operations take place with sign of result. * sysdeps/i386/fpu/e_powf.S (__ieee754_powf): Likewise. * sysdeps/i386/fpu/e_powl.S (__ieee754_powl): Likewise. * sysdeps/ieee754/dbl-64/e_pow.c: Include <math.h>. (__ieee754_pow): Recompute overflowing and underflowing results in original rounding mode. * sysdeps/x86/fpu/powl_helper.c: Include <stdbool.h>. (__powl_helper): Allow negative argument X and scale negated value as needed. Avoid passing value outside [-1, 1] to f2xm1. * sysdeps/x86_64/fpu/e_powl.S (__ieee754_powl): Ensure possibly overflowing or underflowing operations take place with sign of result. * sysdeps/x86_64/fpu/multiarch/e_pow.c [HAVE_FMA4_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Add more tests of pow. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (pow_test): Use ALL_RM_TEST. (pow_tonearest_test_data): Remove. (pow_test_tonearest): Likewise. (pow_towardzero_test_data): Likewise. (pow_test_towardzero): Likewise. (pow_downward_test_data): Likewise. (pow_test_downward): Likewise. (pow_upward_test_data): Likewise. (pow_test_upward): Likewise. (main): Don't call removed functions. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-06-23 20:12:33 +00:00
ALL_RM_TEST (pow, 0, pow_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_ff_f_data remainder_test_data[] =
{
TEST_ff_f (remainder, 1, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, 1, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, -1.1L, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, -1.1L, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_zero, plus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_zero, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_zero, plus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_zero, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_infty, 1.1L, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_infty, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, plus_infty, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_infty, 1.1L, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_infty, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, minus_infty, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, 7.0, plus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, 7.0, minus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (remainder, 1.625, 1.0, -0.375, NO_INEXACT_EXCEPTION),
TEST_ff_f (remainder, -1.625, 1.0, 0.375, NO_INEXACT_EXCEPTION),
TEST_ff_f (remainder, 1.625, -1.0, -0.375, NO_INEXACT_EXCEPTION),
TEST_ff_f (remainder, -1.625, -1.0, 0.375, NO_INEXACT_EXCEPTION),
TEST_ff_f (remainder, 5.0, 2.0, 1.0, NO_INEXACT_EXCEPTION),
TEST_ff_f (remainder, 3.0, 2.0, -1.0, NO_INEXACT_EXCEPTION),
PowerPC floating point little-endian [4 of 15] http://sourceware.org/ml/libc-alpha/2013-08/msg00084.html Another batch of ieee854 macros and union replacement. These four files also have bugs fixed with this patch. The fact that the two doubles in an IBM long double may have different signs means that negation and absolute value operations can't just twiddle one sign bit as you can with ieee864 style extended double. fmodl, remainderl, erfl and erfcl all had errors of this type. erfl also returned +1 for large magnitude negative input where it should return -1. The hypotl error is innocuous since the value adjusted twice is only used as a flag. The e_hypotl.c tests for large "a" and small "b" are mutually exclusive because we've already exited when x/y > 2**120. That allows some further small simplifications. [BZ #15734], [BZ #15735] * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Rewrite all uses of ieee875 long double macros and unions. Simplify test for 0.0L. Correct |x|<|y| and |x|=|y| test. Use ldbl_extract_mantissa value for ix,iy exponents. Properly normalize after ldbl_extract_mantissa, and don't add hidden bit already handled. Don't treat low word of ieee854 mantissa like low word of IBM long double and mask off bit when testing for zero. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Rewrite all uses of ieee875 long double macros and unions. Simplify tests for 0.0L and inf. Correct double adjustment of k. Delete dead code adjusting ha,hb. Simplify code setting kld. Delete two600 and two1022, instead use their values. Recognise that tests for large "a" and small "b" are mutually exclusive. Rename vars. Comment. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c (__ieee754_remainderl): Rewrite all uses of ieee875 long double macros and unions. Simplify test for 0.0L and nan. Correct negation. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c (__erfl): Rewrite all uses of ieee875 long double macros and unions. Correct output for large magnitude x. Correct absolute value calculation. (__erfcl): Likewise. * math/libm-test.inc: Add tests for errors discovered in IBM long double versions of fmodl, remainderl, erfl and erfcl.
2013-08-17 08:55:51 +00:00
#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 56
TEST_ff_f (remainder, -0x1.80000000000002p1L, 2.0, 0x1.fffffffffffff8p-1L, NO_INEXACT_EXCEPTION),
#endif
};
static void
remainder_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (remainder, 1, remainder_test_data, RUN_TEST_LOOP_ff_f, END);
}
2013-05-24 20:33:14 +00:00
static void
drem_test (void)
{
/* drem uses the same test data as remainder. */
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (drem, 1, remainder_test_data, RUN_TEST_LOOP_ff_f, END);
}
2013-05-24 20:33:14 +00:00
static const struct test_ffI_f1_data remquo_test_data[] =
{
TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, plus_zero, plus_zero, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, plus_zero, minus_zero, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, minus_zero, plus_zero, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, minus_zero, minus_zero, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, plus_infty, minus_zero, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, plus_infty, 0, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, plus_infty, plus_infty, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, plus_infty, minus_infty, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, minus_infty, minus_zero, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, minus_infty, 0, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, minus_infty, plus_infty, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, minus_infty, minus_infty, qnan_value, IGNORE, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION),
TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 0, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, qnan_value, 0, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, qnan_value, 1, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, plus_infty, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, qnan_value, plus_infty, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, minus_infty, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, qnan_value, minus_infty, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 7.0, plus_infty, 7.0, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 7.0, minus_infty, 7.0, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 5, 2, 1, 2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 3, 2, -1, 2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 3419, 360, 179, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -3419, 360, -179, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 3419, -360, 179, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -3419, -360, -179, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, max_value, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, -max_value, plus_zero, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, min_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, -min_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, min_subnorm_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, -min_subnorm_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, max_value, minus_zero, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, -max_value, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, min_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, -min_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, min_subnorm_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, -min_subnorm_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_value, max_value, min_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_value, -max_value, min_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_value, min_value, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_value, -min_value, plus_zero, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_value, min_subnorm_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_value, -min_subnorm_value, plus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_value, max_value, -min_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_value, -max_value, -min_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_value, min_value, minus_zero, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_value, -min_value, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_value, min_subnorm_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_value, -min_subnorm_value, minus_zero, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_subnorm_value, max_value, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_subnorm_value, -max_value, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_subnorm_value, min_value, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_subnorm_value, -min_value, min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_subnorm_value, min_subnorm_value, plus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, min_subnorm_value, -min_subnorm_value, plus_zero, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_subnorm_value, max_value, -min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_subnorm_value, -max_value, -min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_subnorm_value, min_value, -min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_subnorm_value, -min_value, -min_subnorm_value, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_subnorm_value, min_subnorm_value, minus_zero, -1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -min_subnorm_value, -min_subnorm_value, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, max_value, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, -max_value, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, max_value / 2, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, -max_value / 2, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, max_value / 4, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, -max_value / 4, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, max_value / 8, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 1, -max_value / 8, 1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, max_value, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, -max_value, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, max_value / 2, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, -max_value / 2, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, max_value / 4, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, -max_value / 4, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, max_value / 8, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -1, -max_value / 8, -1, 0, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, max_value / 2, plus_zero, 2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, max_value, -max_value / 2, plus_zero, -2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, max_value / 2, minus_zero, -2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -max_value, -max_value / 2, minus_zero, 2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 2, 1, plus_zero, 2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, 2, -1, plus_zero, -2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -2, 1, minus_zero, -2, NO_INEXACT_EXCEPTION),
TEST_ffI_f1 (remquo, -2, -1, minus_zero, 2, NO_INEXACT_EXCEPTION),
};
static void
remquo_test (void)
{
int x;
ALL_RM_TEST (remquo, 1, remquo_test_data, RUN_TEST_LOOP_ffI_f1_mod8, END, x);
}
static const struct test_f_f_data rint_test_data[] =
{
TEST_f_f (rint, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (rint, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (rint, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 4.5, 4.0, INEXACT_EXCEPTION, 4.0, INEXACT_EXCEPTION, 4.0, INEXACT_EXCEPTION, 5.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 3.5, 3.0, INEXACT_EXCEPTION, 4.0, INEXACT_EXCEPTION, 3.0, INEXACT_EXCEPTION, 4.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 2.5, 2.0, INEXACT_EXCEPTION, 2.0, INEXACT_EXCEPTION, 2.0, INEXACT_EXCEPTION, 3.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 2.0, 2.0, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 1.5, 1.0, INEXACT_EXCEPTION, 2.0, INEXACT_EXCEPTION, 1.0, INEXACT_EXCEPTION, 2.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 1.0, 1.0, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 0.5, 0.0, INEXACT_EXCEPTION, 0.0, INEXACT_EXCEPTION, 0.0, INEXACT_EXCEPTION, 1.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 0.0, 0.0, NO_INEXACT_EXCEPTION),
TEST_f_f (rint, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, -0.5, -1.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -1.0, -1.0, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, -1.5, -2.0, INEXACT_EXCEPTION, -2.0, INEXACT_EXCEPTION, -1.0, INEXACT_EXCEPTION, -1.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -2.0, -2.0, NO_INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, -2.5, -3.0, INEXACT_EXCEPTION, -2.0, INEXACT_EXCEPTION, -2.0, INEXACT_EXCEPTION, -2.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -3.5, -4.0, INEXACT_EXCEPTION, -4.0, INEXACT_EXCEPTION, -3.0, INEXACT_EXCEPTION, -3.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -4.5, -5.0, INEXACT_EXCEPTION, -4.0, INEXACT_EXCEPTION, -4.0, INEXACT_EXCEPTION, -4.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 0.1, 0.0, INEXACT_EXCEPTION, 0.0, INEXACT_EXCEPTION, 0.0, INEXACT_EXCEPTION, 1.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 0.25, 0.0, INEXACT_EXCEPTION, 0.0, INEXACT_EXCEPTION, 0.0, INEXACT_EXCEPTION, 1.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 0.625, 0.0, INEXACT_EXCEPTION, 1.0, INEXACT_EXCEPTION, 0.0, INEXACT_EXCEPTION, 1.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -0.1, -1.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -0.25, -1.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -0.625, -1.0, INEXACT_EXCEPTION, -1.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION, -0.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 262144.75, 262144.0, INEXACT_EXCEPTION, 262145.0, INEXACT_EXCEPTION, 262144.0, INEXACT_EXCEPTION, 262145.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 262142.75, 262142.0, INEXACT_EXCEPTION, 262143.0, INEXACT_EXCEPTION, 262142.0, INEXACT_EXCEPTION, 262143.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 524286.75, 524286.0, INEXACT_EXCEPTION, 524287.0, INEXACT_EXCEPTION, 524286.0, INEXACT_EXCEPTION, 524287.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 524288.75, 524288.0, INEXACT_EXCEPTION, 524289.0, INEXACT_EXCEPTION, 524288.0, INEXACT_EXCEPTION, 524289.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 1048576.75, 1048576.0, INEXACT_EXCEPTION, 1048577.0, INEXACT_EXCEPTION, 1048576.0, INEXACT_EXCEPTION, 1048577.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 2097152.75, 2097152.0, INEXACT_EXCEPTION, 2097153.0, INEXACT_EXCEPTION, 2097152.0, INEXACT_EXCEPTION, 2097153.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 2492472.75, 2492472.0, INEXACT_EXCEPTION, 2492473.0, INEXACT_EXCEPTION, 2492472.0, INEXACT_EXCEPTION, 2492473.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 2886220.75, 2886220.0, INEXACT_EXCEPTION, 2886221.0, INEXACT_EXCEPTION, 2886220.0, INEXACT_EXCEPTION, 2886221.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 3058792.75, 3058792.0, INEXACT_EXCEPTION, 3058793.0, INEXACT_EXCEPTION, 3058792.0, INEXACT_EXCEPTION, 3058793.0, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, -1048576.75, -1048577.0, INEXACT_EXCEPTION, -1048577.0, INEXACT_EXCEPTION, -1048576.0, INEXACT_EXCEPTION, -1048576.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -2097152.75, -2097153.0, INEXACT_EXCEPTION, -2097153.0, INEXACT_EXCEPTION, -2097152.0, INEXACT_EXCEPTION, -2097152.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -2492472.75, -2492473.0, INEXACT_EXCEPTION, -2492473.0, INEXACT_EXCEPTION, -2492472.0, INEXACT_EXCEPTION, -2492472.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -2886220.75, -2886221.0, INEXACT_EXCEPTION, -2886221.0, INEXACT_EXCEPTION, -2886220.0, INEXACT_EXCEPTION, -2886220.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -3058792.75, -3058793.0, INEXACT_EXCEPTION, -3058793.0, INEXACT_EXCEPTION, -3058792.0, INEXACT_EXCEPTION, -3058792.0, INEXACT_EXCEPTION),
#ifndef TEST_FLOAT
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 70368744177664.75, 70368744177664.0, INEXACT_EXCEPTION, 70368744177665.0, INEXACT_EXCEPTION, 70368744177664.0, INEXACT_EXCEPTION, 70368744177665.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 140737488355328.75, 140737488355328.0, INEXACT_EXCEPTION, 140737488355329.0, INEXACT_EXCEPTION, 140737488355328.0, INEXACT_EXCEPTION, 140737488355329.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 281474976710656.75, 281474976710656.0, INEXACT_EXCEPTION, 281474976710657.0, INEXACT_EXCEPTION, 281474976710656.0, INEXACT_EXCEPTION, 281474976710657.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 562949953421312.75, 562949953421312.0, INEXACT_EXCEPTION, 562949953421313.0, INEXACT_EXCEPTION, 562949953421312.0, INEXACT_EXCEPTION, 562949953421313.0, INEXACT_EXCEPTION),
TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0, INEXACT_EXCEPTION, 1125899906842625.0, INEXACT_EXCEPTION, 1125899906842624.0, INEXACT_EXCEPTION, 1125899906842625.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -70368744177664.75, -70368744177665.0, INEXACT_EXCEPTION, -70368744177665.0, INEXACT_EXCEPTION, -70368744177664.0, INEXACT_EXCEPTION, -70368744177664.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -140737488355328.75, -140737488355329.0, INEXACT_EXCEPTION, -140737488355329.0, INEXACT_EXCEPTION, -140737488355328.0, INEXACT_EXCEPTION, -140737488355328.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -281474976710656.75, -281474976710657.0, INEXACT_EXCEPTION, -281474976710657.0, INEXACT_EXCEPTION, -281474976710656.0, INEXACT_EXCEPTION, -281474976710656.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -562949953421312.75, -562949953421313.0, INEXACT_EXCEPTION, -562949953421313.0, INEXACT_EXCEPTION, -562949953421312.0, INEXACT_EXCEPTION, -562949953421312.0, INEXACT_EXCEPTION),
TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0, INEXACT_EXCEPTION, -1125899906842625.0, INEXACT_EXCEPTION, -1125899906842624.0, INEXACT_EXCEPTION, -1125899906842624.0, INEXACT_EXCEPTION),
#endif
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370495.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370497.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370497.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370497.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370497.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L, INEXACT_EXCEPTION, 4503599627370498.0L, INEXACT_EXCEPTION, 4503599627370497.0L, INEXACT_EXCEPTION, 4503599627370498.0L, INEXACT_EXCEPTION),
# if LDBL_MANT_DIG > 100
TEST_f_f (rint, 1024.5000000000001L, 1024.0L, INEXACT_EXCEPTION, 1025.0L, INEXACT_EXCEPTION, 1024.0L, INEXACT_EXCEPTION, 1025.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 1025.5000000000001L, 1025.0L, INEXACT_EXCEPTION, 1026.0L, INEXACT_EXCEPTION, 1025.0L, INEXACT_EXCEPTION, 1026.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -1024.5000000000001L, -1025.0L, INEXACT_EXCEPTION, -1025.0L, INEXACT_EXCEPTION, -1024.0L, INEXACT_EXCEPTION, -1024.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -1025.5000000000001L, -1026.0L, INEXACT_EXCEPTION, -1026.0L, INEXACT_EXCEPTION, -1025.0L, INEXACT_EXCEPTION, -1025.0L, INEXACT_EXCEPTION),
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L, INEXACT_EXCEPTION, 4503599627370495.0L, INEXACT_EXCEPTION, 4503599627370494.0L, INEXACT_EXCEPTION, 4503599627370495.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370495.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370497.0L, INEXACT_EXCEPTION, 4503599627370496.0L, INEXACT_EXCEPTION, 4503599627370497.0L, INEXACT_EXCEPTION),
# endif
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370495.0L, INEXACT_EXCEPTION, -4503599627370495.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L, INEXACT_EXCEPTION, -4503599627370497.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L, INEXACT_EXCEPTION, -4503599627370498.0L, INEXACT_EXCEPTION, -4503599627370497.0L, INEXACT_EXCEPTION, -4503599627370497.0L, INEXACT_EXCEPTION),
# if LDBL_MANT_DIG > 100
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L, INEXACT_EXCEPTION, -4503599627370495.0L, INEXACT_EXCEPTION, -4503599627370494.0L, INEXACT_EXCEPTION, -4503599627370494.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370495.0L, INEXACT_EXCEPTION, -4503599627370495.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L, INEXACT_EXCEPTION, -4503599627370497.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION, -4503599627370496.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L, INEXACT_EXCEPTION, 9007199254740991.0L, INEXACT_EXCEPTION, 9007199254740991.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740994.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740991.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740994.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740994.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740991.0L, INEXACT_EXCEPTION, -9007199254740991.0L, INEXACT_EXCEPTION, -9007199254740991.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740991.0L, INEXACT_EXCEPTION, -9007199254740991.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L, INEXACT_EXCEPTION, -9007199254740994.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION),
# endif
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 9007199254740991.5L, 9007199254740991.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740991.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740992.75L, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740992.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 9007199254740993.5L, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740994.0L, INEXACT_EXCEPTION, 9007199254740993.0L, INEXACT_EXCEPTION, 9007199254740994.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740991.0L, INEXACT_EXCEPTION, -9007199254740991.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740992.25L, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740992.5L, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION, -9007199254740992.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L, INEXACT_EXCEPTION, -9007199254740994.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION, -9007199254740993.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 72057594037927935.5L, 72057594037927935.0L, INEXACT_EXCEPTION, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927935.0L, INEXACT_EXCEPTION, 72057594037927936.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927937.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927937.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 72057594037927936.75L, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927937.0L, INEXACT_EXCEPTION, 72057594037927936.0L, INEXACT_EXCEPTION, 72057594037927937.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 72057594037927937.5L, 72057594037927937.0L, INEXACT_EXCEPTION, 72057594037927938.0L, INEXACT_EXCEPTION, 72057594037927937.0L, INEXACT_EXCEPTION, 72057594037927938.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION, -72057594037927935.0L, INEXACT_EXCEPTION, -72057594037927935.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -72057594037927936.25L, -72057594037927937.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -72057594037927936.5L, -72057594037927937.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L, INEXACT_EXCEPTION, -72057594037927937.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION, -72057594037927936.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L, INEXACT_EXCEPTION, -72057594037927938.0L, INEXACT_EXCEPTION, -72057594037927937.0L, INEXACT_EXCEPTION, -72057594037927937.0L, INEXACT_EXCEPTION),
Update. 2004-12-22 Steven Munroe <sjmunroe@us.ibm.com> * math/libm-test.inc (rint_test_tonearest): New test. (rint_test_towardzero): New test. (rint_test_downward): New test. (rint_test_upward): New test. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const.
2005-01-06 21:52:35 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L, INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643007.0L, INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, INEXACT_EXCEPTION, 10141204801825835211973625643008.0L, INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L, INEXACT_EXCEPTION, 10141204801825835211973625643010.0L, INEXACT_EXCEPTION, 10141204801825835211973625643009.0L, INEXACT_EXCEPTION, 10141204801825835211973625643010.0L, INEXACT_EXCEPTION),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
/* Check cases where first double is a exact integer higher than
2^52 and the precision is determined by second long double for
IBM long double. */
TEST_f_f (rint, 34503599627370498.515625L, 34503599627370498.0L, INEXACT_EXCEPTION, 34503599627370499.0L, INEXACT_EXCEPTION, 34503599627370498.0L, INEXACT_EXCEPTION, 34503599627370499.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -34503599627370498.515625L, -34503599627370499.0L, INEXACT_EXCEPTION, -34503599627370499.0L, INEXACT_EXCEPTION, -34503599627370498.0L, INEXACT_EXCEPTION, -34503599627370498.0L, INEXACT_EXCEPTION),
# if LDBL_MANT_DIG >= 106
TEST_f_f (rint, 1192568192774434123539907640624.484375L, 1192568192774434123539907640624.0L, INEXACT_EXCEPTION, 1192568192774434123539907640624.0L, INEXACT_EXCEPTION, 1192568192774434123539907640624.0L, INEXACT_EXCEPTION, 1192568192774434123539907640625.0L, INEXACT_EXCEPTION),
TEST_f_f (rint, -1192568192774434123539907640624.484375L, -1192568192774434123539907640625.0L, INEXACT_EXCEPTION, -1192568192774434123539907640624.0L, INEXACT_EXCEPTION, -1192568192774434123539907640624.0L, INEXACT_EXCEPTION, -1192568192774434123539907640624.0L, INEXACT_EXCEPTION),
# endif
#endif
#ifndef TEST_FLOAT
TEST_f_f (rint, -8.98847e+307, -8.98847e+307, NO_INEXACT_EXCEPTION),
TEST_f_f (rint, -4.45015e-308, -1.0, INEXACT_EXCEPTION, minus_zero, INEXACT_EXCEPTION, minus_zero, INEXACT_EXCEPTION, minus_zero, INEXACT_EXCEPTION),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
#endif
};
Update. 2004-12-22 Steven Munroe <sjmunroe@us.ibm.com> * math/libm-test.inc (rint_test_tonearest): New test. (rint_test_towardzero): New test. (rint_test_downward): New test. (rint_test_upward): New test. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const.
2005-01-06 21:52:35 +00:00
static void
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
rint_test (void)
Update. 2004-12-22 Steven Munroe <sjmunroe@us.ibm.com> * math/libm-test.inc (rint_test_tonearest): New test. (rint_test_towardzero): New test. (rint_test_downward): New test. (rint_test_upward): New test. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const.
2005-01-06 21:52:35 +00:00
{
Add libm-test support for per-rounding-mode manually specified results. This patch continues the libm-test move towards automatic testing of all test inputs in all rounding modes by adding gen-libm-test.pl support for tests specifying results in each rounding mode manually. Previously a TEST_* line could specify arguments and results, or arguments, results and flags. Now there is the option of (arguments, results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz, results-ru, flags-ru). This is used to replace the separate arrays of results in each rounding mode for lrint, llrint and rint. (In the case of rint, some tests were only in rint_test_data and needed to have expectations for non-default rounding modes added, which I did manually. In various cases there were slight differences in things such as the ordering of tests in the arrays for each mode.) Tested x86_64 and x86. * math/gen-libm-test.pl (parse_args): Handle results specified for each rounding mode separately. * math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode tests and results from lrint_tonearest_test_data, lrint_towardzero_test_data, lrint_downward_test_data and lrint_upward_test_data. (lrint_test): Use ALL_RM_TEST. (lrint_tonearest_test_data): Remove. (lrint_test_tonearest): Likewise. (lrint_towardzero_test_data): Likewise. (lrint_test_towardzero): Likewise. (lrint_downward_test_data): Likewise. (lrint_test_downward): Likewise. (lrint_upward_test_data): Likewise. (lrint_test_upward): Likewise. (llrint_test_data): Merge in per-rounding-mode tests and results from llrint_tonearest_test_data, llrint_towardzero_test_data, llrint_downward_test_data and llrint_upward_test_data. (llrint_test): Use ALL_RM_TEST. (llrint_tonearest_test_data): Remove. (llrint_test_tonearest): Likewise. (llrint_towardzero_test_data): Likewise. (llrint_test_towardzero): Likewise. (llrint_downward_test_data): Likewise. (llrint_test_downward): Likewise. (llrint_upward_test_data): Likewise. (llrint_test_upward): Likewise. (rint_test_data): Merge in per-rounding-mode tests and results from rint_tonearest_test_data, rint_towardzero_test_data, rint_downward_test_data and rint_upward_test_data. Add per-rounding-mode results for tests not in those arrays. (rint_test): Use ALL_RM_TEST. (rint_tonearest_test_data): Remove. (rint_test_tonearest): Likewise. (rint_towardzero_test_data): Likewise. (rint_test_towardzero): Likewise. (rint_downward_test_data): Likewise. (rint_test_downward): Likewise. (rint_upward_test_data): Likewise. (rint_test_upward): Likewise. (main): Don't call removed functions.
2014-03-17 12:29:26 +00:00
ALL_RM_TEST (rint, 1, rint_test_data, RUN_TEST_LOOP_f_f, END);
Update. 2004-12-22 Steven Munroe <sjmunroe@us.ibm.com> * math/libm-test.inc (rint_test_tonearest): New test. (rint_test_towardzero): New test. (rint_test_downward): New test. (rint_test_upward): New test. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Fix -0.0 case. * sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Use EALIGN for Quadword alignment. Fix -0.0 case. * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Use EALIGN for Quadword alignment. Fix -0.0 case. Remove redundant const values. Use float const.
2005-01-06 21:52:35 +00:00
}
static const struct test_f_f_data round_test_data[] =
{
/* TODO: missing +/-Inf as well as qNaN tests. */
TEST_f_f (round, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_f (round, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
/* Bug 15479: spurious "inexact" exception may occur. */
TEST_f_f (round, 0.2L, 0.0),
TEST_f_f (round, -0.2L, minus_zero),
TEST_f_f (round, 0.5, 1.0),
TEST_f_f (round, -0.5, -1.0),
TEST_f_f (round, 0.8L, 1.0),
TEST_f_f (round, -0.8L, -1.0),
TEST_f_f (round, 1.5, 2.0),
TEST_f_f (round, -1.5, -2.0),
TEST_f_f (round, 0.1, 0.0),
TEST_f_f (round, 0.25, 0.0),
TEST_f_f (round, 0.625, 1.0),
TEST_f_f (round, -0.1, -0.0),
TEST_f_f (round, -0.25, -0.0),
TEST_f_f (round, -0.625, -1.0),
TEST_f_f (round, 2097152.5, 2097153),
TEST_f_f (round, -2097152.5, -2097153),
#ifndef TEST_FLOAT
TEST_f_f (round, 0xffffffffffff.0p0L, 0xffffffffffff.0p0L),
TEST_f_f (round, 0xffffffffffff.4p0L, 0xffffffffffff.0p0L),
TEST_f_f (round, 0xffffffffffff.8p0L, 0x1000000000000.0p0L),
TEST_f_f (round, 0xffffffffffff.cp0L, 0x1000000000000.0p0L),
TEST_f_f (round, -0xffffffffffff.0p0L, -0xffffffffffff.0p0L),
TEST_f_f (round, -0xffffffffffff.4p0L, -0xffffffffffff.0p0L),
TEST_f_f (round, -0xffffffffffff.8p0L, -0x1000000000000.0p0L),
TEST_f_f (round, -0xffffffffffff.cp0L, -0x1000000000000.0p0L),
#endif
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L),
TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L),
TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L),
TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L),
TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L),
TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L),
TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L),
TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L),
TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L),
TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L),
TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L),
TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L),
TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L),
TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L),
TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L),
TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L),
TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L),
TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L),
TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L),
TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L),
TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L),
TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L),
TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L),
TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L),
TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L),
TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L),
TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L),
TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L),
TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L),
TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L),
TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L),
TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L),
TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L),
TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L),
TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L),
TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L),
TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L),
TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L),
TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L),
TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L),
TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L),
/* Check cases where first double is a exact integer higher than 2^52 and
the precision is determined by second long double for IBM long double. */
TEST_f_f (round, 34503599627370498.515625L, 34503599627370499.0L),
TEST_f_f (round, -34503599627370498.515625L, -34503599627370499.0L),
# if LDBL_MANT_DIG >= 106
TEST_f_f (round, 1192568192774434123539907640624.484375L, 1192568192774434123539907640624.0L),
TEST_f_f (round, -1192568192774434123539907640624.484375L, -1192568192774434123539907640624.0L),
# endif
TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L),
TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L),
TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L),
TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L),
TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L),
#endif
};
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
static void
round_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (round, 1, round_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_ff_f_data scalb_test_data[] =
{
TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (scalb, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, 1, 0, 1, ERRNO_UNCHANGED),
TEST_ff_f (scalb, -1, 0, -1, ERRNO_UNCHANGED),
TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (scalb, 0, 2, 0, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_zero, -4, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (scalb, 0, 0, 0, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_zero, 0, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (scalb, 0, -1, 0, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_zero, -10, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (scalb, 0, minus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (scalb, plus_infty, -1, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_infty, -10, minus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, plus_infty, 0, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_infty, 0, minus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, plus_infty, 2, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_infty, 100, minus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, 0.1L, minus_infty, 0.0, ERRNO_UNCHANGED),
TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (scalb, 1, plus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, -1, plus_infty, minus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty, ERRNO_UNCHANGED),
TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (scalb, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, qnan_value, 0.5, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, 0.5, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (scalb, max_value, max_value, plus_oflow, OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_ff_f (scalb, max_value, -max_value, plus_uflow, UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_ff_f (scalb, 1, max_value, plus_oflow, OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_ff_f (scalb, 1, -max_value, plus_uflow, UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_ff_f (scalb, min_value, max_value, plus_oflow, OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_ff_f (scalb, min_value, -max_value, plus_uflow, UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_ff_f (scalb, min_subnorm_value, max_value, plus_oflow, OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_ff_f (scalb, min_subnorm_value, -max_value, plus_uflow, UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_ff_f (scalb, -max_value, max_value, minus_oflow, OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_ff_f (scalb, -max_value, -max_value, minus_uflow, UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_ff_f (scalb, -1, max_value, minus_oflow, OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_ff_f (scalb, -1, -max_value, minus_uflow, UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_ff_f (scalb, -min_value, max_value, minus_oflow, OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_ff_f (scalb, -min_value, -max_value, minus_uflow, UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_ff_f (scalb, -min_subnorm_value, max_value, minus_oflow, OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_ff_f (scalb, -min_subnorm_value, -max_value, minus_uflow, UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_ff_f (scalb, 0.8L, 4, 12.8L, ERRNO_UNCHANGED),
TEST_ff_f (scalb, -0.854375L, 5, -27.34L, ERRNO_UNCHANGED),
};
static void
scalb_test (void)
{
ALL_RM_TEST (scalb, 1, scalb_test_data, RUN_TEST_LOOP_ff_f, END);
}
static const struct test_fi_f_data scalbn_test_data[] =
{
TEST_fi_f (scalbn, 0, 0, 0, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, minus_zero, 0, minus_zero, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, plus_infty, 1, plus_infty, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, minus_infty, 1, minus_infty, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, 0.8L, 4, 12.8L, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, -0.854375L, 5, -27.34L, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, 1, 0L, 1, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, min_value / 2, 0, min_value / 2, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, -min_value / 2, 0, -min_value / 2, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, min_value / 2, 1, min_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, -min_value / 2, 1, -min_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, min_value * 0x0.ffffp0, 0, min_value * 0x0.ffffp0, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, -min_value * 0x0.ffffp0, 0, -min_value * 0x0.ffffp0, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, min_subnorm_value, 0, min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, -min_subnorm_value, 0, -min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, min_subnorm_value, MANT_DIG, min_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, -min_subnorm_value, MANT_DIG, -min_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, min_value, -MANT_DIG, min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, -min_value, -MANT_DIG, -min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fi_f (scalbn, min_value, -MANT_DIG-1, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value, -MANT_DIG-1, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value, -MANT_DIG-2, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value, -MANT_DIG-2, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value * 1.5, -MANT_DIG, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value * 1.5, -MANT_DIG, -min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value * 1.5, -MANT_DIG-1, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value * 1.5, -MANT_DIG-1, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value * 1.5, -MANT_DIG-2, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value * 1.5, -MANT_DIG-2, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value * 1.25, -MANT_DIG, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value * 1.25, -MANT_DIG, -min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value * 1.25, -MANT_DIG-1, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value * 1.25, -MANT_DIG-1, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value * 1.25, -MANT_DIG-2, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value * 1.25, -MANT_DIG-2, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, 1, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, 1, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, max_value, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, max_value, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -1, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -1, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -max_value, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -max_value, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value / 4, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION),
TEST_fi_f (scalbn, -min_value / 4, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
};
static void
scalbn_test (void)
{
ALL_RM_TEST (scalbn, 1, scalbn_test_data, RUN_TEST_LOOP_fi_f, END);
}
static void
ldexp_test (void)
{
/* ldexp uses the same test data as scalbn. */
ALL_RM_TEST (ldexp, 1, scalbn_test_data, RUN_TEST_LOOP_fi_f, END);
}
static const struct test_fl_f_data scalbln_test_data[] =
{
TEST_fl_f (scalbln, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, minus_zero, 0, minus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, plus_infty, 1, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, minus_infty, 1, minus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, 0.8L, 4, 12.8L, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, -0.854375L, 5, -27.34L, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, 1, 0L, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fl_f (scalbln, min_value / 2, 0, min_value / 2, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, -min_value / 2, 0, -min_value / 2, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, min_value / 2, 1, min_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, -min_value / 2, 1, -min_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, min_value * 0x0.ffffp0, 0, min_value * 0x0.ffffp0, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, -min_value * 0x0.ffffp0, 0, -min_value * 0x0.ffffp0, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, min_subnorm_value, 0, min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, -min_subnorm_value, 0, -min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, min_subnorm_value, MANT_DIG, min_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, -min_subnorm_value, MANT_DIG, -min_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, min_value, -MANT_DIG, min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, -min_value, -MANT_DIG, -min_subnorm_value, NO_INEXACT_EXCEPTION),
TEST_fl_f (scalbln, min_value, -MANT_DIG-1, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value, -MANT_DIG-1, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, min_value, -MANT_DIG-2, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value, -MANT_DIG-2, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, min_value * 1.5, -MANT_DIG, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value * 1.5, -MANT_DIG, -min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, min_value * 1.5, -MANT_DIG-1, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value * 1.5, -MANT_DIG-1, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, min_value * 1.5, -MANT_DIG-2, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value * 1.5, -MANT_DIG-2, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, min_value * 1.25, -MANT_DIG, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value * 1.25, -MANT_DIG, -min_subnorm_value * 2, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, min_value * 1.25, -MANT_DIG-1, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, plus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value * 1.25, -MANT_DIG-1, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, -min_subnorm_value, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, min_value * 1.25, -MANT_DIG-2, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, -min_value * 1.25, -MANT_DIG-2, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION),
TEST_fl_f (scalbln, 1, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, 1, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, max_value, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, max_value, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, min_value, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, min_value, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, min_value / 4, INT_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, min_value / 4, INT_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, -1, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -1, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -max_value, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -max_value, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -min_value, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -min_value, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -min_value / 4, INT_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -min_value / 4, INT_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, 1, LONG_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, 1, LONG_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, max_value, LONG_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, max_value, LONG_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, min_value, LONG_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, min_value, LONG_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, min_value / 4, LONG_MAX, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, min_value / 4, LONG_MIN, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, -1, LONG_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -1, LONG_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -max_value, LONG_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -max_value, LONG_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -min_value, LONG_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -min_value, LONG_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -min_value / 4, LONG_MAX, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -min_value / 4, LONG_MIN, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
#if LONG_MAX >= 0x100000000
TEST_fl_f (scalbln, 1, 0x88000000L, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, 1, -0x88000000L, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, max_value, 0x88000000L, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, max_value, -0x88000000L, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, min_value, 0x88000000L, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, min_value, -0x88000000L, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, min_value / 4, 0x88000000L, plus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_PLUS_OFLOW),
TEST_fl_f (scalbln, min_value / 4, -0x88000000L, plus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_PLUS_UFLOW),
TEST_fl_f (scalbln, -1, 0x88000000L, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -1, -0x88000000L, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -max_value, 0x88000000L, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -max_value, -0x88000000L, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -min_value, 0x88000000L, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -min_value, -0x88000000L, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
TEST_fl_f (scalbln, -min_value / 4, 0x88000000L, minus_oflow, INEXACT_EXCEPTION|OVERFLOW_EXCEPTION|ERRNO_MINUS_OFLOW),
TEST_fl_f (scalbln, -min_value / 4, -0x88000000L, minus_uflow, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_MINUS_UFLOW),
#endif
};
static void
scalbln_test (void)
{
ALL_RM_TEST (scalbln, 1, scalbln_test_data, RUN_TEST_LOOP_fl_f, END);
}
static const struct test_f_i_data signbit_test_data[] =
{
TEST_f_b (signbit, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (signbit, minus_zero, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (signbit, plus_infty, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (signbit, minus_infty, 1, NO_INEXACT_EXCEPTION),
TEST_f_b (signbit, qnan_value, 0, NO_INEXACT_EXCEPTION),
TEST_f_b (signbit, -qnan_value, 1, NO_INEXACT_EXCEPTION),
/* signbit (x) != 0 for x < 0. */
TEST_f_b (signbit, -1, 1, NO_INEXACT_EXCEPTION),
/* signbit (x) == 0 for x >= 0. */
TEST_f_b (signbit, 1, 0, NO_INEXACT_EXCEPTION),
};
static void
signbit_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (signbit, 1, signbit_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_f_f_data sin_test_data[] =
{
TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (sin, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (sin),
};
static void
sin_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (sin, 0, sin_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_fFF_11_data sincos_test_data[] =
{
TEST_fFF_11 (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fFF_11 (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fFF_11 (sincos, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_fFF_11 (sincos),
};
static void
sincos_test (void)
{
FLOAT sin_res, cos_res;
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (sincos, 0, sincos_test_data, RUN_TEST_LOOP_fFF_11, END, sin_res, cos_res);
}
static const struct test_f_f_data sinh_test_data[] =
{
TEST_f_f (sinh, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (sinh, minus_infty, minus_infty, NO_TEST_INLINE),
TEST_f_f (sinh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (sinh),
};
static void
sinh_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (sinh, 0, sinh_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data sqrt_test_data[] =
{
TEST_f_f (sqrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (sqrt, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
/* sqrt (x) == qNaN plus invalid exception for x < 0. */
TEST_f_f (sqrt, -1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (sqrt, -1.1L, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (sqrt, -max_value, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (sqrt, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (sqrt),
};
static void
sqrt_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (sqrt, 1, sqrt_test_data, RUN_TEST_LOOP_f_f, END);
2013-11-29 16:28:47 +00:00
}
static const struct test_f_f_data tan_test_data[] =
{
TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (tan, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (tan),
};
static void
tan_test (void)
{
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
ALL_RM_TEST (tan, 0, tan_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data tanh_test_data[] =
{
TEST_f_f (tanh, plus_infty, 1, NO_TEST_INLINE),
TEST_f_f (tanh, minus_infty, -1, NO_TEST_INLINE),
TEST_f_f (tanh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (tanh),
};
static void
tanh_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (tanh, 0, tanh_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data tgamma_test_data[] =
{
TEST_f_f (tgamma, plus_infty, plus_infty),
TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
/* tgamma (x) == qNaN plus invalid exception for integer x <= 0. */
TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (tgamma, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (tgamma),
};
static void
tgamma_test (void)
{
Improve tgamma accuracy (bug 18613). In non-default rounding modes, tgamma can be slightly less accurate than permitted by glibc's accuracy goals. Part of the problem is error accumulation, addressed in this patch by setting round-to-nearest for internal computations. However, there was also a bug in the code dealing with computing pow (x + n, x + n) where x + n is not exactly representable, providing another source of error even in round-to-nearest mode; it was necessary to address both bugs to get errors for all testcases within glibc's accuracy goals. Given this second fix, accuracy in round-to-nearest mode is also improved (hence regeneration of ulps for tgamma should be from scratch - truncate libm-test-ulps or at least remove existing tgamma entries - so that the expected ulps can be reduced). Some additional complications also arose. Certain tgamma tests should strictly, according to IEEE semantics, overflow or not depending on the rounding mode; this is beyond the scope of glibc's accuracy goals for any function without exactly-determined results, but gen-auto-libm-tests doesn't handle being lax there as it does for underflow. (libm-test.inc also doesn't handle being lax about whether the result in cases very close to the overflow threshold is infinity or a finite value close to overflow, but that doesn't cause problems in this case though I've seen it cause problems with random test generation for some functions.) Thus, spurious-overflow markings, with a comment, are added to auto-libm-test-in (no bug in Bugzilla because the issue is with the testsuite, not a user-visible bug in glibc). And on x86, after the patch I saw ERANGE issues as previously reported by Carlos (see my commentary in <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html>), which needed addressing by ensuring excess range and precision were eliminated at various points if FLT_EVAL_METHOD != 0. I also noticed and fixed a cosmetic issue where 1.0f was used in long double functions and should have been 1.0L. This completes the move of all functions to testing in all rounding modes with ALL_RM_TEST, so gen-libm-have-vector-test.sh is updated to remove the workaround for some functions not using ALL_RM_TEST. Tested for x86_64, x86, mips64 and powerpc. [BZ #18613] * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gamma_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammaf_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * math/libm-test.inc (tgamma_test_data): Remove one test. Moved to auto-libm-test-in. (tgamma_test): Use ALL_RM_TEST. * math/auto-libm-test-in: Add one test of tgamma. Mark some other tests of tgamma with spurious-overflow. * math/auto-libm-test-out: Regenerated. * math/gen-libm-have-vector-test.sh: Do not check for START. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-29 23:29:35 +00:00
ALL_RM_TEST (tgamma, 0, tgamma_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data trunc_test_data[] =
{
TEST_f_f (trunc, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (trunc, minus_infty, minus_infty, NO_INEXACT_EXCEPTION),
TEST_f_f (trunc, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (trunc, 0, 0, NO_INEXACT_EXCEPTION),
TEST_f_f (trunc, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
/* Bug 15479: spurious "inexact" exception may occur. */
TEST_f_f (trunc, 0.1, 0),
TEST_f_f (trunc, 0.25, 0),
TEST_f_f (trunc, 0.625, 0),
TEST_f_f (trunc, -0.1, minus_zero),
TEST_f_f (trunc, -0.25, minus_zero),
TEST_f_f (trunc, -0.625, minus_zero),
TEST_f_f (trunc, 1, 1, NO_INEXACT_EXCEPTION),
TEST_f_f (trunc, -1, -1, NO_INEXACT_EXCEPTION),
TEST_f_f (trunc, 1.625, 1),
TEST_f_f (trunc, -1.625, -1),
TEST_f_f (trunc, 1048580.625L, 1048580L),
TEST_f_f (trunc, -1048580.625L, -1048580L),
TEST_f_f (trunc, 8388610.125L, 8388610.0L),
TEST_f_f (trunc, -8388610.125L, -8388610.0L),
TEST_f_f (trunc, 4294967296.625L, 4294967296.0L),
TEST_f_f (trunc, -4294967296.625L, -4294967296.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L),
TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L),
TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L),
TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L),
TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L),
TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L),
TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L),
TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L),
TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L),
TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L),
TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L),
TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L),
TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L),
TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L),
TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L),
TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L),
TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L),
TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L),
TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L),
TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L),
TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L),
TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L),
TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L),
TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L),
TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L),
TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L),
2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> Jakub Jelinek <jakub@redhat.com> Roland McGrath <roland@redhat.com> Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix. * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * math/libm-test.inc (check_float_internal): Allow ulp <= 0.5. (erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is denormal. [TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file. * sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file. * sysdeps/unix/sysv/linux/powerpc/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/configure.in: New file. * sysdeps/unix/sysv/linux/powerpc/configure: New file. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h (__LONG_DOUBLE_MATH_OPTIONAL): Define. (__NO_LONG_DOUBLE_MATH): Define. * sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file. * sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h. [LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols. * misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New. * sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove. * sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm. * sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp. * sysdeps/ieee754/ldbl-128ibm/Makefile: New file. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file. * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file. * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file. * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file. * sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file. * sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file. * sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file. * sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# if LDBL_MANT_DIG > 100
TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L),
TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L),
TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L),
TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L),
TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L),
TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L),
[BZ #2423] 2006-03-07 Jakub Jelinek <jakub@redhat.com> [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Only run some of the new tests if LDBL_MANT_DIG > 100. 2006-03-03 Steven Munroe <sjmunroe@us.ibm.com> Alan Modra <amodra@bigpond.net.au> * sysdeps/powerpc/fpu/fenv_libc.h (__fegetround, __fesetround): Define inline implementations. * sysdeps/powerpc/fpu/fegetround.c: Use __fegetround. * sysdeps/powerpc/fpu/fesetround.c: Use __fesetround. * sysdeps/powerpc/fpu/math_ldbl.h: New file. [BZ #2423] * math/libm-test.inc [TEST_LDOUBLE] (ceil_test, floor_test, rint_test, round_test, trunc_test): Add new tests. * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (EXTRACT_IBM_EXTENDED_MANTISSA, INSERT_IBM_EXTENDED_MANTISSA): Removed, replaced with ... (ldbl_extract_mantissa, ldbl_insert_mantissa, ldbl_pack, ldbl_unpack, ldbl_canonicalise, ldbl_nearbyint): New functions. * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Replace EXTRACT_IBM_EXTENDED_MANTISSA and INSERT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa and ldbl_insert_mantissa. * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l): Replace EXTRACT_IBM_EXTENDED_MANTISSA with ldbl_extract_mantissa. (ldbl_extract_mantissa, ldbl_insert_mantissa): New inline functions. * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Handle rounding that spans doubles in IBM long double format. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintl.S: File removed.
2006-03-16 11:47:24 +00:00
# endif
TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L),
TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L),
TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L),
TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L),
TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L),
TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L),
TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L),
TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L),
TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L),
TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L),
2014-03-14 17:15:40 +00:00
/* Check cases where first double is a exact integer higher than 2^52 and
the precision is determined by second long double for IBM long double. */
TEST_f_f (trunc, 34503599627370498.515625L, 34503599627370498.0L),
TEST_f_f (trunc, -34503599627370498.515625L, -34503599627370498.0L),
# if LDBL_MANT_DIG >= 106
TEST_f_f (trunc, 1192568192774434123539907640624.484375L, 1192568192774434123539907640624.0L),
TEST_f_f (trunc, -1192568192774434123539907640624.484375L, -1192568192774434123539907640624.0L),
# endif
TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L),
TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L),
TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L),
TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L),
TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L),
#endif
};
static void
trunc_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (trunc, 1, trunc_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data y0_test_data[] =
{
/* y0 is the Bessel function of the second kind of order 0 */
TEST_f_f (y0, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (y0, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (y0, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (y0, 0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (y0, -0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (y0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (y0, plus_infty, 0),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (y0),
};
static void
y0_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (y0, 0, y0_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data y1_test_data[] =
{
/* y1 is the Bessel function of the second kind of order 1 */
TEST_f_f (y1, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (y1, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (y1, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (y1, 0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (y1, -0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (y1, plus_infty, 0),
TEST_f_f (y1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_f_f (y1),
};
static void
y1_test (void)
{
Test most libm functions in all rounding modes. This patch makes libm-test.inc tests of most functions use ALL_RM_TEST unless there was some reason to defer that change for a particular function. I started out planning to defer the change for pow (bug 16315), cexp / ccos / ccosh / csin / csinh (likely fallout from exp, bug 16284) and cpow (exact expectations for signs of exact zero results not wanted). Testing on x86_64 and x86 showed additional failures for acosh, cacos, catan, catanh, clog, clog10, jn, log, log10, log1p, log2, tgamma, yn, so making the change for those functions was deferred as well, pending investigation to show which of these represent distinct bugs (some such bugs may already be filed) and appropriate fixing / XFAILing. Failures include wrong signs of zero results, errors slightly above the 9ulp bound (in such cases it may make sense for functions to set round-to-nearest internally to reduce error accumulation), large errors and incorrect overflow/underflow for the rounding mode (with consequent missing errno settings in some cases). It's possible some could be issues with test expectations, though I didn't notice any that were obviously like that (I added NO_TEST_INLINE for cases that were failing for ildoubl on x86 and where it seemed reasonable for them to fail for the fast-math inlines). There may of course be failures on other architectures for functions that didn't fail on x86_64 or x86, in which case the usual rule applies: file a bug (preferably identifying the underlying problem function, in cases where function A calls function B and a problem with function B may present in the test results for function A) if not already in Bugzilla then fix or XFAIL. Tested x86_64 and x86 and ulps updated accordingly. * math/libm-test.inc (asinh_test): Use ALL_RM_TEST. (atan_test): Likewise. (atanh_test_data): Use NO_TEST_INLINE for two tests. (atanh_test): Use ALL_RM_TEST. (atan2_test_data): Likewise. (cabs_test): Likewise. (cacosh_test): Likewise. (carg_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (cbrt_test): Likewise. (csqrt_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (pow10_test): Likewise. (exp2_test): Likewise. (hypot_test): Likewise. (j0_test): Likewise. (j1_test): Likewise. (lgamma_test): Likewise. (gamma_test): Likewise. (sincos_test): Likewise. (tanh_test): Likewise. (y0_test): Likewise. (y1_test): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-03-21 00:03:38 +00:00
ALL_RM_TEST (y1, 0, y1_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_if_f_data yn_test_data[] =
{
/* yn is the Bessel function of the second kind of order n */
/* yn (0, x) == y0 (x) */
TEST_if_f (yn, 0, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 0, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 0, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 0, 0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 0, -0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_if_f (yn, 0, plus_infty, 0),
/* yn (1, x) == y1 (x) */
TEST_if_f (yn, 1, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 1, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 1, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 1, 0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 1, -0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 1, plus_infty, 0),
TEST_if_f (yn, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* yn (-1, x) == -y1 (x). */
TEST_if_f (yn, -1, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, -1, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, -1, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, -1, 0.0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, -1, -0.0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, -1, plus_infty, minus_zero),
TEST_if_f (yn, -1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* yn (2, x). */
TEST_if_f (yn, 2, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 2, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 2, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 2, 0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 2, -0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 2, plus_infty, 0),
TEST_if_f (yn, 2, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* yn (-2, x) == yn (2, x). */
TEST_if_f (yn, -2, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, -2, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, -2, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, -2, 0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, -2, -0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, -2, plus_infty, 0),
TEST_if_f (yn, -2, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* yn (3, x) */
TEST_if_f (yn, 3, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 3, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 3, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_if_f (yn, 3, 0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 3, -0.0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_if_f (yn, 3, plus_infty, 0),
TEST_if_f (yn, 3, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
/* yn (10, x) */
TEST_if_f (yn, 10, plus_infty, 0),
TEST_if_f (yn, 10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
Make libm-test support ALL_RM_TEST with AUTO_TESTS_*. This patch continues improvements to all-rounding-mode libm testing by making testing with ALL_RM_TEST support test results from auto-libm-test-out. gen-libm-test.pl is adapted to generate appropriate output with results for each rounding mode, with AUTO_TESTS_* calls no longer specifying a rounding mode. Where there were separate functions in libm-test.inc to test a function in each rounding mode, using AUTO_TESTS_* to list the tests for each rounding mode, those are converted to using ALL_RM_TEST (so generally this patch doesn't change the sets of tests run in each rounding mode, except that in various cases special-case tests given directly in libm-test.inc were previously run only for round-to-nearest, and now are run for all rounding modes). Tested x86_64 and x86. * math/gen-libm-test.pl (generate_testfile): Expect only function name as argument to AUTO_TESTS_* and pass results for all rounding modes to parse_args. (parse_auto_input): Separate inputs of automatic tests from outputs before storing in %auto_tests. * math/libm-test.inc (acos_test_data): Update call to AUTO_TESTS_f_f. (acos_test): Use ALL_RM_TEST. (acos_tonearest_test_data): Remove. (acos_test_tonearest): Likewise. (acos_towardzero_test_data): Likewise. (acos_test_towardzero): Likewise. (acos_downward_test_data): Likewise. (acos_test_downward): Likewise. (acos_upward_test_data): Likewise. (acos_test_upward): Likewise. (acosh_test_data): Update call to AUTO_TESTS_f_f. (asin_test_data): Likewise. (asin_test): Use ALL_RM_TEST. (asin_tonearest_test_data): Remove. (asin_test_tonearest): Likewise. (asin_towardzero_test_data): Likewise. (asin_test_towardzero): Likewise. (asin_downward_test_data): Likewise. (asin_test_downward): Likewise. (asin_upward_test_data): Likewise. (asin_test_upward): Likewise. (asinh_test_data): Update call to AUTO_TESTS_f_f. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Update call to AUTO_TESTS_ff_f. (cabs_test_data): Update call to AUTO_TESTS_c_f. (carg_test_data): Likewise. (cbrt_test_data): Update call to AUTO_TESTS_f_f. (ccos_test_data): Update call to AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (clog10_test_data): Likewise. (cos_test_data): Update call to AUTO_TESTS_f_f. (cos_test): Use ALL_RM_TEST. (cos_tonearest_test_data): Remove. (cos_test_tonearest): Likewise. (cos_towardzero_test_data): Likewise. (cos_test_towardzero): Likewise. (cos_downward_test_data): Likewise. (cos_test_downward): Likewise. (cos_upward_test_data): Likewise. (cos_test_upward): Likewise. (cosh_test_data): Update call to AUTO_TESTS_f_f. (cosh_test): Use ALL_RM_TEST. (cosh_tonearest_test_data): Remove. (cosh_test_tonearest): Likewise. (cosh_towardzero_test_data): Likewise. (cosh_test_towardzero): Likewise. (cosh_downward_test_data): Likewise. (cosh_test_downward): Likewise. (cosh_upward_test_data): Likewise. (cosh_test_upward): Likewise. (cpow_test_data): Update call to AUTO_TESTS_cc_c. (csqrt_test_data): Update call to AUTO_TESTS_c_c. (ctan_test_data): Likewise. (ctan_test): Use ALL_RM_TEST. (ctan_tonearest_test_data): Remove. (ctan_test_tonearest): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_test_towardzero): Likewise. (ctan_downward_test_data): Likewise. (ctan_test_downward): Likewise. (ctan_upward_test_data): Likewise. (ctan_test_upward): Likewise. (ctanh_test_data): Update call to AUTO_TESTS_c_c. (ctanh_test): Use ALL_RM_TEST. (ctanh_tonearest_test_data): Remove. (ctanh_test_tonearest): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_test_towardzero): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_test_downward): Likewise. (ctanh_upward_test_data): Likewise. (ctanh_test_upward): Likewise. (erf_test_data): Update call to AUTO_TESTS_f_f. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp_test): Use ALL_RM_TEST. (exp_tonearest_test_data): Remove. (exp_test_tonearest): Likewise. (exp_towardzero_test_data): Likewise. (exp_test_towardzero): Likewise. (exp_downward_test_data): Likewise. (exp_test_downward): Likewise. (exp_upward_test_data): Likewise. (exp_test_upward): Likewise. (exp10_test_data): Update call to AUTO_TESTS_f_f. (exp10_test): Use ALL_RM_TEST. (exp10_tonearest_test_data): Remove. (exp10_test_tonearest): Likewise. (exp10_towardzero_test_data): Likewise. (exp10_test_towardzero): Likewise. (exp10_downward_test_data): Likewise. (exp10_test_downward): Likewise. (exp10_upward_test_data): Likewise. (exp10_test_upward): Likewise. (exp2_test_data): Update call to AUTO_TESTS_f_f. (expm1_test_data): Likewise. (expm1_test): Use ALL_RM_TEST. (expm1_tonearest_test_data): Remove. (expm1_test_tonearest): Likewise. (expm1_towardzero_test_data): Likewise. (expm1_test_towardzero): Likewise. (expm1_downward_test_data): Likewise. (expm1_test_downward): Likewise. (expm1_upward_test_data): Likewise. (expm1_test_upward): Likewise. (fma_test_data): Update call to AUTO_TESTS_fff_f. (fma_test): Use ALL_RM_TEST. (fma_towardzero_test_data): Remove. (fma_test_towardzero): Likewise. (fma_downward_test_data): Likewise. (fma_test_downward): Likewise. (fma_upward_test_data): Likewise. (fma_test_upward): Likewise. (hypot_test_data): Update call to AUTO_TESTS_ff_f. (j0_test_data): Update call to AUTO_TESTS_f_f. (j1_test_data): Likewise. (jn_test_data): Update call to AUTO_TESTS_if_f. (lgamma_test_data): Update call to AUTO_TESTS_f_f1. (log_test_data): Update call to AUTO_TESTS_f_f. (log10_test_data): Likewise. (log1p_test_data): Likewise. (log2_test_data): Likewise. (pow_test_data): Update call to AUTO_TESTS_ff_f. (pow_tonearest_test_data): Likewise. (sin_test_data): Update call to AUTO_TESTS_f_f. (sin_test): Use ALL_RM_TEST. (sin_tonearest_test_data): Remove. (sin_test_tonearest): Likewise. (sin_towardzero_test_data): Likewise. (sin_test_towardzero): Likewise. (sin_downward_test_data): Likewise. (sin_test_downward): Likewise. (sin_upward_test_data): Likewise. (sin_test_upward): Likewise. (sincos_test_data): Update call to AUTO_TESTS_fFF_11. (sinh_test_data): Update call to AUTO_TESTS_f_f. (sinh_test): Use ALL_RM_TEST. (sinh_tonearest_test_data): Remove. (sinh_test_tonearest): Likewise. (sinh_towardzero_test_data): Likewise. (sinh_test_towardzero): Likewise. (sinh_downward_test_data): Likewise. (sinh_test_downward): Likewise. (sinh_upward_test_data): Likewise. (sinh_test_upward): Likewise. (sqrt_test_data): Update call to AUTO_TESTS_f_f. (sqrt_test): Use ALL_RM_TEST. (sqrt_tonearest_test_data): Remove. (sqrt_test_tonearest): Likewise. (sqrt_towardzero_test_data): Likewise. (sqrt_test_towardzero): Likewise. (sqrt_downward_test_data): Likewise. (sqrt_test_downward): Likewise. (sqrt_upward_test_data): Likewise. (sqrt_test_upward): Likewise. (tan_test_data): Update call to AUTO_TESTS_f_f. (tan_test): Use ALL_RM_TEST. (tan_tonearest_test_data): Remove. (tan_test_tonearest): Likewise. (tan_towardzero_test_data): Likewise. (tan_test_towardzero): Likewise. (tan_downward_test_data): Likewise. (tan_test_downward): Likewise. (tan_upward_test_data): Likewise. (tan_test_upward): Likewise. (tanh_test_data): Update call to AUTO_TESTS_f_f. (tgamma_test_data): Likewise. (y0_test_data): Likewise. (y1_test_data): Likewise. (yn_test_data): Update call to AUTO_TESTS_if_f. (main): Do not call removed functions.
2014-03-20 11:48:07 +00:00
AUTO_TESTS_if_f (yn),
};
static void
yn_test (void)
{
Fix yn overflow handling in non-default rounding modes (bug 16561, bug 16562). This patch fixes bugs 16561 and 16562, bad results of yn in overflow cases in non-default rounding modes, both because an intermediate overflow in the recurrence does not get detected if the result is not an infinity and because an overflowing result may occur in the wrong sign. The fix is to set FE_TONEAREST mode internally for the parts of the function where such overflows can occur (which includes the call to y1 - where yn is used to compute a Bessel function of order -1, negating the result of y1 isn't correct for overflowing results in directed rounding modes) and then compute an overflowing value in the original rounding mode if the to-nearest result was an infinity. Tested x86_64 and x86 and ulps updated accordingly. Also tested for mips64 and powerpc32 to test the ldbl-128 and ldbl-128ibm changes. (The tests for these bugs were added in my previous y1 patch, so the only thing this patch has to do with the testsuite is enable yn testing in all rounding modes.) [BZ #16561] [BZ #16562] * sysdeps/ieee754/dbl-64/e_jn.c: Include <float.h>. (__ieee754_yn): Set FE_TONEAREST mode internally and then recompute overflowing results in original rounding mode. * sysdeps/ieee754/flt-32/e_jnf.c: Include <float.h>. (__ieee754_ynf): Set FE_TONEAREST mode internally and then recompute overflowing results in original rounding mode. * sysdeps/ieee754/ldbl-128/e_jnl.c: Include <float.h>. (__ieee754_ynl): Set FE_TONEAREST mode internally and then recompute overflowing results in original rounding mode. * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: Include <float.h>. (__ieee754_ynl): Set FE_TONEAREST mode internally and then recompute overflowing results in original rounding mode. * sysdeps/ieee754/ldbl-96/e_jnl.c: Include <float.h>. (__ieee754_ynl): Set FE_TONEAREST mode internally and then recompute overflowing results in original rounding mode. * sysdeps/i386/fpu/fenv_private.h [!__SSE2_MATH__] (libc_feholdsetround_ctx): New macro. * math/libm-test.inc (yn_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps : Likewise.
2014-06-27 14:52:13 +00:00
ALL_RM_TEST (yn, 0, yn_test_data, RUN_TEST_LOOP_if_f, END);
}
static const struct test_f_f_data significand_test_data[] =
{
/* significand returns the mantissa of the exponential representation. */
/* TODO: missing +/-Inf as well as qNaN tests. */
TEST_f_f (significand, 4.0, 1.0, NO_INEXACT_EXCEPTION),
TEST_f_f (significand, 6.0, 1.5, NO_INEXACT_EXCEPTION),
TEST_f_f (significand, 8.0, 1.0, NO_INEXACT_EXCEPTION),
};
static void
significand_test (void)
{
Add libm-test.inc macro for all-rounding-modes testing. This patch adds support in libm-test.inc for automatically running tests of a function in all rounding modes, in the form of a macro ALL_RM_TEST to loop over all rounding modes when running tests of a function, and uses it for functions whose results should always be independent of the rounding mode. Conversion of tests of nextafter to ALL_RM_TEST was deferred because trying that conversion showed up bug 16677. (Finding such a bug of course illustrates the point of testing more systematically in all rounding modes rather than only reactively when bugs get reported in a particular function in a non-default mode.) Conversion of tests where results can depend on the rounding mode will follow once I add gen-libm-test.pl support for using different initializers for the expected results for different rounding modes (again, some conversions may need deferring until bugs are fixed, depending on how straightforward they are to XFAIL in a particular context). Some existing tests get run five times rather than four, with round-to-nearest tests both run in that as default rounding mode and also with it explicitly set with fesetround (FE_TONEAREST). This duplication doesn't seem particularly useful, so ALL_RM_TEST only runs tests four times. Tested x86_64 and x86. * math/libm-test.inc (ALL_RM_TEST): New macro. (ceil_test): Use ALL_RM_TEST. (cimag_test): Likewise. (conj_test): Likewise. (copysign_test): Likewise. (cproj_test): Likewise. (creal_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmax_test): Likewise. (fmin_test): Likewise. (fmod_test): Likewise. (fpclassify_test): Likewise. (frexp_test): Likewise. (ilogb_test): Likewise. (isfinite_test): Likewise. (finite_test): Likewise. (isgreater_test): Likewise. (isgreaterequal_test): Likewise. (isinf_test): Likewise. (isless_test): Likewise. (islessequal_test): Likewise. (islessgreater_test): Likewise. (isnan_test): Likewise. (isnormal_test): Likewise. (issignaling_test): Likewise. (isunordered_test): Likewise. (logb_test): Likewise. (logb_downward_test_data): Remove. (logb_test_downward): Likewise. (lround_test): Use ALL_RM_TEST. (llround_test): Likewise. (modf_test): Likewise. (nexttoward_test): Likewise. (remainder_test): Likewise. (drem_test): Likewise. (remainder_tonearest_test_data): Likewise. (remainder_test_tonearest): Likewise. (drem_test_tonearest): Likewise. (remainder_towardzero_test_data): Likewise. (remainder_test_towardzero): Likewise. (drem_test_towardzero): Likewise. (remainder_downward_test_data): Likewise. (remainder_test_downward): Likewise. (drem_test_downward): Likewise. (remainder_upward_test_data): Likewise. (remainder_test_upward): Likewise. (drem_test_upward): Likewise. (remquo_test): Use ALL_RM_TEST. Remove comment about x. (round_test): Use ALL_RM_TEST. (signbit_test): Likewise. (trunc_test): Likewise. (significand_test): Likewise. (main): Don't call removed functions.
2014-03-08 14:08:38 +00:00
ALL_RM_TEST (significand, 1, significand_test_data, RUN_TEST_LOOP_f_f, END);
}
static void
initialize (void)
{
fpstack_test ("start *init*");
/* Clear all exceptions. From now on we must not get random exceptions. */
feclearexcept (FE_ALL_EXCEPT);
errno = 0;
/* Test to make sure we start correctly. */
fpstack_test ("end *init*");
}
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
{
{ "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
{ "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
{ "no-max-error", 'f', NULL, 0,
"Don't output maximal errors of functions"},
{ "no-points", 'p', NULL, 0,
"Don't output results of functions invocations"},
{ "ignore-max-ulp", 'i', "yes/no", 0,
"Ignore given maximal errors"},
New Makefile target `regen-ulps'. The wiki "Regeneration" page has this to say about update ULPs. "The libm-test-ulps files are semiautomatically updated. To update an ulps baseline, run each of the failing tests (test-float, test-double, etc.) with -u; this will generate a file called ULPs; concatenate each of those files with the existing libm-test-ulps file, after removing any entries for particularly huge numbers of ulps that you do not want to mark as expected. Then run gen-libm-test.pl -n -u FILE where FILE is the concatenated file produced in the previous step. This generates a file called NewUlps which is the new sorted version of libm-test-ulps." The same information is listed in math/README.libm-test, and is a lot of manual work that you often want to run over-and-over again while working on a particular test. The `regen-ulps' convenience target does this automatically for developers. We strictly assume the source tree is readonly and add a new --output-dir option to libm-test.inc to allow for writing out ULPs to $(objpfx). When run the new target does the following: * Starts with the baseline ULPs file. * Runs each of the libm math tests with -u. * Adds new changes seen with -u to the baseline. * Sorts and prepares the test output with gen-libm-test.pl. * Leaves math/NewUlps in your build tree to copy to your source tree, cleanup, and checkin. The math test documentation in math/README.libm-test is updated document the new Makefile target. --- 2013-04-06 Carlos O'Donell <carlos@redhat.com> * Makefile.in (regen-ulps): New target. * math/Makefile [ifneq (no,$(PERL)]: Declare regen-ulps with .PHONY. [ifneq (no,$(PERL)] (run-regen-ulps): New variable. [ifneq (no,$(PERL)] (regen-ulps): New target. [ifeq (no,$(PERL)] (regen-ulps): New target. * math/libm-test.inc (ulps_file_name): Define. (output_dir): New variable. (options): Add "output-dir" option. (parse_opt): Handle 'o' case. (main): If output_dir is non-NULL use it as a prefix otherwise use "". * math/README.libm-test: Update `How can I generate "libm-test-ulps"?'
2013-04-06 20:22:47 +00:00
{ "output-dir", 'o', "DIR", 0,
"Directory where generated files will be placed"},
{ NULL, 0, NULL, 0, NULL }
};
/* Short description of program. */
static const char doc[] = "Math test suite: " TEST_MSG ;
/* Prototype for option handler. */
static error_t parse_opt (int key, char *arg, struct argp_state *state);
/* Data structure to communicate with argp functions. */
static struct argp argp =
{
options, parse_opt, NULL, doc,
};
/* Handle program arguments. */
static error_t
parse_opt (int key, char *arg, struct argp_state *state)
{
switch (key)
{
case 'f':
output_max_error = 0;
break;
case 'i':
if (strcmp (arg, "yes") == 0)
ignore_max_ulp = 1;
else if (strcmp (arg, "no") == 0)
ignore_max_ulp = 0;
break;
New Makefile target `regen-ulps'. The wiki "Regeneration" page has this to say about update ULPs. "The libm-test-ulps files are semiautomatically updated. To update an ulps baseline, run each of the failing tests (test-float, test-double, etc.) with -u; this will generate a file called ULPs; concatenate each of those files with the existing libm-test-ulps file, after removing any entries for particularly huge numbers of ulps that you do not want to mark as expected. Then run gen-libm-test.pl -n -u FILE where FILE is the concatenated file produced in the previous step. This generates a file called NewUlps which is the new sorted version of libm-test-ulps." The same information is listed in math/README.libm-test, and is a lot of manual work that you often want to run over-and-over again while working on a particular test. The `regen-ulps' convenience target does this automatically for developers. We strictly assume the source tree is readonly and add a new --output-dir option to libm-test.inc to allow for writing out ULPs to $(objpfx). When run the new target does the following: * Starts with the baseline ULPs file. * Runs each of the libm math tests with -u. * Adds new changes seen with -u to the baseline. * Sorts and prepares the test output with gen-libm-test.pl. * Leaves math/NewUlps in your build tree to copy to your source tree, cleanup, and checkin. The math test documentation in math/README.libm-test is updated document the new Makefile target. --- 2013-04-06 Carlos O'Donell <carlos@redhat.com> * Makefile.in (regen-ulps): New target. * math/Makefile [ifneq (no,$(PERL)]: Declare regen-ulps with .PHONY. [ifneq (no,$(PERL)] (run-regen-ulps): New variable. [ifneq (no,$(PERL)] (regen-ulps): New target. [ifeq (no,$(PERL)] (regen-ulps): New target. * math/libm-test.inc (ulps_file_name): Define. (output_dir): New variable. (options): Add "output-dir" option. (parse_opt): Handle 'o' case. (main): If output_dir is non-NULL use it as a prefix otherwise use "". * math/README.libm-test: Update `How can I generate "libm-test-ulps"?'
2013-04-06 20:22:47 +00:00
case 'o':
output_dir = (char *) malloc (strlen (arg) + 1);
if (output_dir != NULL)
strcpy (output_dir, arg);
else
return errno;
break;
case 'p':
output_points = 0;
break;
case 'u':
output_ulps = 1;
break;
case 'v':
if (optarg)
verbose = (unsigned int) strtoul (optarg, NULL, 0);
else
verbose = 3;
break;
default:
return ARGP_ERR_UNKNOWN;
}
return 0;
}
/* Verify that our ulp () implementation is behaving as expected
or abort. */
void
check_ulp (void)
{
FLOAT ulps, ulpx, value;
int i;
/* Check ulp of zero is a subnormal value... */
ulps = ulp (0x0.0p0);
if (fpclassify (ulps) != FP_SUBNORMAL)
{
fprintf (stderr, "ulp (0x0.0p0) is not FP_SUBNORMAL!\n");
exit (EXIT_FAILURE);
}
/* Check that the ulp of one is a normal value... */
ulps = ulp (1.0L);
if (fpclassify (ulps) != FP_NORMAL)
{
fprintf (stderr, "ulp (1.0L) is not FP_NORMAL\n");
exit (EXIT_FAILURE);
}
/* Compute the next subnormal value using nextafter to validate ulp.
We allow +/- 1 ulp around the represented value. */
value = FUNC(nextafter) (0, 1);
ulps = ULPDIFF (value, 0);
ulpx = ulp (1.0L);
if (ulps < (1.0L - ulpx) || ulps > (1.0L + ulpx))
{
fprintf (stderr, "Value outside of 1 +/- 1ulp.\n");
exit (EXIT_FAILURE);
}
/* Compute the nearest representable number from 10 towards 20.
The result is 10 + 1ulp. We use this to check the ulp function.
We allow +/- 1 ulp around the represented value. */
value = FUNC(nextafter) (10, 20);
ulps = ULPDIFF (value, 10);
ulpx = ulp (1.0L);
if (ulps < (1.0L - ulpx) || ulps > (1.0L + ulpx))
{
fprintf (stderr, "Value outside of 1 +/- 1ulp.\n");
exit (EXIT_FAILURE);
}
/* This gives one more ulp. */
value = FUNC(nextafter) (value, 20);
ulps = ULPDIFF (value, 10);
ulpx = ulp (2.0L);
if (ulps < (2.0L - ulpx) || ulps > (2.0L + ulpx))
{
fprintf (stderr, "Value outside of 2 +/- 1ulp.\n");
exit (EXIT_FAILURE);
}
/* And now calculate 100 ulp. */
for (i = 2; i < 100; i++)
value = FUNC(nextafter) (value, 20);
ulps = ULPDIFF (value, 10);
ulpx = ulp (100.0L);
if (ulps < (100.0L - ulpx) || ulps > (100.0L + ulpx))
{
fprintf (stderr, "Value outside of 100 +/- 1ulp.\n");
exit (EXIT_FAILURE);
}
}
int
main (int argc, char **argv)
{
int remaining;
New Makefile target `regen-ulps'. The wiki "Regeneration" page has this to say about update ULPs. "The libm-test-ulps files are semiautomatically updated. To update an ulps baseline, run each of the failing tests (test-float, test-double, etc.) with -u; this will generate a file called ULPs; concatenate each of those files with the existing libm-test-ulps file, after removing any entries for particularly huge numbers of ulps that you do not want to mark as expected. Then run gen-libm-test.pl -n -u FILE where FILE is the concatenated file produced in the previous step. This generates a file called NewUlps which is the new sorted version of libm-test-ulps." The same information is listed in math/README.libm-test, and is a lot of manual work that you often want to run over-and-over again while working on a particular test. The `regen-ulps' convenience target does this automatically for developers. We strictly assume the source tree is readonly and add a new --output-dir option to libm-test.inc to allow for writing out ULPs to $(objpfx). When run the new target does the following: * Starts with the baseline ULPs file. * Runs each of the libm math tests with -u. * Adds new changes seen with -u to the baseline. * Sorts and prepares the test output with gen-libm-test.pl. * Leaves math/NewUlps in your build tree to copy to your source tree, cleanup, and checkin. The math test documentation in math/README.libm-test is updated document the new Makefile target. --- 2013-04-06 Carlos O'Donell <carlos@redhat.com> * Makefile.in (regen-ulps): New target. * math/Makefile [ifneq (no,$(PERL)]: Declare regen-ulps with .PHONY. [ifneq (no,$(PERL)] (run-regen-ulps): New variable. [ifneq (no,$(PERL)] (regen-ulps): New target. [ifeq (no,$(PERL)] (regen-ulps): New target. * math/libm-test.inc (ulps_file_name): Define. (output_dir): New variable. (options): Add "output-dir" option. (parse_opt): Handle 'o' case. (main): If output_dir is non-NULL use it as a prefix otherwise use "". * math/README.libm-test: Update `How can I generate "libm-test-ulps"?'
2013-04-06 20:22:47 +00:00
char *ulps_file_path;
size_t dir_len = 0;
verbose = 1;
output_ulps = 0;
output_max_error = 1;
output_points = 1;
New Makefile target `regen-ulps'. The wiki "Regeneration" page has this to say about update ULPs. "The libm-test-ulps files are semiautomatically updated. To update an ulps baseline, run each of the failing tests (test-float, test-double, etc.) with -u; this will generate a file called ULPs; concatenate each of those files with the existing libm-test-ulps file, after removing any entries for particularly huge numbers of ulps that you do not want to mark as expected. Then run gen-libm-test.pl -n -u FILE where FILE is the concatenated file produced in the previous step. This generates a file called NewUlps which is the new sorted version of libm-test-ulps." The same information is listed in math/README.libm-test, and is a lot of manual work that you often want to run over-and-over again while working on a particular test. The `regen-ulps' convenience target does this automatically for developers. We strictly assume the source tree is readonly and add a new --output-dir option to libm-test.inc to allow for writing out ULPs to $(objpfx). When run the new target does the following: * Starts with the baseline ULPs file. * Runs each of the libm math tests with -u. * Adds new changes seen with -u to the baseline. * Sorts and prepares the test output with gen-libm-test.pl. * Leaves math/NewUlps in your build tree to copy to your source tree, cleanup, and checkin. The math test documentation in math/README.libm-test is updated document the new Makefile target. --- 2013-04-06 Carlos O'Donell <carlos@redhat.com> * Makefile.in (regen-ulps): New target. * math/Makefile [ifneq (no,$(PERL)]: Declare regen-ulps with .PHONY. [ifneq (no,$(PERL)] (run-regen-ulps): New variable. [ifneq (no,$(PERL)] (regen-ulps): New target. [ifeq (no,$(PERL)] (regen-ulps): New target. * math/libm-test.inc (ulps_file_name): Define. (output_dir): New variable. (options): Add "output-dir" option. (parse_opt): Handle 'o' case. (main): If output_dir is non-NULL use it as a prefix otherwise use "". * math/README.libm-test: Update `How can I generate "libm-test-ulps"?'
2013-04-06 20:22:47 +00:00
output_dir = NULL;
/* XXX set to 0 for releases. */
ignore_max_ulp = 0;
/* Parse and process arguments. */
argp_parse (&argp, argc, argv, 0, &remaining, NULL);
if (remaining != argc)
{
fprintf (stderr, "wrong number of arguments");
argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
exit (EXIT_FAILURE);
}
if (output_ulps)
{
New Makefile target `regen-ulps'. The wiki "Regeneration" page has this to say about update ULPs. "The libm-test-ulps files are semiautomatically updated. To update an ulps baseline, run each of the failing tests (test-float, test-double, etc.) with -u; this will generate a file called ULPs; concatenate each of those files with the existing libm-test-ulps file, after removing any entries for particularly huge numbers of ulps that you do not want to mark as expected. Then run gen-libm-test.pl -n -u FILE where FILE is the concatenated file produced in the previous step. This generates a file called NewUlps which is the new sorted version of libm-test-ulps." The same information is listed in math/README.libm-test, and is a lot of manual work that you often want to run over-and-over again while working on a particular test. The `regen-ulps' convenience target does this automatically for developers. We strictly assume the source tree is readonly and add a new --output-dir option to libm-test.inc to allow for writing out ULPs to $(objpfx). When run the new target does the following: * Starts with the baseline ULPs file. * Runs each of the libm math tests with -u. * Adds new changes seen with -u to the baseline. * Sorts and prepares the test output with gen-libm-test.pl. * Leaves math/NewUlps in your build tree to copy to your source tree, cleanup, and checkin. The math test documentation in math/README.libm-test is updated document the new Makefile target. --- 2013-04-06 Carlos O'Donell <carlos@redhat.com> * Makefile.in (regen-ulps): New target. * math/Makefile [ifneq (no,$(PERL)]: Declare regen-ulps with .PHONY. [ifneq (no,$(PERL)] (run-regen-ulps): New variable. [ifneq (no,$(PERL)] (regen-ulps): New target. [ifeq (no,$(PERL)] (regen-ulps): New target. * math/libm-test.inc (ulps_file_name): Define. (output_dir): New variable. (options): Add "output-dir" option. (parse_opt): Handle 'o' case. (main): If output_dir is non-NULL use it as a prefix otherwise use "". * math/README.libm-test: Update `How can I generate "libm-test-ulps"?'
2013-04-06 20:22:47 +00:00
if (output_dir != NULL)
dir_len = strlen (output_dir);
ulps_file_path = (char *) malloc (dir_len + strlen (ulps_file_name) + 1);
if (ulps_file_path == NULL)
{
perror ("can't allocate path for `ULPs' file: ");
exit (1);
}
sprintf (ulps_file_path, "%s%s", output_dir == NULL ? "" : output_dir, ulps_file_name);
ulps_file = fopen (ulps_file_path, "a");
if (ulps_file == NULL)
{
perror ("can't open file `ULPs' for writing: ");
exit (1);
}
}
initialize ();
printf (TEST_MSG);
INIT_ARCH_EXT;
check_ulp ();
Update. 1999-10-31 Ulrich Drepper <drepper@cygnus.com> * includes/features.h: Replace __USE_ISOC9X by __USE_ISOC99 and also recognize _ISOC99_SOURCE. * libio/stdio.h: Likewise. * math/math.h: Likewise. * math/bits/mathcalls.h: Likewise. * math/stdio.h: Likewise. * stdlib/stdlib.h: Likewise. * sysdeps/alpha/fpu/bits/mathdef.h: Likewise. * sysdeps/alpha/fpu/bits/mathinline.h: Likewise. * sysdeps/arm/bits/huge_val.h: Likewise. * sysdeps/generic/bits/mathdef.h: Likewise. * sysdeps/i386/bits/huge_val.h: Likewise. * sysdeps/i386/fpu/bits/mathdef.h: Likewise. * sysdeps/i386/fpu/bits/mathinline.h: Likewise. * sysdeps/ieee754/bits/huge_val.h: Likewise. * sysdeps/m68k/bits/huge_val.h: Likewise. * sysdeps/m68k/fpu/bits/mathdef.h: Likewise. * sysdeps/m68k/fpu/bits/mathinline.h: Likewise. * sysdeps/powerpc/bits/mathdef.h: Likewise. * sysdeps/powerpc/bits/mathinline.h: Likewise. * sysdeps/sparc/fpu/bits/mathdef.h: Likewise. * sysdeps/sparc/fpu/bits/mathinline.h: Likewise. * sysdeps/sparc/sparc32/fpu/bits/huge_val.h: Likewise. * wcsmbs/wchar.h: Likewise. * sysdeps/powerpc/bits/mathdef.h: Moved to... * sysdeps/powerpc/fpu/bits/mathdef.h: ...here. * sysdeps/powerpc/bits/mathinline.h: Moved to... * sysdeps/powerpc/fpu/bits/mathinline.h: ...here. 1999-10-31 Andreas Jaeger <aj@suse.de> * manual/math.texi (Errors in Math Functions): Correct TeX code. 1999-10-31 Andreas Jaeger <aj@suse.de> * math/libm-test.inc: Change comments to use ISO C99 instead of ISO C9x. * math/w_lgamma.c: Likewise. * math/w_lgammaf.c: Likewise. * math/w_lgammal.c: Likewise. * math/test-fenv.c: Likewise. * sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise. * sysdeps/ieee754/ldbl-128/printf_fphex.c: Likewise. * sysdeps/generic/printf_fphex.c: Likewise. 1999-10-31 Andreas Jaeger <aj@suse.de> * manual/arith.texi (Parsing of Floats): Remove C from ISO C comment. * manual/math.texi: Change ISO C9x to ISO C99. * manual/startup.texi: Likewise. * manual/stdio.texi: Likewise. 1999-10-31 Andreas Jaeger <aj@suse.de> * manual/arith.texi: Change ISO C9x to ISO C99. * manual/time.texi (Low-Level Time String Parsing): Likewise.
1999-10-31 17:37:43 +00:00
/* Keep the tests a wee bit ordered (according to ISO C99). */
/* Classification macros: */
finite_test ();
fpclassify_test ();
isfinite_test ();
isinf_test ();
isnan_test ();
isnormal_test ();
issignaling_test ();
signbit_test ();
/* Trigonometric functions: */
acos_test ();
asin_test ();
atan_test ();
atan2_test ();
cos_test ();
sin_test ();
sincos_test ();
tan_test ();
/* Hyperbolic functions: */
acosh_test ();
asinh_test ();
atanh_test ();
cosh_test ();
sinh_test ();
tanh_test ();
/* Exponential and logarithmic functions: */
exp_test ();
exp10_test ();
exp2_test ();
expm1_test ();
frexp_test ();
ldexp_test ();
log_test ();
log10_test ();
log1p_test ();
log2_test ();
logb_test ();
modf_test ();
2013-05-24 20:33:14 +00:00
pow10_test ();
ilogb_test ();
scalb_test ();
scalbn_test ();
scalbln_test ();
significand_test ();
/* Power and absolute value functions: */
cbrt_test ();
fabs_test ();
hypot_test ();
pow_test ();
sqrt_test ();
/* Error and gamma functions: */
erf_test ();
erfc_test ();
gamma_test ();
lgamma_test ();
tgamma_test ();
/* Nearest integer functions: */
ceil_test ();
floor_test ();
nearbyint_test ();
rint_test ();
lrint_test ();
llrint_test ();
round_test ();
lround_test ();
llround_test ();
trunc_test ();
/* Remainder functions: */
2013-05-24 20:33:14 +00:00
drem_test ();
fmod_test ();
remainder_test ();
remquo_test ();
/* Manipulation functions: */
copysign_test ();
nextafter_test ();
nexttoward_test ();
/* maximum, minimum and positive difference functions */
fdim_test ();
fmax_test ();
fmin_test ();
/* Multiply and add: */
fma_test ();
/* Comparison macros: */
isgreater_test ();
isgreaterequal_test ();
isless_test ();
islessequal_test ();
islessgreater_test ();
isunordered_test ();
/* Complex functions: */
cabs_test ();
cacos_test ();
cacosh_test ();
carg_test ();
casin_test ();
casinh_test ();
catan_test ();
catanh_test ();
ccos_test ();
ccosh_test ();
cexp_test ();
cimag_test ();
clog10_test ();
clog_test ();
conj_test ();
cpow_test ();
cproj_test ();
creal_test ();
csin_test ();
csinh_test ();
csqrt_test ();
ctan_test ();
ctanh_test ();
/* Bessel functions: */
j0_test ();
j1_test ();
jn_test ();
y0_test ();
y1_test ();
yn_test ();
if (output_ulps)
fclose (ulps_file);
printf ("\nTest suite completed:\n");
printf (" %d test cases plus %d tests for exception flags and\n"
" %d tests for errno executed.\n",
noTests, noExcTests, noErrnoTests);
if (noErrors)
{
printf (" %d errors occurred.\n", noErrors);
return 1;
}
printf (" All tests passed successfully.\n");
return 0;
}
/*
* Local Variables:
* mode:c
* End:
*/