Refactoring of START for conditions in individual tests
authorAndrew Senkevich <andrew.n.senkevich@gmail.com>
Thu, 14 May 2015 14:11:50 +0000 (17:11 +0300)
committerAndrew Senkevich <andrew.n.senkevich@gmail.com>
Thu, 14 May 2015 15:07:06 +0000 (18:07 +0300)
and addition of macros used for runtime architecture check.

2015-05-14  Andrew Senkevich  <andrew.senkevich@intel.com>

    * math/libm-test.inc: START refactored.
    * math/test-double.c (TEST_MATHVEC): Add define.
    * math/test-float.c: Likewise.
    * math/test-idouble.c: Likewise.
    * math/test-ifloat.c: Likewise.
    * math/test-ildoubl.c: Likewise.
    * math/test-ldouble.c: Likewise.
    * sysdeps/generic/math-tests-arch.h (INIT_ARCH_EXT, CHECK_ARCH_EXT):
    New helper macros for runtime architecture check.

ChangeLog
math/libm-test.inc
math/test-double.c
math/test-float.c
math/test-idouble.c
math/test-ifloat.c
math/test-ildoubl.c
math/test-ldouble.c
sysdeps/generic/math-tests-arch.h [new file with mode: 0644]

index 7414167..5262e57 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2015-05-14  Andrew Senkevich  <andrew.senkevich@intel.com>
 
+       * math/libm-test.inc: START refactored.
+       * math/test-double.c (TEST_MATHVEC): Add define.
+       * math/test-float.c: Likewise.
+       * math/test-idouble.c: Likewise.
+       * math/test-ifloat.c: Likewise.
+       * math/test-ildoubl.c: Likewise.
+       * math/test-ldouble.c: Likewise.
+       * sysdeps/generic/math-tests-arch.h
+       (INIT_ARCH_EXT, CHECK_ARCH_EXT): New helper macros for runtime
+       architecture check.
+
        * math/test-double.c (FUNC_TEST): New macro.
        * math/test-float.c: Likewise.
        * math/test-idouble.c: Likewise.
index 127260b..82f1b75 100644 (file)
 #include <argp.h>
 #include <tininess.h>
 #include <math-tests.h>
+#include <math-tests-arch.h>
 
 /* Structure for ulp data for a function, or the real or imaginary
    part of a function.  */
