1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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"]
- when false:
- 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 == @[]
- when false: # bug #16544: deleting out of bounds index should raise
- var s = @["foo"]
- doAssertRaises(IndexDefect):
- s.delete(1)
- static: main()
- main()
|