diff options
author | andri lim <jangko128@gmail.com> | 2018-04-28 02:38:15 +0700 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-04-27 21:38:15 +0200 |
commit | 07d6ff4be4941cdefd71fce35cd304d7b3f1c805 (patch) | |
tree | aadf585d2ff0babae3246bd319117d29c492ce1c /tests | |
parent | 822d2b5085f503a1802dd2c77d6348ffe53e4d37 (diff) | |
download | Nim-07d6ff4be4941cdefd71fce35cd304d7b3f1c805.tar.gz |
fixes #7601, array construction of ptr generics (#7671)
* fixes #7601, array construction of ptr generics * add more test
Diffstat (limited to 'tests')
-rw-r--r-- | tests/array/tarraycons_ptr_generic.nim | 51 | ||||
-rw-r--r-- | tests/array/tarraycons_ptr_generic2.nim | 17 |
2 files changed, 68 insertions, 0 deletions
diff --git a/tests/array/tarraycons_ptr_generic.nim b/tests/array/tarraycons_ptr_generic.nim new file mode 100644 index 000000000..eb89a196f --- /dev/null +++ b/tests/array/tarraycons_ptr_generic.nim @@ -0,0 +1,51 @@ +discard """ + output: '''apple +banana +Fruit +2 +4 +3 +none +skin +paper +''' +""" +type + Fruit = object of RootObj + name: string + Apple = object of Fruit + Banana = object of Fruit + +var + ir = Fruit(name: "Fruit") + ia = Apple(name: "apple") + ib = Banana(name: "banana") + +let x = [ia.addr, ib.addr, ir.addr] +for c in x: echo c.name + +type + Vehicle[T] = object of RootObj + tire: T + Car[T] = object of Vehicle[T] + Bike[T] = object of Vehicle[T] + +var v = Vehicle[int](tire: 3) +var c = Car[int](tire: 4) +var b = Bike[int](tire: 2) + +let y = [b.addr, c.addr, v.addr] +for c in y: echo c.tire + +type + Book[T] = ref object of RootObj + cover: T + Hard[T] = ref object of Book[T] + Soft[T] = ref object of Book[T] + +var bn = Book[string](cover: "none") +var hs = Hard[string](cover: "skin") +var bp = Soft[string](cover: "paper") + +let z = [bn, hs, bp] +for c in z: echo c.cover diff --git a/tests/array/tarraycons_ptr_generic2.nim b/tests/array/tarraycons_ptr_generic2.nim new file mode 100644 index 000000000..fce7af669 --- /dev/null +++ b/tests/array/tarraycons_ptr_generic2.nim @@ -0,0 +1,17 @@ +discard """ + file: "tarraycons_ptr_generic2.nim" + line: 17 + errormsg: "type mismatch: got <ptr Hard[system.string]> but expected 'Book[system.string]'" +""" + +type + Book[T] = ref object of RootObj + cover: T + Hard[T] = ref object of Book[T] + Soft[T] = ref object of Book[T] + +var bn = Book[string](cover: "none") +var hs = Hard[string](cover: "skin") +var bp = Soft[string](cover: "paper") + +let z = [bn, hs.addr, bp] |