about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog24
-rw-r--r--math/libm-test-driver.c58
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 ();
+}