* 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:
parent
352b52a0c9
commit
4910608394
11 changed files with 88 additions and 36 deletions
23
tests/exception/testindexerroroutput.nims
Normal file
23
tests/exception/testindexerroroutput.nims
Normal 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'
|
||||
31
tests/exception/tindexerrorformatbounds.nim
Normal file
31
tests/exception/tindexerrorformatbounds.nim
Normal 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)
|
||||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue