Skip to content

Commit

Permalink
Refactoring of START for conditions in individual tests
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Andrew Senkevich committed May 14, 2015
1 parent ee97160 commit a6cdcd7
Show file tree
Hide file tree
Showing 9 changed files with 63 additions and 10 deletions.
11 changes: 11 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
32 changes: 22 additions & 10 deletions math/libm-test.inc
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
#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. */
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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)
Expand All @@ -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; \
} \
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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). */
Expand Down
1 change: 1 addition & 0 deletions math/test-double.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions math/test-float.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions math/test-idouble.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions math/test-ifloat.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions math/test-ildoubl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions math/test-ldouble.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
24 changes: 24 additions & 0 deletions sysdeps/generic/math-tests-arch.h
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit a6cdcd7

Please sign in to comment.