summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2020-01-24 02:58:08 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2020-01-24 02:58:08 (GMT)
commita85e4a75b27b101b5ad0e5b70bc6fe66c0375727 (patch)
treeb339bc622dad789a3087ac03fac2c07621ad6da5
parent3e22f567c4359c464507bf34f3dc97eb00296143 (diff)
downloadhdf5-a85e4a75b27b101b5ad0e5b70bc6fe66c0375727.zip
hdf5-a85e4a75b27b101b5ad0e5b70bc6fe66c0375727.tar.gz
hdf5-a85e4a75b27b101b5ad0e5b70bc6fe66c0375727.tar.bz2
Fix for failing h5diff tests involving floating-point compares.
-rw-r--r--tools/lib/h5diff_array.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c
index 6cfe3d2..f6dff64 100644
--- a/tools/lib/h5diff_array.c
+++ b/tools/lib/h5diff_array.c
@@ -4559,11 +4559,15 @@ static hbool_t equal_double(double value, double expected, diff_opt_t *opts) {
return FALSE;
}
- if (H5_DBL_ABS_EQUAL(value, expected))
+ /* Are the bits the same? */
+ if (!HDmemcmp(&value, &expected, sizeof(double)))
return TRUE;
+ /* Check for equality within appropriate floating-point
+ * tolerance, if requested.
+ */
if (opts->use_system_epsilon)
- if (ABS((value-expected)) < DBL_EPSILON)
+ if (H5_DBL_ABS_EQUAL(value, expected))
return TRUE;
return FALSE;
@@ -4603,11 +4607,15 @@ hbool_t equal_ldouble(long double value, long double expected, diff_opt_t *opts)
return FALSE;
}
- if (H5_LDBL_ABS_EQUAL(value, expected))
+ /* Are the bits the same? */
+ if (!HDmemcmp(&value, &expected, sizeof(long double)))
return TRUE;
+ /* Check for equality within appropriate floating-point
+ * tolerance, if requested.
+ */
if (opts->use_system_epsilon)
- if (ABS((value-expected)) < DBL_EPSILON)
+ if (H5_LDBL_ABS_EQUAL(value, expected))
return TRUE;
return FALSE;
@@ -4645,11 +4653,15 @@ static hbool_t equal_float(float value, float expected, diff_opt_t *opts) {
return FALSE;
}
- if (H5_FLT_ABS_EQUAL(value, expected))
+ /* Are the bits the same? */
+ if (!HDmemcmp(&value, &expected, sizeof(float)))
return TRUE;
+ /* Check for equality within appropriate floating-point
+ * tolerance, if requested.
+ */
if (opts->use_system_epsilon)
- if (ABS( (value-expected) ) < FLT_EPSILON)
+ if (H5_FLT_ABS_EQUAL(value, expected))
return TRUE;
return FALSE;