summary refs log tree commit diff stats
path: root/tests/tmultim2.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tmultim2.nim')
-rwxr-xr-xtests/tmultim2.nim30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/tmultim2.nim b/tests/tmultim2.nim
new file mode 100755
index 000000000..bf3b5fd6e
--- /dev/null
+++ b/tests/tmultim2.nim
@@ -0,0 +1,30 @@
+# Test multi methods
+
+type
+  TThing = object
+  TUnit = object of TThing
+    x: int
+  TParticle = object of TThing
+    a, b: int
+    
+method collide(a, b: TThing) {.inline.} =
+  quit "to override!"
+  
+method collide(a: TThing, b: TUnit) {.inline.} =
+  write stdout, "collide: thing, unit "
+
+method collide(a: TUnit, b: TThing) {.inline.} =
+  write stdout, "collide: unit, thing "
+
+proc test(a, b: TThing) {.inline.} =
+  collide(a, b)
+
+var
+  a: TThing
+  b, c: TUnit
+collide(b, c) # ambiguous unit, thing or thing, unit? -> prefer unit, thing!
+test(b, c)
+collide(a, b)
+#OUT collide: unit, thing collide: unit, thing collide: thing, unit
+
+