* Make index out of bounds more useful by including the 'bounds'.
* fixes #9880 index out of bounds (remaining cases); revives #10228
* change err msg to: `index 3 not in 0 .. 1`
This commit is contained in:
Timothee Cour 2019-02-10 13:07:11 -08:00 • committed by Andreas Rumpf
commit 4910608394
11 changed files with 88 additions and 36 deletions

View file

@ -0,0 +1,23 @@
mode = ScriptMode.Verbose
case paramStr(3):
of "test1":
#543
block:
let s = "abc"
discard s[len(s)]
of "test2":
#537
block:
var s = "abc"
s[len(s)] = 'd'
of "test3":
#588
block:
let arr = ['a', 'b', 'c']
discard arr[len(arr)]
of "test4":
#588
block:
var arr = ['a', 'b', 'c']
arr[len(arr)] = 'd'

View file

@ -0,0 +1,31 @@
import os, osproc, strutils
const characters = "abcdefghijklmnopqrstuvwxyz"
var s: string
# # chcks.nim:23
# # test formatErrorIndexBound returns correct bounds
block:
s = characters
try:
discard s[0..999]
except IndexError:
let msg = getCurrentExceptionMsg()
let expected = "index $# not in 0 .. $#" % [$len(s), $(len(s)-1)]
doAssert msg.contains expected, $(msg, expected)
block:
try:
discard paramStr(999)
except IndexError:
let msg = getCurrentExceptionMsg()
let expected = "index 999 not in 0 .. 0"
doAssert msg.contains expected, $(msg, expected)
block:
const nim = getCurrentCompilerExe()
for i in 1..4:
let (outp, errC) = execCmdEx("$# e tests/exception/testindexerroroutput.nims test$#" % [nim, $i])
let expected = "index 3 not in 0 .. 2"
doAssert errC != 0
doAssert outp.contains expected, $(outp, errC, expected, i)

View file

@ -1,14 +1,14 @@
discard """
errormsg: "index out of bounds: (a: 0) <= (i: 2) <= (b: 1) "
errormsg: "index 2 not in 0 .. 1"
line: 18
"""
block:
try:
let a = @[1,2]
echo a[3]
except Exception as e:
doAssert e.msg == "index out of bounds: (i:3) <= (n:1) "
doAssert e.msg == "index 3 not in 0 .. 1"
# note: this is not being tested, because the CT error happens before
block:
type TTestArr = array[0..1, int16]

View file

@ -1,5 +1,5 @@
discard """
errormsg: "index out of bounds: (a: 0) <= (i: 3) <= (b: 1) "
errormsg: "index 3 not in 0 .. 1"
line: 9
"""
@ -8,9 +8,3 @@ discard """
let a = [1,2]
echo a[3]
when false:
# TOOD: this case is not yet handled, giving: "index out of bounds"
proc fun()=
let a = @[1,2]
echo a[3]
static: fun()