Added more tests to toverflw
This commit is contained in:
parent
951157a4e9
commit
78cbf6734a
1 changed files with 69 additions and 6 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue