summaryrefslogtreecommitdiff
path: root/math/test-math-inline.h
AgeCommit message (Collapse)Author
2018-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers
* All files with FSF copyright notices: Update copyright dates using scripts/update-copyrights. * locale/programs/charmap-kw.h: Regenerated. * locale/programs/locfile-kw.h: Likewise.
2017-02-09Move -U__LIBC_INTERNAL_MATH_INLINES to test-math-inline.h.Joseph Myers
The libm tests of inline functions undefine __NO_MATH_INLINES (from math-CPPFLAGS) in test-math-inline.h, but __LIBC_INTERNAL_MATH_INLINES via -U options in the makefile. This is an odd inconsistency between the handling of the two macros. It also depends on the ordering (in compilation commands) of the various variables providing compiler options (which I think is why it's using CPPFLAGS-*.c instead of CFLAGS-*.c). This patch moves the undefine to test-math-inline.h, so improving consistency and eliminating the dependency on the order in which variables go in the compilation commands. The CPPFLAGS-*.c variables are renamed to CFLAGS-*.c, matching those for the non-inline libm function tests. By moving the -U option to the header file, this should ensure that ordering issues don't arise with a subsequent move of the options to these tests to target-specific CFLAGS += ... variable settings (for when tests for each function are build separately and so compilation options need setting for many more makefile targets, for which target-specific variable settings seem to be the most convenient form to generate with iterators). Tested for x86_64. * math/test-math-inline.h (__LIBC_INTERNAL_MATH_INLINES): Undefine macro. * math/Makefile (CPPFLAGS-test-ifloat.c): Rename to ... (CFLAGS-test-ifloat.c): ... this. Remove -U__LIBC_INTERNAL_MATH_INLINES. * math/Makefile (CPPFLAGS-test-idouble.c): Rename to ... (CFLAGS-test-idouble.c): ... this. Remove -U__LIBC_INTERNAL_MATH_INLINES. * math/Makefile (CPPFLAGS-test-ildouble.c): Rename to ... (CFLAGS-test-ildouble.c): ... this. Remove -U__LIBC_INTERNAL_MATH_INLINES.
2017-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers
2016-01-04Update copyright dates with scripts/update-copyrights.Joseph Myers
2015-11-05Run libm-test tests for finite-math-only functions.Joseph Myers
This patch arranges for the libm-test tests to be run for the finite-math-only function variants, in addition to the existing runs for out-of-line and bits/mathinline.h inline variants. gen-libm-test.pl is made to add a flag to all tests with non-finite inputs or outputs so that they can be skipped at runtime when the finite-math-only variants are being tested (skipping is for all rounding modes; that is, -ffinite-math-only is being treated as excluding overflow cases even when the rounding mode is such that the overflowed result is finite). errno setting is not tested for these variants (in general they don't set it, and it's implementation-defined in ISO C whether it's set on underflow, with the glibc definition being that it may not be for -ffinite-math-only; other cases where errno would normally be expected to be set are mostly excluded as having non-finite or overflowing arguments or results). As with the inline function tests, these ones are built with -D__FINITE_MATH_ONLY=1 to select the function variants, rather than -ffinite-math-only. Use of -ffinite-math-only would not be suitable for these tests because it would also affect libm-test.inc code that e.g. tests whether results are infinities or NaNs - if these function variants have bugs that incorrectly produce such results, we want them to show up in the tests, which means the compiler should not be optimizing the tests on the basis of results being finite. The finite-math-only functions share the same ulps settings as the main out-of-line functions. These interfaces were one significant group of untested ABIs listed at <https://sourceware.org/ml/libc-alpha/2013-07/msg00386.html>. I haven't rerun the script to list untested interfaces, but I expect that the vast bulk of interfaces there are still untested and could do with testcases being added (or, if applicable, being made compat symbols; in general, most symbols not starting '_' are safe bets to add tests for, while _* need more investigation of what the actual public API is, if any). I'd like to encourage people to help reduce the accumulation of untested interfaces by adding more tests. Tested for x86_64 and x86. Given my recent lgamma/gamma and log* fixes, the new tests pass (before those fixes, the new tests showed up those bugs, so illustrating the practical utility of having tests for these function variants). * math/libm-test.inc (NON_FINITE): New macro. (enable_test): Do not run tests flagged NON_FINITE if TEST_FINITE. * math/gen-libm-test.pl (show_exceptions): Add argument $non_finite. (parse_args): Update call to show_exceptions. * math/test-math-finite.h: New file. * math/test-math-no-finite.h: Likewise. * math/test-double-finite.c: Likewise. * math/test-float-finite.c: Likewise. * math/test-ldouble-finite.c: Likewise. * math/test-double.c: Include "test-math-no-finite.h". * math/test-float.c: Include "test-math-no-finite.h". * math/test-ldouble.c: Include "test-math-no-finite.h". * math/test-math-inline.h (TEST_FINITE): New macro. * math/test-math-vector.h (TEST_FINITE): Likewise. * math/Makefile (test-longdouble-yes): Add test-ldouble-finite. (libm-tests): Add test-float-finite and test-double-finite. ($(objpfx)test-float-finite.o): New dependency on $(objpfx)libm-test.stmp. ($(objpfx)test-double-finite.o): Likewise. ($(objpfx)test-ldouble-finite.o): Likewise. (libm-test-no-inline-cflags): New variable. (libm-test-finite-cflags): Likewise. (CFLAGS-test-float-finite.c): Likewise. (CFLAGS-test-double-finite.c): Likewise. (CFLAGS-test-ldouble-finite.c): Likewise. (CFLAGS-test-float.c): Use $(libm-test-no-inline-cflags). (CFLAGS-test-double.c): Likewise. (CFLAGS-test-ldouble.c): Likewise.
2015-11-04Refactor libm-test inline tests disabling.Joseph Myers
This patch refactors how libm-test.inc handles disabling errno/exception handling tests, and some other tests, for __FAST_MATH__ inline function tests. The macro TEST_INLINE is changed from being defined/undefined to being defined to 1 or 0, so that it can be tested in "if" conditionals instead of #if. For tests of errno and exception setting, separate macros TEST_ERRNO and TEST_EXCEPTIONS are added, and TEST_ERRNO is also used in the disabling of errno testing for vector function tests. The relevant conditionals are moved up a function, so that they take effect before the code that counts the number of tests, so the inline function tests now accurately report that 0 tests for exceptions and errno were executed (whereas they previously reported a large number desipte not running any such tests). Tested for x86_64 and x86. * math/test-math-errno.h: New file. * math/test-math-inline.h (TEST_INLINE): Define to 1 instead of empty. (TEST_ERRNO): New macro. (TEST_EXCEPTIONS): Likewise. * math/test-math-no-inline.h (TEST_INLINE): Likewise. (TEST_EXCEPTIONS): Likewise. * math/test-math-vector.h (TEST_ERRNO): Likewise. * math/test-double.c: Include "test-math-errno.h". * math/test-float.c: Likewise. * math/test-ldouble.c: Likewise. * math/libm-test.inc (test_single_exception) [!TEST_INLINE]: Make code unconditional. (test_exceptions): Only run code if TEST_EXCEPTIONS. (test_single_errno) [!TEST_INLINE && !TEST_MATHVEC]: Make code unconditional. (test_errno): Only run code if TEST_ERRNO. (enable_test): Use "if" conditional on TEST_INLINE, not #ifdef.
2015-06-24Refactor libm tests.Joseph Myers
This patch refactors the libm tests using libm-test.inc to reduce the level of duplicate definitions. New headers are created for the definitions shared by tests for a particular type; by tests of inline functions; by tests of non-inline functions; by scalar tests; and by vector tests. The unused MATHCONST macro is removed. A new macro VEC_LEN is added to the vector headers to allow the macros defining wrappers for vector functions to be defined once, instead of six times each (differing only in vector length) as before. There is still scope for further refactoring, but this seems a useful start. Tested for x86_64. * math/test-double.h: New file. * math/test-float.h: Likewise. * math/test-ldouble.h: Likewise. * math/test-math-inline.h: Likewise. * math/test-math-no-inline.h: Likewise. * math/test-math-scalar.h: Likewise. * math/test-math-vector.h: Likewise. * math/test-vec-loop.h: Remove file. Contents moved into test-math-vector.h. * math/libm-test.inc (MATHCONST): Do not document macro. * math/test-double.c: Include test-double.h, test-math-no-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-float.c: Include test-float.h, test-math-no-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-idouble.c: Include test-double.h, test-math-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (TEST_INLINE): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-ifloat.c: Include test-float.h, test-math-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (TEST_INLINE): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-ildoubl.c: Include test-ldouble.h, test-math-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_LDOUBLE): Likewise. (TEST_MATHVEC): Likewise. (TEST_INLINE): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-ldouble.c: Include test-ldouble.h, test-math-no-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_LDOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-double-vlen2.h: Include test-double.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-double-vlen4.h: Include test-double.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-double-vlen8.h: Include test-double.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-float-vlen4.h: Include test-float.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-float-vlen8.h: Include test-float.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-float-vlen16.h: Include test-float.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c: Do not include test-vec-loop.h. * sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c: Likewise.