diff options
author | Araq <rumpf_a@web.de> | 2014-01-13 02:10:03 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-01-13 02:10:03 +0100 |
commit | 20b5f31c03fb556ec0aa2428a40adbac004d8987 (patch) | |
tree | 58086941e7d6bb8f480ca1173a95722ada9435b2 /tests/method/tmultim1.nim | |
parent | 51ee524109cf7e3e86c676bc1676063a01bfd979 (diff) | |
download | Nim-20b5f31c03fb556ec0aa2428a40adbac004d8987.tar.gz |
new tester; all tests categorized
Diffstat (limited to 'tests/method/tmultim1.nim')
-rw-r--r-- | tests/method/tmultim1.nim | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/method/tmultim1.nim b/tests/method/tmultim1.nim new file mode 100644 index 000000000..7f551aa64 --- /dev/null +++ b/tests/method/tmultim1.nim @@ -0,0 +1,29 @@ +discard """ + file: "tmultim1.nim" + output: "7" +""" +# Test multi methods + +type + Expression = ref object {.inheritable.} + Literal = ref object of Expression + x: int + PlusExpr = ref object of Expression + a, b: Expression + +method eval(e: Expression): int = quit "to override!" +method eval(e: Literal): int = return e.x +method eval(e: PlusExpr): int = return eval(e.a) + eval(e.b) + +proc newLit(x: int): Literal = + new(result) + result.x = x + +proc newPlus(a, b: Expression): PlusExpr = + new(result) + result.a = a + result.b = b + +echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4))) #OUT 7 + + |