summary refs log tree commit diff stats
path: root/tests/vm/tseq_badinit.nim
diff options
context:
space:
mode:
authorParashurama <Rhagdamaziel@ymail.com>2017-09-02 22:53:22 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-09-02 22:53:22 +0200
commit0861249de75adabc5d9761c77f7f057644014fd2 (patch)
tree314d6863b0c8fa50afd83b30ff1d6ccf6c3abf89 /tests/vm/tseq_badinit.nim
parent6ce6883fad6a31f92f71fe271c3b2c82a17d0562 (diff)
downloadNim-0861249de75adabc5d9761c77f7f057644014fd2.tar.gz
Fix seq.setLen initialisation in VM (#6224)
Diffstat (limited to 'tests/vm/tseq_badinit.nim')
-rw-r--r--tests/vm/tseq_badinit.nim58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/vm/tseq_badinit.nim b/tests/vm/tseq_badinit.nim
new file mode 100644
index 000000000..15889d60e
--- /dev/null
+++ b/tests/vm/tseq_badinit.nim
@@ -0,0 +1,58 @@
+
+type
+  AObj = object
+    i: int
+    d: float
+  ATup = tuple
+    i: int
+    d: float
+  MyEnum = enum
+    E01, E02, E03
+  Myrange = range[0..10]
+
+  MyProc = proc (x: int): bool
+  MyInt = distinct int
+  MyAlias = MyInt
+  MySet = set[char]
+  MyArray = array[4, char]
+  MySeq = seq[string]
+
+template test(typename, default: untyped) =
+  proc `abc typename`(): seq[typename] =
+    result = newSeq[typename]()
+    result.add(default)
+    result.setLen(3)
+    for i in 0 .. <2:
+      result[i] = default
+
+  const constval = `abc typename`()
+  doAssert(constval == `abc typename`())
+
+  proc `arr typename`(): array[4, typename] =
+    for i in 0 .. <2:
+      result[i] = default
+  const constarr = `arr typename`()
+  doAssert(constarr == `arr typename`())
+
+proc even(x: int): bool = x mod 2 == 0
+proc `==`(x, y: MyInt): bool = ord(x) == ord(y)
+proc `$`(x: MyInt): string = $ord(x)
+proc `$`(x: proc): string =
+  if x.isNil: "(nil)" else: "funcptr"
+
+test(int, 0)
+test(uint, 0)
+test(float, 0.1)
+test(char, '0')
+test(bool, false)
+test(uint8, 2)
+test(string, "data")
+test(MyProc, even)
+test(MyEnum, E02)
+test(AObj, AObj())
+test(ATup, (i:11, d:9.99))
+test(Myrange, 4)
+test(MyInt, MyInt(4))
+test(MyAlias, MyAlias(4))
+test(MyArray, ['0','1','2','3'])
+test(MySeq, @["data"])