aboutsummaryrefslogtreecommitdiff
path: root/tests/untried/neg/tcpoly_typealias.scala
diff options
context:
space:
mode:
Diffstat (limited to 'tests/untried/neg/tcpoly_typealias.scala')
-rw-r--r--tests/untried/neg/tcpoly_typealias.scala47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/untried/neg/tcpoly_typealias.scala b/tests/untried/neg/tcpoly_typealias.scala
new file mode 100644
index 000000000..6c7f80cc0
--- /dev/null
+++ b/tests/untried/neg/tcpoly_typealias.scala
@@ -0,0 +1,47 @@
+trait A {
+ type m[+x]
+}
+
+trait A2 {
+ type m[+x <: String]
+}
+
+trait A3 {
+ type m[x]
+}
+
+trait FooCov[+x]
+trait FooCon[-x]
+trait FooBound[+x <: String]
+
+trait BOk1 extends A {
+ type m[+x] = FooCov[x]
+}
+
+trait BOk2 extends A2 {
+ type m[+x <: String] = FooBound[x]
+}
+
+trait BOk3 extends A2 {
+ type m[+x] = FooCov[x] // weaker bound
+}
+
+trait BOk4 extends A3 {
+ type m[+x] = FooCov[x] // weaker variance
+}
+
+// there are two aspects to check:
+ // does type alias signature (not considering RHS) correspond to abstract type member in super class
+ // does RHS correspond to the type alias sig
+trait BInv extends A{
+ type m[x] = FooCov[x] // error: invariant x in alias def
+}
+
+trait BCon extends A{
+ type m[-x] = FooCon[x] // error: contravariant x
+}
+
+trait BBound extends A{
+ type m[+x <: String] = FooBound[x] // error: x with stricter bound
+}
+