diff src/testdir/test_vimscript.vim @ 15969:9cc42db77a54 v8.1.0990

patch 8.1.0990: floating point exception with "%= 0" and "/= 0" commit https://github.com/vim/vim/commit/e21c1580b7acb598a6e3c38565434fe5d0e2ad7a Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 2 11:57:09 2019 +0100 patch 8.1.0990: floating point exception with "%= 0" and "/= 0" Problem: Floating point exception with "%= 0" and "/= 0". Solution: Avoid dividing by zero. (Dominique Pelle, closes https://github.com/vim/vim/issues/4058)
author Bram Moolenaar <Bram@vim.org>
date Sat, 02 Mar 2019 12:00:06 +0100
parents 05d836c8f1c4
children d13aa9c5a1d1
line wrap: on
line diff
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -21,7 +21,7 @@ com! -nargs=1	     Xout     call Xout(<a
 "
 " Create a script that consists of the body of the function a:funcname.
 " Replace any ":return" by a ":finish", any argument variable by a global
-" variable, and and every ":call" by a ":source" for the next following argument
+" variable, and every ":call" by a ":source" for the next following argument
 " in the variable argument list.  This function is useful if similar tests are
 " to be made for a ":return" from a function call or a ":finish" in a script
 " file.
@@ -1457,6 +1457,43 @@ func Test_compound_assignment_operators(
     let x .= 'n'
     call assert_equal('2n', x)
 
+    " Test special cases: division or modulus with 0.
+    let x = 1
+    let x /= 0
+    if has('num64')
+        call assert_equal(0x7FFFFFFFFFFFFFFF, x)
+    else
+        call assert_equal(0x7fffffff, x)
+    endif
+
+    let x = -1
+    let x /= 0
+    if has('num64')
+        call assert_equal(-0x7FFFFFFFFFFFFFFF, x)
+    else
+        call assert_equal(-0x7fffffff, x)
+    endif
+
+    let x = 0
+    let x /= 0
+    if has('num64')
+        call assert_equal(-0x7FFFFFFFFFFFFFFF - 1, x)
+    else
+        call assert_equal(-0x7FFFFFFF - 1, x)
+    endif
+
+    let x = 1
+    let x %= 0
+    call assert_equal(0, x)
+
+    let x = -1
+    let x %= 0
+    call assert_equal(0, x)
+
+    let x = 0
+    let x %= 0
+    call assert_equal(0, x)
+
     " Test for string
     let x = 'str'
     let x .= 'ing'