Added more tests to toverflw

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

View File

@@ -1,21 +1,84 @@
discard """
file: "toverflw.nim"
output: "the computation overflowed"
output: "ok"
cmd: "nim $target -d:release $options $file"
"""
# Tests nim's ability to detect overflows
{.push overflowChecks: on.}
var
a, b: int
a = high(int)
b = -2
a = high(int)
b = -2
overflowDetected = false
try:
writeLine(stdout, b - a)
except OverflowError:
writeLine(stdout, "the computation overflowed")
overflowDetected = true
{.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"