diff options
| author | Paul Eggert | 2019-11-04 23:10:12 -0800 |
|---|---|---|
| committer | Paul Eggert | 2019-11-04 23:39:54 -0800 |
| commit | 5ab29400a4e9b29928aaf63d1f89a0b059491b29 (patch) | |
| tree | d48d567ff49bf4f84fe5423de8147a3c89998048 /test/src/floatfns-tests.el | |
| parent | 96c8e4fa414f69790fc8b2cc8ded9c758511326f (diff) | |
| download | emacs-5ab29400a4e9b29928aaf63d1f89a0b059491b29.tar.gz emacs-5ab29400a4e9b29928aaf63d1f89a0b059491b29.zip | |
Don’t signal overflow for (expt 1 bignum)
Similarly for (expt 0 bignum) and (expt -1 bignum).
The result is always a -1, 0 or 1, so do not signal overflow.
* src/data.c (expt_integer): Do not signal an overflow if
-1 <= X <= 1. Be clearer about when overflow is signaled.
* test/src/floatfns-tests.el (bignum-expt): Test this.
Diffstat (limited to 'test/src/floatfns-tests.el')
| -rw-r--r-- | test/src/floatfns-tests.el | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/test/src/floatfns-tests.el b/test/src/floatfns-tests.el index 643866f1146..62201a877d0 100644 --- a/test/src/floatfns-tests.el +++ b/test/src/floatfns-tests.el | |||
| @@ -51,7 +51,12 @@ | |||
| 51 | (ert-deftest bignum-expt () | 51 | (ert-deftest bignum-expt () |
| 52 | (dolist (n (list most-positive-fixnum (1+ most-positive-fixnum) | 52 | (dolist (n (list most-positive-fixnum (1+ most-positive-fixnum) |
| 53 | most-negative-fixnum (1- most-negative-fixnum) | 53 | most-negative-fixnum (1- most-negative-fixnum) |
| 54 | (* 5 most-negative-fixnum) | ||
| 55 | (* 5 (1+ most-positive-fixnum)) | ||
| 54 | -2 -1 0 1 2)) | 56 | -2 -1 0 1 2)) |
| 57 | (should (or (<= n 0) (= (expt 0 n) 0))) | ||
| 58 | (should (= (expt 1 n) 1)) | ||
| 59 | (should (or (< n 0) (= (expt -1 n) (if (zerop (logand n 1)) 1 -1)))) | ||
| 55 | (should (= (expt n 0) 1)) | 60 | (should (= (expt n 0) 1)) |
| 56 | (should (= (expt n 1) n)) | 61 | (should (= (expt n 1) n)) |
| 57 | (should (= (expt n 2) (* n n))) | 62 | (should (= (expt n 2) (* n n))) |