summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2019-06-04 11:16:11 +0200
committerAraq <rumpf_a@web.de>2019-06-04 11:16:30 +0200
commit5f4e8dc4c9f4a7046b79c247c5b0f0198b74b60b (patch)
tree253963340a38748000ab899bc82bd296009cb7bb /tests
parent55af21c6620a4e80f1a0de67e09760ba5ba08278 (diff)
downloadNim-5f4e8dc4c9f4a7046b79c247c5b0f0198b74b60b.tar.gz
added a nice test case for macro based lookup tables
Diffstat (limited to 'tests')
-rw-r--r--tests/macros/tmacros_various.nim28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/macros/tmacros_various.nim b/tests/macros/tmacros_various.nim
index b722298dc..e40309174 100644
--- a/tests/macros/tmacros_various.nim
+++ b/tests/macros/tmacros_various.nim
@@ -19,6 +19,8 @@ proc foo[T; N: static[int]]()
 a[0]: 42
 a[1]: 45
 x: some string
+([("key", "val"), ("keyB", "2")], [("val", "key"), ("2", "keyB")])
+([("key", "val"), ("keyB", "2")], [("val", "key"), ("2", "keyB")])
 '''
 """
 
@@ -114,3 +116,29 @@ block tdebugstmt:
   a[1] = 45
 
   debug(a[0], a[1], x)
+
+const
+  pairs = {"key": "val", "keyB": "2"}
+
+macro bilookups(arg: static[openArray[(string, string)]]): untyped =
+  var a = newTree(nnkBracket)
+  var b = newTree(nnkBracket)
+  for (k, v) in items(arg):
+    a.add(newTree(nnkTupleConstr, newLit k, newLit v))
+    b.add(newTree(nnkTupleConstr, newLit v, newLit k))
+  result = newTree(nnkTupleConstr, a, b)
+
+macro bilookups2(arg: untyped): untyped =
+  var a = newTree(nnkBracket)
+  var b = newTree(nnkBracket)
+  arg.expectKind(nnkTableConstr)
+  for x in items(arg):
+    x.expectKind(nnkExprColonExpr)
+    a.add(newTree(nnkTupleConstr, x[0], x[1]))
+    b.add(newTree(nnkTupleConstr, x[1], x[0]))
+  result = newTree(nnkTupleConstr, a, b)
+
+const cnst1 = bilookups(pairs)
+echo cnst1
+const cnst2 = bilookups2({"key": "val", "keyB": "2"})
+echo cnst2