mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com> Co-authored-by: Heiko Nickerl <mail@hnicke.de> Co-authored-by: Heiko Nickerl <heiko.nickerl@flipapp.de>
77 lines
1.8 KiB
Nim
77 lines
1.8 KiB
Nim
discard """
|
|
targets: "c cpp js"
|
|
"""
|
|
|
|
import stdtest/testutils
|
|
|
|
# TODO: in future work move existing `system` tests here, where they belong
|
|
|
|
|
|
template main =
|
|
block: # closure
|
|
proc outer() =
|
|
var a = 0
|
|
proc inner1 = a.inc
|
|
proc inner2 = discard
|
|
doAssert inner1 is "closure"
|
|
doAssert inner2 isnot "closure"
|
|
doAssert inner1 is (proc)
|
|
doAssert inner2 is (proc)
|
|
let inner1b = inner1
|
|
doAssert inner1b is "closure"
|
|
doAssert inner1b == inner1
|
|
outer()
|
|
|
|
block: # rawProc, rawProc, bug #17911
|
|
proc outer() =
|
|
var a = 0
|
|
var b = 0
|
|
proc inner1() = a.inc
|
|
proc inner2() = a += 2
|
|
proc inner3() = b.inc
|
|
let inner1b = inner1
|
|
doAssert inner2 != inner1
|
|
doAssert inner3 != inner1
|
|
whenVMorJs: discard
|
|
do:
|
|
doAssert rawProc(inner1b) == rawProc(inner1)
|
|
doAssert rawProc(inner2) != rawProc(inner1)
|
|
doAssert rawProc(inner3) != rawProc(inner1)
|
|
|
|
doAssert rawEnv(inner1b) == rawEnv(inner1)
|
|
doAssert rawEnv(inner2) == rawEnv(inner1) # because both use `a`
|
|
# doAssert rawEnv(inner3) != rawEnv(inner1) # because `a` vs `b` # this doesn't hold
|
|
outer()
|
|
|
|
block: # system.delete
|
|
block:
|
|
var s = @[1]
|
|
s.delete(0)
|
|
doAssert s == @[]
|
|
|
|
block:
|
|
var s = @["foo", "bar"]
|
|
s.delete(1)
|
|
doAssert s == @["foo"]
|
|
|
|
block:
|
|
var s: seq[string]
|
|
doAssertRaises(IndexDefect):
|
|
s.delete(0)
|
|
|
|
block:
|
|
doAssert not compiles(@["foo"].delete(-1))
|
|
|
|
block: # bug #6710
|
|
var s = @["foo"]
|
|
s.delete(0)
|
|
doAssert s == @[]
|
|
|
|
block: # bug #16544: deleting out of bounds index should raise
|
|
var s = @["foo"]
|
|
doAssertRaises(IndexDefect):
|
|
s.delete(1)
|
|
|
|
static: main()
|
|
main()
|