diff options
author | metagn <metagngn@gmail.com> | 2023-09-19 10:26:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-19 15:26:26 +0800 |
commit | 81756d1810c7c00e0bb706bb79f5437120ae4c0e (patch) | |
tree | 566145add937c45928787dcb79fdf0515617ba74 /tests | |
parent | 51cb493b221e704efce126049f9f320eb1cb1a36 (diff) | |
download | Nim-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.nim | 7 | ||||
-rw-r--r-- | tests/parser/tprocexprasstmt.nim | 13 | ||||
-rw-r--r-- | tests/statictypes/tstatictypes.nim | 21 | ||||
-rw-r--r-- | tests/template/template_issues.nim | 4 | ||||
-rw-r--r-- | tests/template/tgenericparam.nim | 15 | ||||
-rw-r--r-- | tests/template/tqualifiedident.nim | 8 |
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() |