Commit Graph

48 Commits

Author SHA1 Message Date
Joseph Myers 9962a2d34e 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
Joseph Myers 215db4029e 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
Joseph Myers aa97dee16e Adjust how gen-auto-libm-tests handles before-rounding/after-rounding cases.
This patch changes gen-auto-libm-tests so that, when generating test
results that depend on whether the architecture has before-rounding or
after-rounding tininess detection, the :before-rounding or
:after-rounding conditions go on the exception / errno flags
generated, rather than generating two separate lines in
auto-libm-test-out for e.g. flt-32:before-rounding and
flt-32:after-rounding.

The rationale for this is as follows.  It would be desirable for
testing a libm function in all rounding modes to require just one
function and array in libm-test.inc, not four (or five), with the
array of test data including expected results for all rounding modes
rather than separate arrays for each rounding mode that also need to
repeat all the test inputs.  For gen-libm-test.pl to generate data for
such an array from auto-libm-test-out, it would be helpful if each
(format, test input) pair has exactly four lines in
auto-libm-test-out, one for each rounding mode, rather than some
rounding modes having just one line and some having two because the
exceptions depend on tininess detection.

Tested x86_64 and x86.

	* math/gen-auto-libm-tests.c: Update comment on output format.
	(output_for_one_input_case): Generate before-rounding and
	after-rounding information as conditions on output flags not
	floating-point format.
	* math/auto-libm-test-out: Regenerated.
	* math/gen-libm-test.pl (cond_value): New function.
	(or_cond_value): Use cond_value.
	(generate_testfile): Handle conditional exceptions.
2014-03-06 14:11:19 +00:00
Joseph Myers e6b6a85705 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
Andreas Schwab 1c0d11bce5 Let gen-libm-test.pl find itself when run outside source directory 2014-01-27 18:43:22 +01:00
Allan McRae d4697bc93d Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
Joseph Myers 335ee09231 Disable libm-test test name beautification for M_* constants.
math/gen-libm-test.pl has code to beautify names of various constants,
transforming the source form in libm-test.inc into the version
appearing in test names in libm-test-ulps files.

This has become decreasingly relevant over time for the M_* constants,
first as I changed the test names so only the arguments and not the
expected results appeared in them, then as tests have moved to
auto-libm-test-* so that automatically generated hex float constants
get used instead of M_* in test inputs.

This patch removes the beautification for all M_* constants.  Tested
x86_64 and x86 and ulps updated accordingly.  Even the one case where
this affected the name in the ulps files will disappear once complex
function tests are moved to auto-libm-test-*.

	* math/gen-libm-test.pl (%beautify): Remove M_* constants.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-19 14:59:22 +00:00
