summary refs log tree commit diff stats
path: root/tests/method/tmultim1.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-01-13 02:10:03 +0100
committerAraq <rumpf_a@web.de>2014-01-13 02:10:03 +0100
commit20b5f31c03fb556ec0aa2428a40adbac004d8987 (patch)
tree58086941e7d6bb8f480ca1173a95722ada9435b2 /tests/method/tmultim1.nim
parent51ee524109cf7e3e86c676bc1676063a01bfd979 (diff)
downloadNim-20b5f31c03fb556ec0aa2428a40adbac004d8987.tar.gz
new tester; all tests categorized
Diffstat (limited to 'tests/method/tmultim1.nim')
-rw-r--r--tests/method/tmultim1.nim29
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
+
+