summary refs log tree commit diff stats
path: root/tests/procvar/tprocvar.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/procvar/tprocvar.nim')
-rw-r--r--tests/procvar/tprocvar.nim43
1 files changed, 32 insertions, 11 deletions
diff --git a/tests/procvar/tprocvar.nim b/tests/procvar/tprocvar.nim
index f523aa391..14f24efdc 100644
--- a/tests/procvar/tprocvar.nim
+++ b/tests/procvar/tprocvar.nim
@@ -1,18 +1,39 @@
 discard """
-  errormsg: "type mismatch"
-  line: 17
-  file: "tprocvar.nim"
+  output: '''
+papbpcpdpe7
+'''
 """
 
-type
-  TCallback = proc (a, b: int)
+block genericprocvar:
+  proc foo[T](thing: T) =
+    discard thing
+  var a: proc (thing: int) {.nimcall.} = foo[int]
 
-proc huh(x, y: var int) =
-  x = 0
-  y = x+1
 
-proc so(c: TCallback) =
-  c(2, 4)
+block tprocvar2:
+  proc pa() {.cdecl.} = write(stdout, "pa")
+  proc pb() {.cdecl.} = write(stdout, "pb")
+  proc pc() {.cdecl.} = write(stdout, "pc")
+  proc pd() {.cdecl.} = write(stdout, "pd")
+  proc pe() {.cdecl.} = write(stdout, "pe")
 
-so(huh)
+  const algos = [pa, pb, pc, pd, pe]
+  var x: proc (a, b: int): int {.cdecl.}
+
+  proc ha(c, d: int): int {.cdecl.} =
+    echo(c + d)
+    result = c + d
+
+  for a in items(algos):
+    a()
+
+  x = ha
+  discard x(3, 4)
+
+
+block tprocvars:
+  proc doSomething(v: int, x: proc(v:int):int): int = return x(v)
+  proc doSomething(v: int, x: proc(v:int)) = x(v)
+
+  doAssert doSomething(10, proc(v: int): int = return v div 2) == 5
 
iv>