summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2011-12-31 11:18:18 +0100
committerAraq <rumpf_a@web.de>2011-12-31 11:18:18 +0100
commit92395568bbac524bb3f739a621e8110c60524f69 (patch)
tree1d274399381af45968d5c436009c8f4cc4559190 /tests
parent743182afd79fa3e473659e4571d500a0bcac7a5e (diff)
downloadNim-92395568bbac524bb3f739a621e8110c60524f69.tar.gz
improved actors.sync
Diffstat (limited to 'tests')
-rw-r--r--tests/compile/talias.nim66
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/compile/talias.nim b/tests/compile/talias.nim
new file mode 100644
index 000000000..1a93e5249
--- /dev/null
+++ b/tests/compile/talias.nim
@@ -0,0 +1,66 @@
+# Test the alias analysis
+
+type
+  TAnalysisResult* = enum
+    arNo, arMaybe, arYes
+
+proc isPartOf*[S, T](a: S, b: T): TAnalysisResult {.
+  magic: "IsPartOf", noSideEffect.}
+  ## not yet exported properly. 
+
+template compileTimeAssert(cond: expr) =
+  when not cond:
+    {.compile: "is false: " & astToStr(cond).}
+
+template `<|` (a, b: expr) =
+  compileTimeAssert isPartOf(a, b) == arYes
+
+template `!<|` (a, b: expr) =
+  compileTimeAssert isPartOf(a, b) == arNo
+
+template `?<|` (a, b: expr) =
+  compileTimeAssert isPartOf(a, b) == arMaybe
+
+type
+  TA = object
+  TC = object of TA
+    arr: array[0..3, int]
+    le, ri: ref TC
+    f: string
+    c: char
+    se: seq[TA]
+
+proc p(param1, param2: TC): TC =
+  var
+    local: TC
+    plocal: ptr TC
+    plocal2: ptr TA
+    
+  local.arr <| local
+  local.arr[0] <| local
+  local.arr[2] !<| local.arr[1]
+  
+  plocal2[] ?<| local
+
+  param1 ?<| param2
+  
+  local.arr[0] !<| param1
+  local.arr !<| param1
+  local.le[] ?<| param1
+  
+  param1 !<| local.arr[0]
+  param1 !<| local.arr
+  param1 ?<| local.le[]
+  
+  result !<| local
+  result <| result
+
+var
+  a, b: int
+  x: TC
+  
+a <| a
+a !<| b
+
+discard p(x, x)
+