diff options
Diffstat (limited to 'tests/generics')
-rw-r--r-- | tests/generics/module_with_generics.nim | 14 | ||||
-rw-r--r-- | tests/generics/t5602_inheritence.nim | 8 | ||||
-rw-r--r-- | tests/generics/tcannot_pass_empty_seq_to_generic.nim | 2 | ||||
-rw-r--r-- | tests/generics/tparam_binding.nim | 2 | ||||
-rw-r--r-- | tests/generics/tspecial_numeric_inference.nim | 21 |
5 files changed, 44 insertions, 3 deletions
diff --git a/tests/generics/module_with_generics.nim b/tests/generics/module_with_generics.nim new file mode 100644 index 000000000..e801a4790 --- /dev/null +++ b/tests/generics/module_with_generics.nim @@ -0,0 +1,14 @@ +type + Base[T] = ref object {.inheritable.} + value*: T + + Derived[T] = ref object of Base[T] + derivedValue*: T + +proc makeDerived*[T](v: T): Derived[T] = + new result + result.value = v + +proc setBaseValue*[T](a: Base[T], value: T) = + a.value = value + diff --git a/tests/generics/t5602_inheritence.nim b/tests/generics/t5602_inheritence.nim index 6d48c796e..ee5ba89d5 100644 --- a/tests/generics/t5602_inheritence.nim +++ b/tests/generics/t5602_inheritence.nim @@ -1,10 +1,11 @@ discard """ output: "seq[float]\n0" + targets: "c cpp" """ # https://github.com/nim-lang/Nim/issues/5602 -import typetraits +import typetraits, module_with_generics type Foo[T] = object of RootObj @@ -16,3 +17,8 @@ proc p[T](f: Foo[T]): T = var s: Bar[float] echo p(s).len # the bug was: p(s) should return seq[float], but returns float instead +# Test overloading and code generation when +# downcasting is required for generic types: +var d = makeDerived(10) +setBaseValue(d, 20) + diff --git a/tests/generics/tcannot_pass_empty_seq_to_generic.nim b/tests/generics/tcannot_pass_empty_seq_to_generic.nim index 5f0363af8..e33dbc10b 100644 --- a/tests/generics/tcannot_pass_empty_seq_to_generic.nim +++ b/tests/generics/tcannot_pass_empty_seq_to_generic.nim @@ -1,5 +1,5 @@ discard """ - errormsg: "type mismatch: got (seq[empty])" + errormsg: "type mismatch: got <seq[empty]>" line: 16 """ diff --git a/tests/generics/tparam_binding.nim b/tests/generics/tparam_binding.nim index 643e9b226..55acb8f06 100644 --- a/tests/generics/tparam_binding.nim +++ b/tests/generics/tparam_binding.nim @@ -1,5 +1,5 @@ discard """ - errormsg: "got (ref Matrix[2, 2, system.float], ref Matrix[2, 1, system.float])" + errormsg: "got <ref Matrix[2, 2, system.float], ref Matrix[2, 1, system.float]>" line: 27 """ diff --git a/tests/generics/tspecial_numeric_inference.nim b/tests/generics/tspecial_numeric_inference.nim new file mode 100644 index 000000000..41a84a5e9 --- /dev/null +++ b/tests/generics/tspecial_numeric_inference.nim @@ -0,0 +1,21 @@ +discard """ + output: '''false''' +""" + +when false: + import typetraits + + proc `@`[T: SomeInteger](x, y: T): T = x + + echo(type(5'i64 @ 6'i32)) + + echo(type(5'i32 @ 6'i64)) + +import sets +# bug #7247 +type + n8 = range[0'i8..127'i8] + +var tab = initSet[n8]() + +echo tab.contains(8) |