summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorcooldome <cdome@bk.ru>2017-04-24 19:17:06 +0100
committerAndreas Rumpf <rumpf_a@web.de>2017-04-24 20:17:06 +0200
commitc6a8bd264e77da69fc95de17a7febe5a32955a40 (patch)
tree043fdf2849f313c7e84b4f0bd847986ee9035b2a /tests
parent1aede6d31136b7932c1e144e0476ff8dd96ecb1f (diff)
downloadNim-c6a8bd264e77da69fc95de17a7febe5a32955a40.tar.gz
Fix for #5695 make subscript operator overloadable for tuples (#5749)
Diffstat (limited to 'tests')
-rw-r--r--tests/tuples/tuple_subscript.nim40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/tuples/tuple_subscript.nim b/tests/tuples/tuple_subscript.nim
new file mode 100644
index 000000000..021793dc3
--- /dev/null
+++ b/tests/tuples/tuple_subscript.nim
@@ -0,0 +1,40 @@
+discard """
+  output: '''5
+5
+str2
+str2
+4'''
+"""
+
+proc`[]` (t: tuple, key: string): string =
+  for name, field in fieldPairs(t):
+    if name == key: 
+      return $field
+  return ""
+
+
+proc`[]` [A,B](t: tuple, key: string, op: (proc(x: A): B)): B =
+  for name, field in fieldPairs(t):
+    when field is A:
+      if name == key: 
+        return op(field)
+
+proc`[]=`[T](t: var tuple, key: string, val: T) =
+  for name, field in fieldPairs(t):
+    when field is T:
+      if name == key: 
+        field = val
+
+var tt = (a: 1, b: "str1")
+
+# test built in operator
+tt[0] = 5
+echo tt[0] 
+echo `[]`(tt, 0)
+
+
+# test overloaded operator
+tt["b"] = "str2"
+echo tt["b"] 
+echo `[]`(tt, "b")
+echo tt["b", proc(s: string) : int = s.len]
\ No newline at end of file