diff options
author | flywind <43030857+xflywind@users.noreply.github.com> | 2020-11-08 11:02:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-08 11:02:12 +0800 |
commit | 203bddf307493b1065325759fef549499f2a3fc2 (patch) | |
tree | d2e2b169976c6eca5b0b7e1546c0d830e7b42405 /tests | |
parent | 552075d10ea579a40216843815d419261d327c03 (diff) | |
download | Nim-203bddf307493b1065325759fef549499f2a3fc2.tar.gz |
close #11637(add testcase for #11637) (#15879)
* close #11637(add testcase for #11637) * Update tests/vm/t11637.nim
Diffstat (limited to 'tests')
-rw-r--r-- | tests/vm/t11637.nim | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/vm/t11637.nim b/tests/vm/t11637.nim new file mode 100644 index 000000000..c061c6641 --- /dev/null +++ b/tests/vm/t11637.nim @@ -0,0 +1,52 @@ +type Foo = ref object + val: int + +proc `+`(a, b: Foo): Foo = + Foo(val: a.val + b.val) + +proc `*`(a: Foo, b: int): Foo = + Foo(val: a.val * b) + +proc `+=`(a: var Foo, b: Foo) = + a = Foo( + val: a.val + b.val + ) + +proc foobar(a, b, c: Foo): tuple[bar, baz, buzz: Foo] = + + let foo = a + b + c + result.bar = foo * 2 + + result.baz = foo * 3 + result.buzz = result.baz + + result.buzz += a * 10000 + result.baz += b + result.buzz += b + + +block: # Compile-Time + let + a {.compileTime.} = Foo(val: 1) + b {.compileTime.} = Foo(val: 2) + c {.compileTime.} = Foo(val: 3) + r {.compileTime.} = foobar(a, b, c) + + static: + doAssert r.bar.val == 12 + doAssert r.baz.val == 20 + doAssert r.buzz.val == 10020 + +#################################### + +block: # Run-time + let + a = Foo(val: 1) + b = Foo(val: 2) + c = Foo(val: 3) + r = foobar(a, b, c) + + # Expected values + doAssert r.bar.val == 12 + doAssert r.baz.val == 20 + doAssert r.buzz.val == 10020 |