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.
This commit is contained in:
parent
b62eac0f87
commit
575179f74d
2 changed files with 10 additions and 1 deletions
|
@ -3117,12 +3117,14 @@ Both X and Y must be numbers or markers. */)
|
|||
{
|
||||
CHECK_NUMBER_COERCE_MARKER (x);
|
||||
CHECK_NUMBER_COERCE_MARKER (y);
|
||||
if (FLOATP (x) || FLOATP (y))
|
||||
return fmod_float (x, y);
|
||||
|
||||
/* A bignum can never be 0, so don't check that case. */
|
||||
if (EQ (y, make_fixnum (0)))
|
||||
xsignal0 (Qarith_error);
|
||||
|
||||
return (FLOATP (x) || FLOATP (y) ? fmod_float : integer_mod) (x, y);
|
||||
return integer_mod (x, y);
|
||||
}
|
||||
|
||||
static Lisp_Object
|
||||
|
|
|
@ -653,6 +653,13 @@ comparing the subr with a much slower lisp implementation."
|
|||
(data-tests-check-sign (% -1 -3) (% nb1 nb3))
|
||||
(data-tests-check-sign (mod -1 -3) (mod nb1 nb3))))
|
||||
|
||||
(ert-deftest data-tests-mod-0 ()
|
||||
(dolist (num (list (1- most-negative-fixnum) -1 0 1
|
||||
(1+ most-positive-fixnum)))
|
||||
(should-error (mod num 0)))
|
||||
(when (ignore-errors (/ 0.0 0))
|
||||
(should (equal (abs (mod 0.0 0)) (abs (- 0.0 (/ 0.0 0)))))))
|
||||
|
||||
(ert-deftest data-tests-ash-lsh ()
|
||||
(should (= (ash most-negative-fixnum 1)
|
||||
(* most-negative-fixnum 2)))
|
||||
|
|
Loading…
Add table
Reference in a new issue