summary refs log tree commit diff stats
path: root/tests/generics
diff options
context:
space:
mode:
Diffstat (limited to 'tests/generics')
-rw-r--r--tests/generics/module_with_generics.nim14
-rw-r--r--tests/generics/t5602_inheritence.nim8
-rw-r--r--tests/generics/tcannot_pass_empty_seq_to_generic.nim2
-rw-r--r--tests/generics/tparam_binding.nim2
-rw-r--r--tests/generics/tspecial_numeric_inference.nim21
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)