Added more tests to toverflw

This commit is contained in:
Yuriy Glukhov 2018-06-15 19:46:17 +03:00
commit 78cbf6734a

View file

@ -1,21 +1,84 @@
discard """ discard """
file: "toverflw.nim" file: "toverflw.nim"
output: "the computation overflowed" output: "ok"
cmd: "nim $target -d:release $options $file"
""" """
# Tests nim's ability to detect overflows # Tests nim's ability to detect overflows
{.push overflowChecks: on.} {.push overflowChecks: on.}
var var
a, b: int a = high(int)
a = high(int) b = -2
b = -2 overflowDetected = false
try: try:
writeLine(stdout, b - a) writeLine(stdout, b - a)
except OverflowError: except OverflowError:
writeLine(stdout, "the computation overflowed") overflowDetected = true
{.pop.} # overflow check {.pop.} # overflow check
#OUT the computation overflowed
doAssert(overflowDetected)
block: # Overflow checks in a proc
var
a = high(int)
b = -2
overflowDetected = false
{.push overflowChecks: on.}
proc foo() =
let c = b - a
{.pop.}
try:
foo()
except OverflowError:
overflowDetected = true
doAssert(overflowDetected)
block: # Overflow checks in a forward declared proc
var
a = high(int)
b = -2
overflowDetected = false
proc foo()
{.push overflowChecks: on.}
proc foo() =
let c = b - a
{.pop.}
try:
foo()
except OverflowError:
overflowDetected = true
doAssert(overflowDetected)
block: # Overflow checks doesn't affect fwd declaration
var
a = high(int)
b = -2
overflowDetected = false
{.push overflowChecks: on.}
proc foo()
{.pop.}
proc foo() =
let c = b - a
try:
foo()
except OverflowError:
overflowDetected = true
doAssert(not overflowDetected)
echo "ok"