From 58f8ff534c6e026b29c0d2cbba9c0f64c9bc755b Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 11 Mar 2012 15:45:46 +0100 Subject: [PATCH] exp2* tests: More tests. * tests/test-exp2.h (test_function): Test all integral arguments that don't need to overflow or denormalized numbers. * tests/test-exp2.c (MAX_EXP, MIN_EXP): New macros. * tests/test-exp2f.c (MAX_EXP, MIN_EXP): Likewise. * tests/test-exp2l.c (MAX_EXP, MIN_EXP): Likewise. --- ChangeLog | 9 +++++++++ tests/test-exp2.c | 2 ++ tests/test-exp2.h | 52 ++++++++++++++++++++++++---------------------------- tests/test-exp2f.c | 2 ++ tests/test-exp2l.c | 2 ++ 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b86a60f8..055f2558c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-03-11 Bruno Haible + + exp2* tests: More tests. + * tests/test-exp2.h (test_function): Test all integral arguments that + don't need to overflow or denormalized numbers. + * tests/test-exp2.c (MAX_EXP, MIN_EXP): New macros. + * tests/test-exp2f.c (MAX_EXP, MIN_EXP): Likewise. + * tests/test-exp2l.c (MAX_EXP, MIN_EXP): Likewise. + 2012-03-10 Bruno Haible log1pl-ieee: Work around test failure on AIX 7.1. diff --git a/tests/test-exp2.c b/tests/test-exp2.c index b59a9a6c1..0140d4005 100644 --- a/tests/test-exp2.c +++ b/tests/test-exp2.c @@ -30,6 +30,8 @@ SIGNATURE_CHECK (exp2, double, (double)); #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG +#define MAX_EXP DBL_MAX_EXP +#define MIN_EXP DBL_MIN_EXP #define EXP2 exp2 #define RANDOM randomd #include "test-exp2.h" diff --git a/tests/test-exp2.h b/tests/test-exp2.h index f34260382..7a6bb1e72 100644 --- a/tests/test-exp2.h +++ b/tests/test-exp2.h @@ -29,45 +29,41 @@ test_function (void) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); - /* Small integral arguments. */ + /* Integral arguments. */ { DOUBLE x = L_(0.0); DOUBLE y = EXP2 (x); ASSERT (y == L_(1.0)); } - { - DOUBLE x = L_(1.0); - DOUBLE y = EXP2 (x); - ASSERT (y == L_(2.0)); - } - { - DOUBLE x = L_(2.0); - DOUBLE y = EXP2 (x); - ASSERT (y == L_(4.0)); - } /* */ -#if !(defined __linux__ && defined __sparc__) +#if !(defined __linux__ && (defined __sparc__ || defined __powerpc__)) { - DOUBLE x = L_(3.0); - DOUBLE y = EXP2 (x); - ASSERT (y == L_(8.0)); + int e; + DOUBLE x; + DOUBLE y; + for (e = 0, x = L_(0.0), y = L_(1.0); + e <= MAX_EXP - 1; + e++, x = x + L_(1.0), y = y * L_(2.0)) + { + /* Invariant: x = e, y = 2^e. */ + DOUBLE z = EXP2 (x); + ASSERT (z == y); + } } { - DOUBLE x = L_(4.0); - DOUBLE y = EXP2 (x); - ASSERT (y == L_(16.0)); + int e; + DOUBLE x; + DOUBLE y; + for (e = 0, x = L_(0.0), y = L_(1.0); + e >= MIN_EXP - 1; + e--, x = x - L_(1.0), y = y * L_(0.5)) + { + /* Invariant: x = e, y = 2^e. */ + DOUBLE z = EXP2 (x); + ASSERT (z == y); + } } #endif - { - DOUBLE x = - L_(1.0); - DOUBLE y = EXP2 (x); - ASSERT (y == L_(0.5)); - } - { - DOUBLE x = - L_(2.0); - DOUBLE y = EXP2 (x); - ASSERT (y == L_(0.25)); - } /* Randomized tests. */ { diff --git a/tests/test-exp2f.c b/tests/test-exp2f.c index 5d1e5d30c..5e5173720 100644 --- a/tests/test-exp2f.c +++ b/tests/test-exp2f.c @@ -30,6 +30,8 @@ SIGNATURE_CHECK (exp2f, float, (float)); #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG +#define MAX_EXP FLT_MAX_EXP +#define MIN_EXP FLT_MIN_EXP #define EXP2 exp2f #define RANDOM randomf #include "test-exp2.h" diff --git a/tests/test-exp2l.c b/tests/test-exp2l.c index eb8bb3873..9a2ef78fc 100644 --- a/tests/test-exp2l.c +++ b/tests/test-exp2l.c @@ -31,6 +31,8 @@ SIGNATURE_CHECK (exp2l, long double, (long double)); #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG +#define MAX_EXP LDBL_MAX_EXP +#define MIN_EXP LDBL_MIN_EXP #define EXP2 exp2l #define RANDOM randoml #include "test-exp2.h" -- 2.11.0