[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-26 5f28f0d: Fix bug with min and max and NaNs
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] emacs-26 5f28f0d: Fix bug with min and max and NaNs |
Date: |
Sun, 17 Sep 2017 18:26:45 -0400 (EDT) |
branch: emacs-26
commit 5f28f0db73c03b98b27e04a458ebb209b5d9acde
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>
Fix bug with min and max and NaNs
* src/data.c (minmax_driver): Fix bug with (min 0 NaN), which
mistakenly yielded 0. Also, pacify GCC in a better way.
* test/src/data-tests.el (data-tests-min): Test for the bug.
---
src/data.c | 12 ++++++------
test/src/data-tests.el | 6 +++++-
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/data.c b/src/data.c
index 95bf06e..e070be6 100644
--- a/src/data.c
+++ b/src/data.c
@@ -3010,16 +3010,16 @@ static Lisp_Object
minmax_driver (ptrdiff_t nargs, Lisp_Object *args,
enum Arith_Comparison comparison)
{
- eassume (0 < nargs);
- Lisp_Object accum = args[0]; /* pacify GCC */
- for (ptrdiff_t argnum = 0; argnum < nargs; argnum++)
+ Lisp_Object accum = args[0];
+ CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (accum);
+ for (ptrdiff_t argnum = 1; argnum < nargs; argnum++)
{
Lisp_Object val = args[argnum];
CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (val);
- if (argnum == 0 || !NILP (arithcompare (val, accum, comparison)))
+ if (!NILP (arithcompare (val, accum, comparison)))
accum = val;
- else if (FLOATP (accum) && isnan (XFLOAT_DATA (accum)))
- return accum;
+ else if (FLOATP (val) && isnan (XFLOAT_DATA (val)))
+ return val;
}
return accum;
}
diff --git a/test/src/data-tests.el b/test/src/data-tests.el
index 5dc2634..8de8c14 100644
--- a/test/src/data-tests.el
+++ b/test/src/data-tests.el
@@ -101,7 +101,11 @@
(should (= 3 (apply #'min '(3 8 3))))
(should-error (min 9 8 'foo))
(should-error (min (make-marker)))
- (should (eql 1 (min (point-min-marker) 1))))
+ (should (eql 1 (min (point-min-marker) 1)))
+ (should (isnan (min 0.0e+NaN)))
+ (should (isnan (min 0.0e+NaN 1 2)))
+ (should (isnan (min 1.0 0.0e+NaN)))
+ (should (isnan (min 1.0 0.0e+NaN 1.1))))
;; Bool vector tests. Compactly represent bool vectors as hex
;; strings.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-26 5f28f0d: Fix bug with min and max and NaNs,
Paul Eggert <=