summary refs log tree commit diff stats
path: root/tests/template/utemplates.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/template/utemplates.nim')
-rw-r--r--tests/template/utemplates.nim32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/template/utemplates.nim b/tests/template/utemplates.nim
new file mode 100644
index 000000000..68fbb23a6
--- /dev/null
+++ b/tests/template/utemplates.nim
@@ -0,0 +1,32 @@
+import unittest
+
+template t(a: int): expr = "int"
+template t(a: string): expr = "string"
+
+test "templates can be overloaded":
+  check t(10) == "int"
+  check t("test") == "string"
+
+test "previous definitions can be further overloaded or hidden in local scopes":
+  template t(a: bool): expr = "bool"
+
+  check t(true) == "bool"
+  check t(10) == "int"
+  
+  template t(a: int): expr = "inner int"
+  check t(10) == "inner int"
+  check t("test") == "string"
+
+test "templates can be redefined multiple times":
+  template customAssert(cond: bool, msg: string): stmt =
+    if not cond: fail(msg)
+
+  template assertion_failed(body: stmt) {.immediate.} =
+    template fail(msg: string): stmt = body
+
+  assertion_failed: check msg == "first fail path"
+  customAssert false, "first fail path"
+
+  assertion_failed: check msg == "second fail path"  
+  customAssert false, "second fail path"
+