Merge pull request #144 from atrosinenko/testsuite-fp-comparison-fix Floating point number comparison fix for testsuite
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
diff --git a/testsuite/libffi.call/cls_many_mixed_args.c b/testsuite/libffi.call/cls_many_mixed_args.c
index e4b1eb1..7fd6c82 100644
--- a/testsuite/libffi.call/cls_many_mixed_args.c
+++ b/testsuite/libffi.call/cls_many_mixed_args.c
@@ -63,7 +63,7 @@ int main (void)
res = (((cls_ret_double)code))(0.1, 0.2, 0.3, 0.4, 5, 0.6, 0.7, 0.8, 0.9, 10,
1.1, 12, 1.3, 14, 1.5, 16);
- if (abs(res - expected) < FLT_EPSILON)
+ if (fabs(res - expected) < FLT_EPSILON)
exit(0);
else
abort();
diff --git a/testsuite/libffi.call/float1.c b/testsuite/libffi.call/float1.c
index 991d059..c48493c 100644
--- a/testsuite/libffi.call/float1.c
+++ b/testsuite/libffi.call/float1.c
@@ -8,6 +8,8 @@
#include "ffitest.h"
#include "float.h"
+#include <math.h>
+
typedef union
{
double d;
@@ -47,7 +49,7 @@ int main (void)
/* These are not always the same!! Check for a reasonable delta */
- CHECK(result[0].d - dblit(f) < DBL_EPSILON);
+ CHECK(fabs(result[0].d - dblit(f)) < DBL_EPSILON);
/* Check the canary. */
for (i = 0; i < sizeof (double); ++i)
diff --git a/testsuite/libffi.call/float2.c b/testsuite/libffi.call/float2.c
index 419c2bd..20a8c40 100644
--- a/testsuite/libffi.call/float2.c
+++ b/testsuite/libffi.call/float2.c
@@ -8,6 +8,8 @@
#include "ffitest.h"
#include "float.h"
+#include <math.h>
+
static long double ldblit(float f)
{
return (long double) (((long double) f)/ (long double) 3.0);
@@ -47,7 +49,7 @@ int main (void)
#endif
/* These are not always the same!! Check for a reasonable delta */
- if (ld - ldblit(f) < LDBL_EPSILON)
+ if (fabsl(ld - ldblit(f)) < LDBL_EPSILON)
puts("long double return value tests ok!");
else
CHECK(0);
diff --git a/testsuite/libffi.call/float3.c b/testsuite/libffi.call/float3.c
index 76bd5f2..bab3206 100644
--- a/testsuite/libffi.call/float3.c
+++ b/testsuite/libffi.call/float3.c
@@ -9,6 +9,8 @@
#include "ffitest.h"
#include "float.h"
+#include <math.h>
+
static double floating_1(float a, double b, long double c)
{
return (double) a + b + (double) c;
@@ -49,7 +51,7 @@ int main (void)
ffi_call(&cif, FFI_FN(floating_1), &rd, values);
- CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON);
+ CHECK(fabs(rd - floating_1(f, d, ld)) < DBL_EPSILON);
args[0] = &ffi_type_longdouble;
values[0] = &ld;
@@ -66,7 +68,7 @@ int main (void)
ffi_call(&cif, FFI_FN(floating_2), &rd, values);
- CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON);
+ CHECK(fabs(rd - floating_2(ld, d, f)) < DBL_EPSILON);
exit (0);
}