Joseph Myers ffb536d0ac Start generating libm tests automatically with MPFR. 2013-11-29 16:27:55 +00:00
Joseph Myers ce66581742 Test signs of NaNs in libm-test.inc where appropriate. 2013-11-16 12:48:35 +00:00
Joseph Myers ee1466a953 Add libm-test support for ignored return value, add more lrint / llrint / lround / llround tests. 2013-11-16 12:47:38 +00:00
Joseph Myers 14407b7e60 Replace libm-test.inc TEST_INLINE conditionals with NO_TEST_INLINE flag. 2013-11-16 12:46:52 +00:00
Joseph Myers e8bdba36c5 Remove libm-test START_DATA and END_DATA. 2013-05-24 13:10:42 +00:00
Joseph Myers b679a606ca Make libm-test START and END into ordinary macros. 2013-05-24 12:22:04 +00:00
Joseph Myers 351fe55087 Don't include function names in test data in generated libm-test.c. 2013-05-22 21:01:44 +00:00
Joseph Myers b50a71810b Don't include expected results in libm-test test names. 2013-05-22 11:49:36 +00:00
Joseph Myers db62a90753 Handle sincos with generic libm-test logic. 2013-05-19 14:45:41 +00:00
Joseph Myers f16cc3eb81 Simplify gen-libm-test.pl handling of tests with extra outputs. 2013-05-19 14:40:40 +00:00
Joseph Myers 3779b5b64a Make libm-test look up ulps by name at runtime. 2013-05-18 12:10:59 +00:00
Joseph Myers a00bdcf0e0 Simplify libm-test extra-output initialization. 2013-05-17 19:02:19 +00:00
Joseph Myers 323e5cb792 Remove libm-test support for TEST_* inside functions. 2013-05-16 19:09:03 +00:00
Joseph Myers 081988778f Convert TEST_c_c tests from code to data. 2013-05-12 17:38:26 +00:00
Joseph Myers 51df539d98 Start converting libm tests from code to data. 2013-05-10 16:45:04 +00:00
Joseph Myers f44bf14a9c Move some libm-test logic for running tests from gen-libm-test.pl to libm-test.inc. 2013-05-08 12:02:22 +00:00
Joseph Myers 9ea3513c91 Initialize x in frexp, modf, remqou tests. 2013-05-06 20:23:40 +00:00
Joseph Myers b7dab1e4d7 Remove unused libm-test expected-failure mechanism. 2013-05-04 16:45:15 +00:00
Joseph Myers f2da779309 Integrate errno testing better in libm-test.inc. 2013-04-29 20:36:48 +00:00
Thomas Schwinge 572676160d New <math.h> macro named issignaling to check for a signaling NaN (sNaN).
It is based on draft TS 18661 and currently enabled as a GNU extension.
2013-04-02 13:51:02 +02:00
Thomas Schwinge bdef0be784 libm-test: Properly wrap blocks consisting of several statements. 2013-03-21 16:07:48 +01:00
Thomas Schwinge 67e971f18f Better distinguish between NaN/qNaN/sNaN. 2013-03-15 19:06:02 +01:00
Joseph Myers 568035b787 Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
Joseph Myers 0e8e0c1c93 Make libm-test.inc test comparison macros. 2012-10-09 23:34:12 +00:00
Joseph Myers ef1bb3618c Improve libm test coverage of classification macros / functions. 2012-10-08 22:22:23 +00:00
Joseph Myers 795405f956 Don't include exceptions in libm-test-ulps test names. 2012-05-24 12:14:03 +00:00
Joseph Myers 80bad0ccae Test underflow exceptions in libm-test.inc. 2012-05-24 11:26:36 +00:00
Joseph Myers c135cc1b5f Test for overflow exceptions in libm-test.inc. 2012-03-20 10:58:04 +00:00
Paul Eggert 59ba27a63a Replace FSF snail mail address with URLs. 2012-02-09 23:18:22 +00:00
Ulrich Drepper f99ed76079 [BZ #2832, BZ #2987]
2006-06-08  Joseph Myers  <jsm28@gcc.gnu.org>
	[BZ #2832]
	* math/gen-libm-test.pl (clean_up_number): Do not remove trailing
	0s from integers.

2006-08-13  Ulrich Drepper  <drepper@redhat.com>

	[BZ #2987]
	* sysdeps/unix/sysv/linux/clock_settime.c: Add code to use syscall
	for CPU clocks.
	* sysdeps/unix/clock_settime.c: Add support for platform-specific
	setting of CPU clocks.
2006-08-13 08:21:10 +00:00
Roland McGrath 830fce0415 [BZ #2466]
* math/gen-libm-test.pl (parse_args): Take function name for pretty
	output as an argument.
	(generate_testfile): Pass it the name given in the START macro.

	[BZ #2466]
	* math/libm-test.inc (llrint_test, llround_test): Fix last change to
	protect large-precision cases with [LDBL_MANT_DIG > 100].
	(llrint_test_tonearest, llrint_test_towardzero): Likewise.
	(llrint_test_downward, llrint_test_upward): Likewise.

2006-03-15  Steven Munroe  <sjmunroe@us.ibm.com>
	    Alan Modra  <amodra@bigpond.net.au>

	[BZ #2466]
	* math/libm-test.inc (llrint_test, llround_test) [TEST_LDOUBLE]:
	Add new test values.
	(llrint_test_tonearest, llrint_test_towardzero, llrint_test_downward,
	llrint_test_upward): New functions.
	(main): Call them.

	* sysdeps/ieee754/ldbl-128ibm/s_llrintl.c (__llrintl): Handle
	rounding that spans doubles in IBM long double format.
	* sysdeps/ieee754/ldbl-128ibm/s_llroundl.c (__llroundl): Likewise.
	* sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: Removed.
	* sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: Removed.
	* sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: Removed.
	* sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: Removed.

2006-03-16  Roland McGrath  <roland@redhat.com>
2006-03-16 23:17:32 +00:00
Ulrich Drepper a334319f65 (CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4. 2004-12-22 20:10:10 +00:00
Jakub Jelinek 0ecb606cb6 2.5-18.1 2007-07-12 18:26:36 +00:00
Andreas Jaeger 41bdb6e20c Update to LGPL v2.1.
2001-07-06  Paul Eggert  <eggert@twinsun.com>

	* manual/argp.texi: Remove ignored LGPL copyright notice; it's
	not appropriate for documentation anyway.
	* manual/libc-texinfo.sh: "Library General Public License" ->
	"Lesser General Public License".

2001-07-06  Andreas Jaeger  <aj@suse.de>

	* All files under GPL/LGPL version 2: Place under LGPL version
	2.1.
2001-07-06 04:58:11 +00:00
Andreas Jaeger 03965c7165 (parse_ulps): Remove extra \. 2000-08-30 16:32:14 +00:00
Ulrich Drepper a9b5d2eeb1 Update.
1999-10-25  Thorsten Kukuk  <kukuk@suse.de>

	* md5-crypt/md5.h: Remove prototypes for public interface. md5 is
	used only internal.
	* md5-crypt/md5-crypt.c: Use internal names for md5 functions,
	remove weak alias for public names.
	* md5-crypt/md5.c: Remove weak aliase.

1999-10-25  Andreas Jaeger  <aj@suse.de>

	* math/README.libm-test: New file, documents libm-test.inc.

1999-10-25  Andreas Jaeger  <aj@suse.de>

	* math/gen-libm-test.pl: Only generate a new ulps file when -n is
	given.
	(print_ulps_file): Fix loops to not read @tests and @functions
	since those are not initialized with -n now.
	(parse_ulps): Set $results{..}{"kind"}.
1999-10-25 20:18:27 +00:00
Ulrich Drepper 3a8e65a0a7 Update.
1999-10-25  Andreas Jaeger  <aj@suse.de>

	* math/gen-libm-test.pl (parse_ulps): Ignore 0 has ulp.

	* math/libm-test.inc (check_float_internal): Don't print ulps for
	wrong sign of zero.
1999-10-25 19:49:49 +00:00
Ulrich Drepper 6815fabc2e Update.
1999-10-20  Andreas Jaeger  <aj@suse.de>

	* math/libm-test.inc: Rewrite to allow different deltas for real
	and imaginary part of complex functions.
	* math/gen-libm-test.pl: Likewise.
1999-10-20 19:22:24 +00:00
Ulrich Drepper f30e0cd35e Update.
1999-10-19  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/fpu/s_nextafterl.c: Add __nextafterl and nextafterl
	aliases.

	* sysdeps/ieee754/flt-32/e_lgammaf_r.c: Don't handle -Inf special.

	* sysdeps/ieee754/flt-32/e_gammaf_r.c (__ieee754_gammaf_r): Check
	for -Inf and return NaN.

	* math/gen-libm-test.pl: Fix program name in help message.

	* math/libm-test.inc (check_complex): It's Imaginary, not Complex.

	* math/libm-test.inc (gamma_test): Result of gamma(-inf) is +inf.

	* sysdeps/i386/Implies: Correct order of libm directories.
1999-10-20 03:20:31 +00:00
Ulrich Drepper fe559c5e1c Update.
1999-10-19  Andreas Jaeger  <aj@suse.de>

	* include/bits/ipc.h: Remove K&R compatibility.
	* include/libintl.h: Likewise.
	* include/math.h: Likewise.
	* include/mntent.h: Likewise
	* include/netdb.h: Likewise.
	* include/pwd.h: Likewise.
	* include/sched.h: Likewise.
	* include/shadow.h: Likewise
	* include/stdlib.h: Likewise.
	* include/sys/file.h: Likewise.
	* include/sys/gmon.h: Likewise.
	* include/sys/ioctl.h: Likewise.
	* include/sys/mman.h: Likewise.
	* include/sys/resource.h: Likewise.
	* include/sys/socket.h: Likewise.
	* include/sys/stat.h: Likewise.
	* include/sys/sysinfo.h: Likewise.
	* include/sys/time.h: Likewise.
	* include/sys/times.h: Likewise.
	* include/sys/uio.h: Likewise.
	* include/sys/wait.h: Likewise.
	* include/termios.h: Likewise.
	* include/time.h: Likewise.
	* include/ulimit.h: Likewise.
	* include/utmp.h: Likewise.
	* include/wchar.h: Likewise.
	* include/wctype.h: Likewise.

1999-10-19  Andreas Jaeger  <aj@suse.de>

	* math/libm-test.inc: Remove one K&R compatibility.
	(main): Enable nexttoward_test.

	* math/gen-libm-test.pl (output_ulps): Output name of Ulps file to
	libm-test-ulps.h; pretty print output a bit.

1999-10-19  Andreas Jaeger  <aj@suse.de>

	* iconv/iconv_prog.c (main): Set exit value in case that reading
	from stdin failed [PR libc/1404].
1999-10-19 13:53:34 +00:00
Ulrich Drepper 8847214f23 Update.
1999-10-18  Andreas Jaeger  <aj@suse.de>

	Added improved math testsuite:
	* math/libm-test.inc: New file, contains all tests from
	libm-test.c but in a different form.
	* math/libm-test.c: Removed.
	* sysdeps/generic/libm-test-ulps: New file: Fallback ulps file.
	* math/gen-libm-test.pl: New file: Preprocessor.
	* math/test-double.c: Adopted to new testsuite.
	* math/test-idouble.c: Likewise.
	* math/test-float.c: Likewise.
	* math/test-ifloat.c: Likewise.
	* math/test-ldouble.c: Likewise.
	* math/test-ildoubl.c: Likewise.
	* math/Makefile: Added rules to generate new suite.
1999-10-19 06:29:27 +00:00