Skip to content

Commit 975eb9c

Browse files
committed
FIX: Comparing blocks with a 1.#NaN value
resolves: Oldes/Rebol-issues#2494
1 parent 4ac29ab commit 975eb9c

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

src/core/t-decimal.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ REBOOL almost_equal(REBDEC a, REBDEC b, REBCNT max_diff) {
9696
REBI64 int_diff;
9797

9898
#ifndef USE_NO_INFINITY
99-
if(isnan(a) || isnan(b)) return FALSE;
99+
if (isnan(a) && isnan(b)) return max_diff > 0;
100100
#endif // !USE_NO_INFINITY
101101

102102
ua.d = a;

src/tests/units/decimal-test.r3

+10
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,16 @@ Rebol [
257257
--assert not ($0.0 == 0)
258258
--assert not (0.0 == 0)
259259

260+
--test-- "NaN equality"
261+
;@@ https://github.com/Oldes/Rebol-issues/issues/2494
262+
--assert 1.#NaN = 1.#NaN
263+
--assert not 1.#NaN != 1.#NaN
264+
--assert not 1.#NaN == 1.#NaN
265+
--assert 1.#NaN !== 1.#NaN
266+
--assert same? 1.#NaN 1.#NaN
267+
--assert equal? 1.#NaN 1.#NaN
268+
--assert not strict-equal? 1.#NaN 1.#NaN
269+
260270
===end-group===
261271

262272
===start-group=== "trigonometric function"

src/tests/units/series-test.r3

+15-8
Original file line numberDiff line numberDiff line change
@@ -1270,14 +1270,21 @@ Rebol [
12701270

12711271
--test-- "SORT with NaN"
12721272
;@@ https://github.com/Oldes/Rebol-issues/issues/2493
1273-
; using `mold` in this test, because currently `(1.#NaN = 1.#NaN) == false` and so the test would fail!
1274-
--assert "[-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN]" = mold sort [1.#inf -1.0 1.#nan 1.0 -1.#inf 0 1.#NAN]
1275-
--assert "[-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN]" = mold sort [1.#inf -1.0 1.#nan 1.0 -1.#inf 1.#NAN 0]
1276-
--assert "[-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN]" = mold sort [1.#inf -1.0 1.#nan 1.0 1.#NAN -1.#inf 0]
1277-
--assert "[-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN]" = mold sort [1.#inf -1.0 1.#nan 1.#NAN 1.0 -1.#inf 0]
1278-
--assert "[-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN]" = mold sort [1.#inf 1.#NAN -1.0 1.#nan 1.0 -1.#inf 0]
1279-
--assert "[-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN]" = mold sort [1.#NAN 1.#inf -1.0 1.#nan 1.0 -1.#inf 0]
1280-
1273+
;@@ https://github.com/Oldes/Rebol-issues/issues/2494
1274+
--assert [-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN] = sort [1.#inf -1.0 1.#nan 1.0 -1.#inf 0 1.#NAN]
1275+
--assert [-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN] = sort [1.#inf -1.0 1.#nan 1.0 -1.#inf 1.#NAN 0]
1276+
--assert [-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN] = sort [1.#inf -1.0 1.#nan 1.0 1.#NAN -1.#inf 0]
1277+
--assert [-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN] = sort [1.#inf -1.0 1.#nan 1.#NAN 1.0 -1.#inf 0]
1278+
--assert [-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN] = sort [1.#inf 1.#NAN -1.0 1.#nan 1.0 -1.#inf 0]
1279+
--assert [-1.#INF -1.0 0 1.0 1.#INF 1.#NaN 1.#NaN] = sort [1.#NAN 1.#inf -1.0 1.#nan 1.0 -1.#inf 0]
1280+
;reversed
1281+
--assert [1.#NaN 1.#NaN 1.#INF 1.0 0 -1.0 -1.#INF] = sort/reverse [1.#inf -1.0 1.#nan 1.0 -1.#inf 0 1.#NAN]
1282+
--assert [1.#NaN 1.#NaN 1.#INF 1.0 0 -1.0 -1.#INF] = sort/reverse [1.#inf -1.0 1.#nan 1.0 -1.#inf 1.#NAN 0]
1283+
--assert [1.#NaN 1.#NaN 1.#INF 1.0 0 -1.0 -1.#INF] = sort/reverse [1.#inf -1.0 1.#nan 1.0 1.#NAN -1.#inf 0]
1284+
--assert [1.#NaN 1.#NaN 1.#INF 1.0 0 -1.0 -1.#INF] = sort/reverse [1.#inf -1.0 1.#nan 1.#NAN 1.0 -1.#inf 0]
1285+
--assert [1.#NaN 1.#NaN 1.#INF 1.0 0 -1.0 -1.#INF] = sort/reverse [1.#inf 1.#NAN -1.0 1.#nan 1.0 -1.#inf 0]
1286+
--assert [1.#NaN 1.#NaN 1.#INF 1.0 0 -1.0 -1.#INF] = sort/reverse [1.#NAN 1.#inf -1.0 1.#nan 1.0 -1.#inf 0]
1287+
12811288
===end-group===
12821289

12831290

0 commit comments

Comments
 (0)