diff options
-rw-r--r-- | ChangeLog | 24 | ||||
-rw-r--r-- | math/libm-test-driver.c | 58 |
2 files changed, 63 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog index 944e587ae6..6399c1f521 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,29 @@ 2017-02-06 Joseph Myers <joseph@codesourcery.com> + * math/libm-test-driver.c (flag_test_errno): New variable. + (flag_test_exceptions): Likewise. + (flag_test_finite): Likewise. + (flag_test_inline): Likewise. + (flag_test_mathvec): Likewise. + (test_msg): Likewise. + (ulp_idx): Likewise. + (qtype_str): Likewise. + (ULP_IDX): Remove macro. + (QTYPE_STR): Likewise. + (find_ulps): Use ulp_idx not ULP_IDX. + (print_function_ulps): Use qtype_str, printed with %s, not + QTYPE_STR, printed with concatentation to format string. + (print_complex_function_ulps): Likewise. + (test_exceptions): Use flag_test_exceptions not TEST_EXCEPTIONS. + (test_errno): Use flag_test_errno not TEST_ERRNO. + (enable_test): Use flag_test_inline, flag_test_finite and + flag_test_mathvec instead of TEST_INLINE, TEST_FINITE and + TEST_MATHVEC. + (libm_test_init): New function. Factored out of main. + (libm_test_finish): Likewise. + (main): Call libm_test_init and libm_test_finish and move most + code to those functions. + * math/libm-test-driver.c (STRX): New macro. (STR): Likewise. (STR_FLOAT): Likewise. diff --git a/math/libm-test-driver.c b/math/libm-test-driver.c index ea890bab22..7773de19bc 100644 --- a/math/libm-test-driver.c +++ b/math/libm-test-driver.c @@ -107,6 +107,13 @@ arrays. */ #include "libm-test-ulps.h" +/* Flags set by the including file. */ +static const int flag_test_errno = TEST_ERRNO; +static const int flag_test_exceptions = TEST_EXCEPTIONS; +static const int flag_test_finite = TEST_FINITE; +static const int flag_test_inline = TEST_INLINE; +static const int flag_test_mathvec = TEST_MATHVEC; + #define STRX(x) #x #define STR(x) STRX (x) #define STR_FLOAT STR (FLOAT) @@ -122,6 +129,7 @@ #else # define TEST_MSG "testing " STR_FLOAT " (without inline functions)\n" #endif +static const char test_msg[] = TEST_MSG; /* Allow platforms without all rounding modes to test properly, assuming they provide an __FE_UNDEFINED in <bits/fenv.h> which @@ -188,11 +196,11 @@ #define FSTR_MAX (128) #if TEST_INLINE -# define ULP_IDX __CONCATX (ULP_I_, PREFIX) -# define QTYPE_STR "i" TYPE_STR +static const int ulp_idx = __CONCATX (ULP_I_, PREFIX); +static const char qtype_str[] = "i" TYPE_STR; #else -# define ULP_IDX __CONCATX (ULP_, PREFIX) -# define QTYPE_STR TYPE_STR +static const int ulp_idx = __CONCATX (ULP_, PREFIX); +static const char qtype_str[] = TYPE_STR; #endif /* Format specific test macros. */ @@ -404,7 +412,7 @@ find_ulps (const char *name, const struct ulp_data *data, size_t nmemb) if (entry == NULL) return 0; else - return entry->max_ulp[ULP_IDX]; + return entry->max_ulp[ulp_idx]; } static void @@ -511,7 +519,7 @@ print_function_ulps (const char *function_name, FLOAT ulp) char ustrn[FSTR_MAX]; FTOSTR (ustrn, FSTR_MAX, "%.0f", FUNC (ceil) (ulp)); fprintf (ulps_file, "Function: \"%s\":\n", function_name); - fprintf (ulps_file, QTYPE_STR ": %s\n", ustrn); + fprintf (ulps_file, "%s: %s\n", qtype_str, ustrn); } } @@ -527,13 +535,13 @@ print_complex_function_ulps (const char *function_name, FLOAT real_ulp, { FTOSTR (fstrn, FSTR_MAX, "%.0f", FUNC (ceil) (real_ulp)); fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name); - fprintf (ulps_file, QTYPE_STR ": %s\n", fstrn); + fprintf (ulps_file, "%s: %s\n", qtype_str, fstrn); } if (imag_ulp != 0.0) { FTOSTR (fstrn, FSTR_MAX, "%.0f", FUNC (ceil) (imag_ulp)); fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name); - fprintf (ulps_file, QTYPE_STR ": %s\n", fstrn); + fprintf (ulps_file, "%s: %s\n", qtype_str, fstrn); } @@ -689,7 +697,7 @@ test_single_exception (const char *test_name, static void test_exceptions (const char *test_name, int exception) { - if (TEST_EXCEPTIONS && EXCEPTION_TESTS (FLOAT)) + if (flag_test_exceptions && EXCEPTION_TESTS (FLOAT)) { ++noExcTests; #ifdef FE_DIVBYZERO @@ -756,7 +764,7 @@ test_single_errno (const char *test_name, int errno_value, static void test_errno (const char *test_name, int errno_value, int exceptions) { - if (TEST_ERRNO) + if (flag_test_errno) { ++noErrnoTests; if (exceptions & ERRNO_UNCHANGED) @@ -1169,13 +1177,13 @@ enable_test (int exceptions) { if (exceptions & XFAIL_TEST) return 0; - if (TEST_INLINE && (exceptions & NO_TEST_INLINE)) + if (flag_test_inline && (exceptions & NO_TEST_INLINE)) return 0; - if (TEST_FINITE && (exceptions & NON_FINITE) != 0) + if (flag_test_finite && (exceptions & NON_FINITE) != 0) return 0; if (!SNAN_TESTS (FLOAT) && (exceptions & TEST_SNAN) != 0) return 0; - if (TEST_MATHVEC && (exceptions & NO_TEST_MATHVEC) != 0) + if (flag_test_mathvec && (exceptions & NO_TEST_MATHVEC) != 0) return 0; return 1; @@ -2228,10 +2236,11 @@ check_ulp (void) static void do_test (void); -int -main (int argc, char **argv) +/* Do all initialization for a test run with arguments given by ARGC + and ARGV. */ +static void +libm_test_init (int argc, char **argv) { - int remaining; char *ulps_file_path; size_t dir_len = 0; @@ -2275,14 +2284,17 @@ main (int argc, char **argv) initialize (); - printf (TEST_MSG); + fputs (test_msg, stdout); INIT_ARCH_EXT; check_ulp (); +} - do_test (); - +/* Process the test results, returning the exit status. */ +static int +libm_test_finish (void) +{ if (output_ulps) fclose (ulps_file); @@ -2299,3 +2311,11 @@ main (int argc, char **argv) return 0; } + +int +main (int argc, char **argv) +{ + libm_test_init (argc, argv); + do_test (); + return libm_test_finish (); +} |