summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-10-30 23:45:41 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-10-30 23:45:41 +0200
commit4435b3ae24b6f76892b7c06c300687c23fab2729 (patch)
tree7fd9676b25e7177963eca799831497354fe1b5ae /test
parentae73aafe99fa6bb5e7422f2bdedea39f03ead72c (diff)
libm: fix rint/scalb testcase failures
These failures no longer happen: Failure: Test: scalb (2.0, 0.5) == NaN plus invalid exception Failure: Test: scalb (3.0, -2.5) == NaN plus invalid exception Failure: Test: rint (0.5) == 0.0 Failure: Test: rint (1.5) == 2.0 Failure: Test: rint (2.5) == 2.0 Failure: Test: rint (3.5) == 4.0 Failure: Test: rint (4.5) == 4.0 Failure: Test: rint (-0.5) == -0.0 Failure: Test: rint (-1.5) == -2.0 Failure: Test: rint (-2.5) == -2.0 Failure: Test: rint (-3.5) == -4.0 Failure: Test: rint (-4.5) == -4.0 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'test')
-rw-r--r--test/math/rint.c33
-rw-r--r--test/math/signgam.c27
2 files changed, 45 insertions, 15 deletions
diff --git a/test/math/rint.c b/test/math/rint.c
index 04c195385..c7bfab920 100644
--- a/test/math/rint.c
+++ b/test/math/rint.c
@@ -1,11 +1,32 @@
#include <math.h>
#include <stdlib.h>
+#include <stdint.h>
#include <stdio.h>
-int main(void) {
- double d1, d2;
- d1 = 0.6; d2 = rint(d1);
- printf("d1 = %f, d2 = %f\n", d1, d2);
- return 0;
-}
+#define check_d1(func, param, expected) \
+do { \
+ int err; hex_union ur; hex_union up; \
+ up.f = param; ur.f = result = func(param); \
+ errors += (err = (result != expected)); \
+ err \
+ ? printf("FAIL: %s(%g/"HEXFMT")=%g/"HEXFMT" (expected %g)\n", \
+ #func, (param), (long long)up.hex, result, (long long)ur.hex, expected) \
+ : printf("PASS: %s(%g)=%g\n", #func, (param), result); \
+} while (0)
+
+#define HEXFMT "%08llx"
+typedef union {
+ double f;
+ uint64_t hex;
+} hex_union;
+double result;
+
+int errors = 0;
+int main(void)
+{
+ check_d1(rint, 0.6, 1.0);
+
+ printf("Errors: %d\n", errors);
+ return errors;
+}
diff --git a/test/math/signgam.c b/test/math/signgam.c
index c60375aec..d79d6afb2 100644
--- a/test/math/signgam.c
+++ b/test/math/signgam.c
@@ -5,14 +5,23 @@
double zero = 0.0;
double mzero;
-int
-main (void)
+int main(void)
{
- double d;
- mzero = copysign (zero, -1.0);
- d = lgamma (zero);
- printf ("%g %d\n", d, signgam);
- d = lgamma (mzero);
- printf ("%g %d\n", d, signgam);
- return 0;
+ double d;
+ int errors = 0;
+
+ mzero = copysign(zero, -1.0);
+
+ d = lgamma(zero);
+ printf("%g %d\n", d, signgam);
+ errors += !(d == HUGE_VAL);
+ errors += !(signgam == 1);
+
+ d = lgamma(mzero);
+ printf("%g %d\n", d, signgam);
+ errors += !(d == HUGE_VAL);
+ errors += !(signgam == -1);
+
+ printf("Errors: %d\n", errors);
+ return errors;
}