diff options
| author | Paul Eggert | 2019-08-24 12:43:50 -0700 |
|---|---|---|
| committer | Paul Eggert | 2019-08-24 15:55:08 -0700 |
| commit | 575179f74d9b80ee468ae39239c853546da8de43 (patch) | |
| tree | a91e8a8f05aec991d1040d56ef0eb59e446bcb55 | |
| parent | b62eac0f870754bc75b1162246f9901a04910044 (diff) | |
| download | emacs-575179f74d9b80ee468ae39239c853546da8de43.tar.gz emacs-575179f74d9b80ee468ae39239c853546da8de43.zip | |
Make (mod 1.0 0) consistent with (/ 1.0 0)
* src/data.c (Fmod): Do not signal an error for (mod 1.0 0), for
the same reason (/ 1.0 0) does not signal an error.
* test/src/data-tests.el (data-tests-mod-0): New test.
| -rw-r--r-- | src/data.c | 4 | ||||
| -rw-r--r-- | test/src/data-tests.el | 7 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/data.c b/src/data.c index 38968359a50..dfc8a892f5e 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -3117,12 +3117,14 @@ Both X and Y must be numbers or markers. */) | |||
| 3117 | { | 3117 | { |
| 3118 | CHECK_NUMBER_COERCE_MARKER (x); | 3118 | CHECK_NUMBER_COERCE_MARKER (x); |
| 3119 | CHECK_NUMBER_COERCE_MARKER (y); | 3119 | CHECK_NUMBER_COERCE_MARKER (y); |
| 3120 | if (FLOATP (x) || FLOATP (y)) | ||
| 3121 | return fmod_float (x, y); | ||
| 3120 | 3122 | ||
| 3121 | /* A bignum can never be 0, so don't check that case. */ | 3123 | /* A bignum can never be 0, so don't check that case. */ |
| 3122 | if (EQ (y, make_fixnum (0))) | 3124 | if (EQ (y, make_fixnum (0))) |
| 3123 | xsignal0 (Qarith_error); | 3125 | xsignal0 (Qarith_error); |
| 3124 | 3126 | ||
| 3125 | return (FLOATP (x) || FLOATP (y) ? fmod_float : integer_mod) (x, y); | 3127 | return integer_mod (x, y); |
| 3126 | } | 3128 | } |
| 3127 | 3129 | ||
| 3128 | static Lisp_Object | 3130 | static Lisp_Object |
diff --git a/test/src/data-tests.el b/test/src/data-tests.el index a9d48e29a8a..3a7462b6ada 100644 --- a/test/src/data-tests.el +++ b/test/src/data-tests.el | |||
| @@ -653,6 +653,13 @@ comparing the subr with a much slower lisp implementation." | |||
| 653 | (data-tests-check-sign (% -1 -3) (% nb1 nb3)) | 653 | (data-tests-check-sign (% -1 -3) (% nb1 nb3)) |
| 654 | (data-tests-check-sign (mod -1 -3) (mod nb1 nb3)))) | 654 | (data-tests-check-sign (mod -1 -3) (mod nb1 nb3)))) |
| 655 | 655 | ||
| 656 | (ert-deftest data-tests-mod-0 () | ||
| 657 | (dolist (num (list (1- most-negative-fixnum) -1 0 1 | ||
| 658 | (1+ most-positive-fixnum))) | ||
| 659 | (should-error (mod num 0))) | ||
| 660 | (when (ignore-errors (/ 0.0 0)) | ||
| 661 | (should (equal (abs (mod 0.0 0)) (abs (- 0.0 (/ 0.0 0))))))) | ||
| 662 | |||
| 656 | (ert-deftest data-tests-ash-lsh () | 663 | (ert-deftest data-tests-ash-lsh () |
| 657 | (should (= (ash most-negative-fixnum 1) | 664 | (should (= (ash most-negative-fixnum 1) |
| 658 | (* most-negative-fixnum 2))) | 665 | (* most-negative-fixnum 2))) |