summary refs log tree commit diff stats
path: root/tests/bind/tbind.nim
diff options
context:
space:
mode:
authorMiran <narimiran@users.noreply.github.com>2018-10-12 17:02:46 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-10-12 17:02:46 +0200
commit7f18d7cbc1fc8ad87c389b8d4d873e1d1169f794 (patch)
tree8c4839495fd6fc10376dc44cc8f9c7e3c625d18f /tests/bind/tbind.nim
parentd2b04a8bc7a78845d25e8b789184ae54e98073ec (diff)
downloadNim-7f18d7cbc1fc8ad87c389b8d4d873e1d1169f794.tar.gz
Merge tests into a larger file (part 1 of ∞) (#9318)
* merge actiontable tests

* merge arithm tests

* merge array tests

* merge assign tests

* merge bind tests

* merge casestmt tests

* merge closure tests

* merge cnt seq tests

* merge collections tests

* merge concept issues tests

* merge concept tests

* fix failing tests

* smaller outputs

Use `doAssert` where possible.

* fix wrong output

* split `tcomputedgoto`

* revert merging concepts

* fix failing test
Diffstat (limited to 'tests/bind/tbind.nim')
-rw-r--r--tests/bind/tbind.nim69
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/bind/tbind.nim b/tests/bind/tbind.nim
new file mode 100644
index 000000000..6fcf95433
--- /dev/null
+++ b/tests/bind/tbind.nim
@@ -0,0 +1,69 @@
+discard """
+  file: "tbind.nim"
+  output:
+'''
+3
+1
+1
+1
+'''
+"""
+
+
+block tbind:
+# Test the new ``bind`` keyword for templates
+
+  proc p1(x: int8, y: int): int = return x + y
+
+  template tempBind(x, y): untyped =
+    bind p1
+    p1(x, y)
+
+  proc p1(x: int, y: int8): int = return x - y
+
+  # This is tricky: the call to ``p1(1'i8, 2'i8)`` should not fail in line 6,
+  # because it is not ambiguous there. But it is ambiguous after line 8.
+
+  echo tempBind(1'i8, 2'i8) #OUT 3
+
+
+import mbind3
+echo genId() #OUT 1
+
+
+import strtabs
+block tbinoverload:
+  template t() =
+    block:
+      bind newStringTable
+      discard {"Content-Type": "text/html"}.newStringTable()
+
+      discard {:}.newStringTable
+  #discard {"Content-Type": "text/html"}.newStringTable()
+  t()
+
+
+block tmixin:
+  type
+    TFoo1 = object of RootObj
+      v: int
+    TFoo2 = object of TFoo1
+      v2: int
+
+  proc test(f: TFoo1) =
+    echo "1"
+
+  proc Foo[T](f: T) =
+    mixin test
+    test(f)
+
+  var
+    a: TFoo1
+    b: TFoo2
+
+
+  proc test(f: TFoo2) =
+    echo "2"
+
+  Foo(a)
+  Foo(b)