]> git.eshelyaron.com Git - emacs.git/commitdiff
Make (mod 1.0 0) consistent with (/ 1.0 0)
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 24 Aug 2019 19:43:50 +0000 (12:43 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 24 Aug 2019 22:55:08 +0000 (15:55 -0700)
* 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.

src/data.c
test/src/data-tests.el

index 38968359a501c7284b90337218b9480d8822c580..dfc8a892f5e685bef357084e55da8abe2ab41963 100644 (file)
@@ -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
index a9d48e29a8ab8c9f18784ff4a1a13736b7a1c106..3a7462b6ada36b3f73dbad120ce2399995e8161c 100644 (file)
@@ -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)))