* bug#47694: [PATCH] Fix calculator-string-to-number yet again
@ 2021-04-10 20:06 Eli Barzilay
2021-04-11 12:07 ` Mattias Engdegård
0 siblings, 1 reply; 3+ messages in thread
From: Eli Barzilay @ 2021-04-10 20:06 UTC (permalink / raw)
To: 47694
[-- Attachment #1: 0001-Fix-calculator-string-to-number-yet-again.patch --]
[-- Type: application/octet-stream, Size: 3874 bytes --]
From 5ec0ee2413136ca72e877b0a3aabd872d582b904 Mon Sep 17 00:00:00 2001
From: Eli Barzilay <eli@barzilay.org>
Date: Sat, 10 Apr 2021 15:10:35 -0400
Subject: [PATCH] Fix calculator-string-to-number yet again
* lisp/calculator.el (calculator-string-to-number):
The last bugfix changed the code to just blindly replace ".e". This
has some minor problems like making "-." parse as 0.0 instead of -0.0,
and ".1.e1" is parsed as 1 instead of 0.1. Instead, replace the first
"." that is followed by a non-digit with ".0". Since this has had
several problems over the years, add some tests too. (Also, restore
the original if-indentation style.)
---
lisp/calculator.el | 9 ++++---
test/lisp/calculator-tests.el | 51 +++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 4 deletions(-)
create mode 100644 test/lisp/calculator-tests.el
diff --git a/lisp/calculator.el b/lisp/calculator.el
index 6dd8d9a7ec..99c9b6290c 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -836,10 +836,11 @@ The result should not exceed the screen width."
"Convert the given STR to a number, according to the value of
`calculator-input-radix'."
(if calculator-input-radix
- (string-to-number str (cadr (assq calculator-input-radix
- '((bin 2) (oct 8) (hex 16)))))
- ;; Allow entry of "1.e3".
- (let ((str (replace-regexp-in-string (rx "." (any "eE")) "e" str)))
+ (string-to-number str (cadr (assq calculator-input-radix
+ '((bin 2) (oct 8) (hex 16)))))
+ ;; parse numbers similarly to calculators
+ ;; (see tests in test/lisp/calculator-tests.el)
+ (let ((str (replace-regexp-in-string "\\.\\([^0-9].*\\)?$" ".0\\1" str)))
(float (string-to-number str)))))
(defun calculator-push-curnum ()
diff --git a/test/lisp/calculator-tests.el b/test/lisp/calculator-tests.el
new file mode 100644
index 0000000000..9551b1a4c6
--- /dev/null
+++ b/test/lisp/calculator-tests.el
@@ -0,0 +1,51 @@
+;;; calculator-tests.el --- Test suite for calculator. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'calculator)
+
+(ert-deftest calculator-test-calculator-string-to-number ()
+ (dolist (x '(("" 0.0)
+ ("+" 0.0)
+ ("-" 0.0)
+ ("." 0.0)
+ ("+." 0.0)
+ ("-." -0.0)
+ (".-" 0.0)
+ ("--." 0.0)
+ ("-0.0e" -0.0)
+ ("1e1" 10.0)
+ ("1e+1" 10.0)
+ ("1e-1" 0.1)
+ ("+1e1" 10.0)
+ ("-1e1" -10.0)
+ ("+1e-1" 0.1)
+ ("-1e-1" -0.1)
+ (".1.e1" 0.1)
+ (".1..e1" 0.1)
+ ("1e+1.1" 10.0)
+ ("-2e-1.1" -0.2)))
+ (pcase x
+ (`(,str ,expected)
+ (let ((calculator-input-radix nil))
+ (should (equal (calculator-string-to-number str) expected)))))))
+
+(provide 'calculator-tests)
+;; calculator-tests.el ends here
--
2.25.1
[-- Attachment #2: .signature --]
[-- Type: text/plain, Size: 147 bytes --]
--
((x=>x(x))(x=>x(x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!
^ permalink raw reply related [flat|nested] 3+ messages in thread
* bug#47694: [PATCH] Fix calculator-string-to-number yet again
2021-04-10 20:06 bug#47694: [PATCH] Fix calculator-string-to-number yet again Eli Barzilay
@ 2021-04-11 12:07 ` Mattias Engdegård
2021-04-11 16:58 ` Eli Barzilay
0 siblings, 1 reply; 3+ messages in thread
From: Mattias Engdegård @ 2021-04-11 12:07 UTC (permalink / raw)
To: Eli Barzilay; +Cc: 47694-done
Thank you! Applied on master.
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#47694: [PATCH] Fix calculator-string-to-number yet again
2021-04-11 12:07 ` Mattias Engdegård
@ 2021-04-11 16:58 ` Eli Barzilay
0 siblings, 0 replies; 3+ messages in thread
From: Eli Barzilay @ 2021-04-11 16:58 UTC (permalink / raw)
To: Mattias Engdegård; +Cc: 47694-done
Thanks!
On Sun, Apr 11, 2021 at 8:07 AM Mattias Engdegård <mattiase@acm.org> wrote:
>
> Thank you! Applied on master.
>
--
((x=>x(x))(x=>x(x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-04-11 16:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-04-10 20:06 bug#47694: [PATCH] Fix calculator-string-to-number yet again Eli Barzilay
2021-04-11 12:07 ` Mattias Engdegård
2021-04-11 16:58 ` Eli Barzilay
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.