diff options
author | Doug Nazar <nazard@nazar.ca> | 2019-08-31 11:08:58 -0400 |
---|---|---|
committer | Doug Nazar <nazard@nazar.ca> | 2019-08-31 11:08:58 -0400 |
commit | 8c7c61d2014a9190fec4c6c97f8a759916ca9fc7 (patch) | |
tree | c6dd652983f94086afdfc154f3affb0c2a59ddd0 /orc-test | |
parent | 63f6cfac0fa9dd3263540eb0d78fc6a20af9016c (diff) | |
download | orc-8c7c61d2014a9190fec4c6c97f8a759916ca9fc7.tar.gz |
orctest: Fix ULP compare and make compatible with clang
Diffstat (limited to 'orc-test')
-rw-r--r-- | orc-test/orcarray.c | 8 | ||||
-rw-r--r-- | orc-test/orctest.c | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/orc-test/orcarray.c b/orc-test/orcarray.c index 7cc5fc1..137c16b 100644 --- a/orc-test/orcarray.c +++ b/orc-test/orcarray.c @@ -227,7 +227,9 @@ orc_array_compare (OrcArray *array1, OrcArray *array2, int flags) for (i=0;i<array1->n;i++){ if (isnan(a[i]) && isnan(b[i])) continue; if (a[i] == b[i]) continue; - if ((a[i] < 0.0) == (b[i] < 0.0) && (*(orc_uint32 *)&a[i] - *(orc_uint32 *)&b[i]) <= 2) continue; + if ((a[i] < 0.0) == (b[i] < 0.0) && + abs((orc_int32)(*(orc_uint32 *)&a[i] - *(orc_uint32 *)&b[i])) <= 2) + continue; return FALSE; } } @@ -244,7 +246,9 @@ orc_array_compare (OrcArray *array1, OrcArray *array2, int flags) for (i=0;i<array1->n;i++){ if (isnan(a[i]) && isnan(b[i])) continue; if (a[i] == b[i]) continue; - if ((a[i] < 0.0) == (b[i] < 0.0) && (*(orc_uint64 *)&a[i] - *(orc_uint64 *)&b[i]) <= 2) continue; + if ((a[i] < 0.0) == (b[i] < 0.0) && + llabs((orc_int64)(*(orc_uint64 *)&a[i] - *(orc_uint64 *)&b[i])) <= 2) + continue; return FALSE; } } diff --git a/orc-test/orctest.c b/orc-test/orctest.c index 4b07823..614421b 100644 --- a/orc-test/orctest.c +++ b/orc-test/orctest.c @@ -522,12 +522,16 @@ float_compare (OrcArray *array1, OrcArray *array2, int i, int j) case 4: if (isnan(*(float *)ptr1) && isnan(*(float *)ptr2)) return TRUE; if (*(float *)ptr1 == *(float *)ptr2) return TRUE; - if ((*(float *)ptr1 < 0.0) == (*(float *)ptr2 < 0.0) && (*(orc_uint32 *)ptr1 - *(orc_uint32 *)ptr2) <= 2) return TRUE; + if ((*(float *)ptr1 < 0.0) == (*(float *)ptr2 < 0.0) && + abs((orc_int32)(*(orc_uint32 *)ptr1 - *(orc_uint32 *)ptr2) <= 2)) + return TRUE; return FALSE; case 8: if (isnan(*(double *)ptr1) && isnan(*(double *)ptr2)) return TRUE; if (*(double *)ptr1 == *(double *)ptr2) return TRUE; - if ((*(double *)ptr1 < 0.0) == (*(double *)ptr2 < 0.0) && (*(orc_uint64 *)ptr1 - *(orc_uint64 *)ptr2) <= 2) return TRUE; + if ((*(double *)ptr1 < 0.0) == (*(double *)ptr2 < 0.0) && + llabs((orc_int64)(*(orc_uint64 *)ptr1 - *(orc_uint64 *)ptr2) <= 2)) + return TRUE; return FALSE; } return FALSE; |