@@ -685,7 +686,7 @@ static void
 test_single_errno (const char *test_name, int errno_value,
                   int expected_value, const char *expected_name)
 {
-#ifndef TEST_INLINE
+#if !defined TEST_INLINE && !TEST_MATHVEC
   if (errno_value == expected_value)
     {
       if (print_screen (1))
@@ -1691,9 +1692,18 @@ struct test_fFF_11_data
                       (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)
+
 /* Start and end the tests for a given function.  */
-#define START(FUNC, EXACT)                     \
-  const char *this_func = #FUNC;               \
+#define START(FUNC, SUFF, EXACT)                               \
+  CHECK_ARCH_EXT;                                              \
+  if (TEST_MATHVEC) return;                                    \
+  const char *this_func = STR_CON3 (FUNC, SUFF, VEC_SUFF);     \
   init_max_error (this_func, EXACT)
 #define END                                    \
   print_max_error (this_func)
@@ -1706,28 +1716,28 @@ struct test_fFF_11_data
     {                                                                  \
       do                                                               \
        {                                                               \
-         START (FUNC, EXACT);                                          \
+         START (FUNC,, EXACT);                                         \
          LOOP_MACRO (FUNC, ARRAY, , ## __VA_ARGS__);                   \
          END_MACRO;                                                    \
        }                                                               \
       while (0);                                                       \
       do                                                               \
        {                                                               \
-         START (FUNC ## _downward, EXACT);                             \
+         START (FUNC, _downward, EXACT);                               \
          LOOP_MACRO (FUNC, ARRAY, FE_DOWNWARD, ## __VA_ARGS__);        \
          END_MACRO;                                                    \
        }                                                               \
       while (0);                                                       \
       do                                                               \
        {                                                               \
-         START (FUNC ## _towardzero, EXACT);                           \
+         START (FUNC, _towardzero, EXACT);                             \
          LOOP_MACRO (FUNC, ARRAY, FE_TOWARDZERO, ## __VA_ARGS__);      \
          END_MACRO;                                                    \
        }                                                               \
       while (0);                                                       \
       do                                                               \
        {                                                               \
-         START (FUNC ## _upward, EXACT);                               \
+         START (FUNC, _upward, EXACT);                         \
          LOOP_MACRO (FUNC, ARRAY, FE_UPWARD, ## __VA_ARGS__);          \
          END_MACRO;                                                    \
        }                                                               \
@@ -6025,7 +6035,7 @@ static const struct test_c_c_data cexp_test_data[] =
 static void
 cexp_test (void)
 {
-  START (cexp, 0);
+  START (cexp,, 0);
   RUN_TEST_LOOP_c_c (cexp, cexp_test_data, );
   END_COMPLEX;
 }
@@ -7544,7 +7554,7 @@ static const struct test_if_f_data jn_test_data[] =
 static void
 jn_test (void)
 {
-  START (jn, 0);
+  START (jn,, 0);
   RUN_TEST_LOOP_if_f (jn, jn_test_data, );
   END;
 }
@@ -9517,7 +9527,7 @@ static const struct test_f_f_data tgamma_test_data[] =
 static void
 tgamma_test (void)
 {
-  START (tgamma, 0);
+  START (tgamma,, 0);
   RUN_TEST_LOOP_f_f (tgamma, tgamma_test_data, );
   END;
 }
@@ -9967,6 +9977,8 @@ main (int argc, char **argv)
   initialize ();
   printf (TEST_MSG);
 
+  INIT_ARCH_EXT;
+
   check_ulp ();
 
   /* Keep the tests a wee bit ordered (according to ISO C99).  */
index cbb81f9..6c1c11c 100644 (file)
@@ -26,6 +26,7 @@
 #define PRINTF_XEXPR "a"
 #define PRINTF_NEXPR "f"
 #define TEST_DOUBLE 1
+#define TEST_MATHVEC 0
 
 #ifndef __NO_MATH_INLINES
 # define __NO_MATH_INLINES
index c54dd3c..07dc8ea 100644 (file)
@@ -26,6 +26,7 @@
 #define PRINTF_XEXPR "a"
 #define PRINTF_NEXPR "f"
 #define TEST_FLOAT 1
+#define TEST_MATHVEC 0
 
 #ifndef __NO_MATH_INLINES
 # define __NO_MATH_INLINES
index b23bd21..bb73f9c 100644 (file)
@@ -26,6 +26,7 @@
 #define PRINTF_XEXPR "a"
 #define PRINTF_NEXPR "f"
 #define TEST_DOUBLE 1
+#define TEST_MATHVEC 0
 #define TEST_INLINE
 
 #ifdef __NO_MATH_INLINES
index 57a7a77..74e8e4b 100644 (file)
@@ -26,6 +26,7 @@
 #define PRINTF_XEXPR "a"
 #define PRINTF_NEXPR "f"
 #define TEST_FLOAT 1
+#define TEST_MATHVEC 0
 #define TEST_INLINE 1
 
 #ifdef __NO_MATH_INLINES
index c38a109..f90a9ba 100644 (file)
@@ -27,6 +27,7 @@
 #define PRINTF_NEXPR "Lf"
 #define TEST_INLINE
 #define TEST_LDOUBLE 1
+#define TEST_MATHVEC 0
 
 #ifdef __NO_MATH_INLINES
 # undef __NO_MATH_INLINES
index 20bf0a1..97effb6 100644 (file)
@@ -26,6 +26,7 @@
 #define PRINTF_XEXPR "La"
 #define PRINTF_NEXPR "Lf"
 #define TEST_LDOUBLE 1
+#define TEST_MATHVEC 0
 
 #ifndef __NO_MATH_INLINES
 # define __NO_MATH_INLINES
diff --git a/sysdeps/generic/math-tests-arch.h b/sysdeps/generic/math-tests-arch.h
new file mode 100644 (file)
index 0000000..fb086d9
--- /dev/null
@@ -0,0 +1,24 @@
+/* Runtime architecture check for math tests.
+   Copyright (C) 2014-2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+/* These macros used for architecture check in math tests runtime.
+   INIT_ARCH_EXT should set up for example some global variable which is
+   checked by CHECK_ARCH_EXT which produces return from individual test to
+   prevent run on hardware not supported by tested function implementation. */
+#define INIT_ARCH_EXT
+#define CHECK_ARCH_EXT