Remove CHOOSE() macro from libm-tests.inc
Use gen-libm-test.pl to generate a list of macros mapping to libm-test-ulps.h as this simplifies adding new types without having to modify a growing number of static headers each time a type is added. This also removes the final usage of the TEST_(DOUBLE|FLOAT|LDOUBLE) macros. Thus, they too are removed.
This commit is contained in:
parent
8938513484
commit
9c665e085f
32
ChangeLog
32
ChangeLog
@ -1,3 +1,35 @@
|
||||
2016-06-08 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
|
||||
|
||||
* math/gen-libm-test.pl (all_floats_pfx): New lookup table.
|
||||
(parse_ulps): Dynamically generate type name matching
|
||||
string from all_floats.
|
||||
(get_ulps): Generate the ulps as an array instead.
|
||||
(output_ulps): Dynamically compose the type based
|
||||
on the number of supported formats, and print
|
||||
the indices as type specific helper macros.
|
||||
|
||||
* math/libm-test.inc: Remove comment about CHOOSE.
|
||||
(ulp_data): Generate the type in libm-test-ulps.h.
|
||||
(ULP_IDX): New macro.
|
||||
(find_ulps): Update usage of max_ulp.
|
||||
|
||||
* math/test-double-vlen2.h (CHOOSE): Remove.
|
||||
* math/test-double-vlen4.h (CHOOSE): Likewise.
|
||||
* math/test-double-vlen8.h (CHOOSE): Likewise.
|
||||
* math/test-float.c (CHOOSE): Likewise.
|
||||
* math/test-float-finite.c (CHOOSE): Likewise.
|
||||
* math/test-double.c (CHOOSE): Likewise.
|
||||
* math/test-double-finite.c (CHOOSE): Likewise.
|
||||
* math/test-idouble.c (CHOOSE): Likewise.
|
||||
* math/test-ifloat.c (CHOOSE): Likewise.
|
||||
* math/test-ildoubl.c (CHOOSE): Likewise.
|
||||
* math/test-ldouble-finite.c (CHOOSE): Likewise.
|
||||
* math/test-ldouble.c (CHOOSE): Likewise.
|
||||
|
||||
* math/test-float.h (TEST_FLOAT): Remove.
|
||||
* math/test-double.h (TEST_DOUBLE): Likewise.
|
||||
* math/test-ldouble.h (TEST_LDOUBLE): Likewise.
|
||||
|
||||
2016-06-08 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
|
||||
|
||||
* math/gen-libm-test.pl: (apply_lit): New subroutine.
|
||||
|
@ -39,7 +39,7 @@ use strict;
|
||||
|
||||
use vars qw ($input $output $auto_input);
|
||||
use vars qw (%results);
|
||||
use vars qw (%beautify @all_floats);
|
||||
use vars qw (%beautify @all_floats %all_floats_pfx);
|
||||
use vars qw ($output_dir $ulps_file $srcdir);
|
||||
use vars qw (%auto_tests);
|
||||
|
||||
@ -47,6 +47,13 @@ use vars qw (%auto_tests);
|
||||
@all_floats = ('double', 'float', 'idouble',
|
||||
'ifloat', 'ildouble', 'ldouble');
|
||||
|
||||
# all_floats_pfx maps C types to their C like prefix for macros.
|
||||
%all_floats_pfx =
|
||||
( "double" => "DBL",
|
||||
"ldouble" => "LDBL",
|
||||
"float" => "FLT",
|
||||
);
|
||||
|
||||
%beautify =
|
||||
( "minus_zero" => "-0",
|
||||
"plus_zero" => "+0",
|
||||
@ -586,7 +593,14 @@ sub generate_testfile {
|
||||
# Parse ulps file
|
||||
sub parse_ulps {
|
||||
my ($file) = @_;
|
||||
my ($test, $type, $float, $eps);
|
||||
my ($test, $type, $float, $eps, $float_regex);
|
||||
|
||||
# Build a basic regex to match type entries in the
|
||||
# generated ULPS file.
|
||||
foreach my $ftype (@all_floats) {
|
||||
$float_regex .= "|" . $ftype;
|
||||
}
|
||||
$float_regex = "^" . substr ($float_regex, 1) . ":";
|
||||
|
||||
# $type has the following values:
|
||||
# "normal": No complex variable
|
||||
@ -611,7 +625,7 @@ sub parse_ulps {
|
||||
($test) = ($_ =~ /^Function:\s*\"([a-zA-Z0-9_]+)\"/);
|
||||
next;
|
||||
}
|
||||
if (/^i?(float|double|ldouble):/) {
|
||||
if (/$float_regex/) {
|
||||
($float, $eps) = split /\s*:\s*/,$_,2;
|
||||
|
||||
if ($eps eq "0") {
|
||||
@ -695,16 +709,13 @@ sub get_ulps {
|
||||
sub get_all_ulps_for_test {
|
||||
my ($test, $type) = @_;
|
||||
my ($ldouble, $double, $float, $ildouble, $idouble, $ifloat);
|
||||
my ($ulps_str);
|
||||
|
||||
if (exists $results{$test}{'has_ulps'}) {
|
||||
# XXX use all_floats (change order!)
|
||||
$ldouble = &get_ulps ($test, $type, "ldouble");
|
||||
$double = &get_ulps ($test, $type, "double");
|
||||
$float = &get_ulps ($test, $type, "float");
|
||||
$ildouble = &get_ulps ($test, $type, "ildouble");
|
||||
$idouble = &get_ulps ($test, $type, "idouble");
|
||||
$ifloat = &get_ulps ($test, $type, "ifloat");
|
||||
return "CHOOSE ($ldouble, $double, $float, $ildouble, $idouble, $ifloat)";
|
||||
foreach $float (@all_floats) {
|
||||
$ulps_str .= &get_ulps ($test, $type, $float) . ", ";
|
||||
}
|
||||
return "{" . substr ($ulps_str, 0, -2) . "}";
|
||||
} else {
|
||||
die "get_all_ulps_for_test called for \"$test\" with no ulps\n";
|
||||
}
|
||||
@ -722,6 +733,22 @@ sub output_ulps {
|
||||
print ULP " from $ulps_filename with gen-libm-test.pl.\n";
|
||||
print ULP " Don't change it - change instead the master files. */\n\n";
|
||||
|
||||
print ULP "struct ulp_data\n";
|
||||
print ULP "{\n";
|
||||
print ULP " const char *name;\n";
|
||||
print ULP " FLOAT max_ulp[" . @all_floats . "];\n";
|
||||
print ULP "};\n\n";
|
||||
|
||||
for ($i = 0; $i <= $#all_floats; $i++) {
|
||||
$type = $all_floats[$i];
|
||||
print ULP "#define ULP_";
|
||||
if ($type =~ /^i/) {
|
||||
print ULP "I_";
|
||||
$type = substr $type, 1;
|
||||
}
|
||||
print ULP "$all_floats_pfx{$type} $i\n";
|
||||
}
|
||||
|
||||
foreach $fct (keys %results) {
|
||||
$type = $results{$fct}{'type'};
|
||||
if ($type eq 'normal') {
|
||||
|
@ -26,7 +26,6 @@
|
||||
name with correct suffix (e.g. cosl or cosf)
|
||||
FLOAT: floating point type to test
|
||||
- TEST_MSG: informal message to be displayed
|
||||
CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
|
||||
chooses one of the parameters as delta for testing
|
||||
equality
|
||||
PRINTF_EXPR Floating point conversion specification to print a variable
|
||||
@ -131,14 +130,6 @@
|
||||
#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. */
|
||||
struct ulp_data
|
||||
{
|
||||
const char *name;
|
||||
FLOAT max_ulp;
|
||||
};
|
||||
|
||||
/* This header defines func_ulps, func_real_ulps and func_imag_ulps
|
||||
arrays. */
|
||||
#include "libm-test-ulps.h"
|
||||
@ -202,8 +193,10 @@ struct ulp_data
|
||||
#define FSTR_MAX (128)
|
||||
|
||||
#if TEST_INLINE
|
||||
# define ULP_IDX __CONCATX (ULP_I_, PREFIX)
|
||||
# define QTYPE_STR "i" TYPE_STR
|
||||
#else
|
||||
# define ULP_IDX __CONCATX (ULP_, PREFIX)
|
||||
# define QTYPE_STR TYPE_STR
|
||||
#endif
|
||||
|
||||
@ -369,7 +362,7 @@ find_ulps (const char *name, const struct ulp_data *data, size_t nmemb)
|
||||
if (entry == NULL)
|
||||
return 0;
|
||||
else
|
||||
return entry->max_ulp;
|
||||
return entry->max_ulp[ULP_IDX];
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -21,6 +21,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing double (finite-math-only)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "test-math-vector.h"
|
||||
|
||||
#define TEST_MSG "testing double vector math (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
|
||||
|
||||
#define EXCEPTION_TESTS_double 0
|
||||
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "test-math-vector.h"
|
||||
|
||||
#define TEST_MSG "testing double vector math (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
|
||||
|
||||
#define EXCEPTION_TESTS_double 0
|
||||
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "test-math-vector.h"
|
||||
|
||||
#define TEST_MSG "testing double vector math (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
|
||||
|
||||
#define EXCEPTION_TESTS_double 0
|
||||
#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
|
||||
|
@ -23,6 +23,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing double (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,7 +21,6 @@
|
||||
#define PRINTF_EXPR "e"
|
||||
#define PRINTF_XEXPR "a"
|
||||
#define PRINTF_NEXPR "f"
|
||||
#define TEST_DOUBLE 1
|
||||
#define BUILD_COMPLEX(real, imag) (CMPLX ((real), (imag)))
|
||||
#define PREFIX DBL
|
||||
#define LIT(x) (x)
|
||||
|
@ -21,6 +21,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing float (finite-math-only)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "test-math-vector.h"
|
||||
|
||||
#define TEST_MSG "testing float vector math (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
|
||||
|
||||
#define EXCEPTION_TESTS_float 0
|
||||
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "test-math-vector.h"
|
||||
|
||||
#define TEST_MSG "testing float vector math (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
|
||||
|
||||
#define EXCEPTION_TESTS_float 0
|
||||
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "test-math-vector.h"
|
||||
|
||||
#define TEST_MSG "testing float vector math (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
|
||||
|
||||
#define EXCEPTION_TESTS_float 0
|
||||
#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
|
||||
|
@ -23,6 +23,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing float (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,7 +21,6 @@
|
||||
#define PRINTF_EXPR "e"
|
||||
#define PRINTF_XEXPR "a"
|
||||
#define PRINTF_NEXPR "f"
|
||||
#define TEST_FLOAT 1
|
||||
#define BUILD_COMPLEX(real, imag) (CMPLXF ((real), (imag)))
|
||||
#define PREFIX FLT
|
||||
#define TYPE_STR "float"
|
||||
|
@ -21,6 +21,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing double (inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinedouble
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,6 +21,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing float (inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinefloat
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,6 +21,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing long double (inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinelongdouble
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,6 +21,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing long double (finite-math-only)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Clongdouble
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -23,6 +23,5 @@
|
||||
#include "test-math-scalar.h"
|
||||
|
||||
#define TEST_MSG "testing long double (without inline functions)\n"
|
||||
#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Clongdouble
|
||||
|
||||
#include "libm-test.c"
|
||||
|
@ -21,7 +21,6 @@
|
||||
#define PRINTF_EXPR "Le"
|
||||
#define PRINTF_XEXPR "La"
|
||||
#define PRINTF_NEXPR "Lf"
|
||||
#define TEST_LDOUBLE 1
|
||||
#define BUILD_COMPLEX(real, imag) (CMPLXL ((real), (imag)))
|
||||
#define PREFIX LDBL
|
||||
#define TYPE_STR "ldouble"
|
||||
|
Loading…
x
Reference in New Issue
Block a user