summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authormetagn <metagngn@gmail.com>2023-09-19 10:26:26 +0300
committerGitHub <noreply@github.com>2023-09-19 15:26:26 +0800
commit81756d1810c7c00e0bb706bb79f5437120ae4c0e (patch)
tree566145add937c45928787dcb79fdf0515617ba74 /tests
parent51cb493b221e704efce126049f9f320eb1cb1a36 (diff)
downloadNim-81756d1810c7c00e0bb706bb79f5437120ae4c0e.tar.gz
second test case haul for templates and generics (#22728)
closes #8390, closes #11726, closes #8446, closes #21221, closes #7461,
closes #7995
Diffstat (limited to 'tests')
-rw-r--r--tests/generics/tgenerics_various.nim7
-rw-r--r--tests/parser/tprocexprasstmt.nim13
-rw-r--r--tests/statictypes/tstatictypes.nim21
-rw-r--r--tests/template/template_issues.nim4
-rw-r--r--tests/template/tgenericparam.nim15
-rw-r--r--tests/template/tqualifiedident.nim8
6 files changed, 62 insertions, 6 deletions
diff --git a/tests/generics/tgenerics_various.nim b/tests/generics/tgenerics_various.nim
index aff851981..b6ace4e7d 100644
--- a/tests/generics/tgenerics_various.nim
+++ b/tests/generics/tgenerics_various.nim
@@ -231,3 +231,10 @@ doSomething(identity((1, 2)))
 proc myProc[T, U](x: T or U) = discard
 
 myProc[int, string](x = 2)
+
+block: # issue #8390
+  proc x[T:SomeFloat](q: openarray[T], y: T = 1): string =
+    doAssert $q.type == $openarray[y.type]
+    $y.type
+
+  doAssert x(@[1.0]) == $1.0.type
diff --git a/tests/parser/tprocexprasstmt.nim b/tests/parser/tprocexprasstmt.nim
index a02dde6f6..22fb4a7c8 100644
--- a/tests/parser/tprocexprasstmt.nim
+++ b/tests/parser/tprocexprasstmt.nim
@@ -1,3 +1,14 @@
 func r(): auto =
   func(): int = 2
-discard r()()
+doAssert r()() == 2
+
+block: # issue #11726
+  let foo = block:
+    var x: int
+    proc = inc x # "identifier expected, but got '='"
+
+  template paint(): untyped =
+    proc (s: string): string = s
+
+  let s = paint()
+  doAssert s("abc") == "abc"
diff --git a/tests/statictypes/tstatictypes.nim b/tests/statictypes/tstatictypes.nim
index 24c99b26b..572b8c4a5 100644
--- a/tests/statictypes/tstatictypes.nim
+++ b/tests/statictypes/tstatictypes.nim
@@ -411,6 +411,27 @@ block: # Ensure static descriminated objects compile
   discard instance
   discard MyObject[KindC]()
 
+block: # more cases of above, issue #8446
+  type
+    Color = enum
+      red, green, blue
+    Blah[color: static[Color]] = object
+      when color == red:
+        a: string
+      else:
+        b: int
+
+  proc foo(blah: Blah) = discard
+  foo(Blah[red](a: "abc"))
+
+  type
+    Mytype[K: static[int]] = object
+      when K < 16:
+        data: uint8
+      else:
+        data: uint64
+  proc usingMyt(k: Mytype) = discard  # triggers Error: cannot generate code for: K
+
 block: # bug #22600
   proc f(n: static int): int = n * 2 # same for template
 
diff --git a/tests/template/template_issues.nim b/tests/template/template_issues.nim
index 5b7c54ed6..58c40941d 100644
--- a/tests/template/template_issues.nim
+++ b/tests/template/template_issues.nim
@@ -302,7 +302,3 @@ block: # bug #21920
     discard
 
   t[void]() # Error: expression has no type: discard
-
-block: # issue #19865
-  template f() = discard default(system.int)
-  f()
diff --git a/tests/template/tgenericparam.nim b/tests/template/tgenericparam.nim
index d33f55cf7..becf75d36 100644
--- a/tests/template/tgenericparam.nim
+++ b/tests/template/tgenericparam.nim
@@ -36,7 +36,7 @@ block: # basic template generic parameter substitution
     template run[T](): T = default(T)
     doAssert run[int]() == 0
 
-import options, tables
+import options, tables, typetraits
 
 block: # complex cases of above with imports
   block: # issue #19576, complex case
@@ -78,3 +78,16 @@ block: # complex cases of above with imports
         else:
           Foo.init(A,"hi")
       let op = fromOption(some(5))
+  block: # issue #7461
+    template p[T](): untyped = none(T)
+    doAssert p[int]() == none(int)
+  block: # issue #7995
+    var res: string
+    template copyRange[T](dest: seq[T], destOffset: int) =
+      when supportsCopyMem(T):
+        res = "A"
+      else:    
+        res = "B"
+    var a = @[1, 2, 3]
+    copyRange(a, 0)
+    doAssert res == "A"
diff --git a/tests/template/tqualifiedident.nim b/tests/template/tqualifiedident.nim
new file mode 100644
index 000000000..463b14ee7
--- /dev/null
+++ b/tests/template/tqualifiedident.nim
@@ -0,0 +1,8 @@
+block: # issue #19865
+  template f() = discard default(system.int)
+  f()
+
+# issue #21221, same as above
+type M = object
+template r() = discard default(tqualifiedident.M)
+r()