Fix floating point number comparisons in testsuite/libffi.call/float[123].c.
authorAnatoly Trosinenko <anatoly.trosinenko@gmail.com>
Fri, 14 Nov 2014 10:18:04 +0000 (13:18 +0300)
committerAnatoly Trosinenko <anatoly.trosinenko@gmail.com>
Fri, 14 Nov 2014 10:18:04 +0000 (13:18 +0300)
Rewrite the checks for approximate equality of floating point return
values to be in the form "fabs(a - b) < EPS" instead of just
"a - b < EPS".

testsuite/libffi.call/float1.c
testsuite/libffi.call/float2.c
testsuite/libffi.call/float3.c

index 991d059..c48493c 100644 (file)
@@ -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)
index 419c2bd..20a8c40 100644 (file)
@@ -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);
index 76bd5f2..bab3206 100644 (file)
@@ -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);
 }