aboutsummaryrefslogtreecommitdiff
path: root/tests/neg
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-01-31 14:03:26 +0100
committerMartin Odersky <odersky@gmail.com>2016-02-09 09:43:05 +0100
commit9a6f82b2ecfd7462d0a1f4e0464878fd58231277 (patch)
tree8e9e46b08d7fdf45f4b1fd06b30d7e35c43f05b1 /tests/neg
parent44c14b3fb6e5eb6f2b9734f092eef1d85f6b4d18 (diff)
downloaddotty-9a6f82b2ecfd7462d0a1f4e0464878fd58231277.tar.gz
dotty-9a6f82b2ecfd7462d0a1f4e0464878fd58231277.tar.bz2
dotty-9a6f82b2ecfd7462d0a1f4e0464878fd58231277.zip
Reorganize tests to account for new typing of projection
Tests with failed projections are moved to pos-scala2, which was renamed from pos-special. Files in pos-scala2 are compiled with -language:Scala2 option.
Diffstat (limited to 'tests/neg')
-rw-r--r--tests/neg/cycles.scala10
-rw-r--r--tests/neg/i1050.scala62
-rw-r--r--tests/neg/ski.scala22
-rw-r--r--tests/neg/t2994.scala6
4 files changed, 79 insertions, 21 deletions
diff --git a/tests/neg/cycles.scala b/tests/neg/cycles.scala
index 77f902bf0..550bc98ea 100644
--- a/tests/neg/cycles.scala
+++ b/tests/neg/cycles.scala
@@ -9,11 +9,11 @@ class A {
class B {
type T <: x.type // error: cycle
- val x: T = ???
+ final val x: T = ???
}
class C {
- val x: D#T = ???
+ final val x: D#T = ??? // error: conflicting bounds
class D {
type T <: x.type // error: cycle
val z: x.type = ???
@@ -25,7 +25,7 @@ class E {
type T <: x.type // error: not stable
val z: x.type = ??? // error: not stable
}
- lazy val x: F#T = ???
+ lazy val x: F#T = ??? // error: conflicting bounds
}
class T1 {
@@ -37,6 +37,6 @@ class T2 {
type U = X | Int
}
object T12 {
- ??? : (T1 {})#U
- ??? : (T2 {})#U
+ ??? : (T1 {})#U // error: conflicting bounds
+ ??? : (T2 {})#U // error: conflicting bounds
}
diff --git a/tests/neg/i1050.scala b/tests/neg/i1050.scala
index 48e2b5f2e..bc906f4f4 100644
--- a/tests/neg/i1050.scala
+++ b/tests/neg/i1050.scala
@@ -2,7 +2,7 @@ trait A { type L <: Nothing }
trait B { type L >: Any}
object Test {
lazy val x: A & B = ???
- val y: x.L = 1
+ val y: x.L = 1 // error: underlying conflicting bounds
val z: String = y
}
object Test50 {
@@ -14,7 +14,7 @@ object Test50 {
}
lazy val o: A & B = ???
- def xToString(x: o.X): String = x
+ def xToString(x: o.X): String = x // error: underlying conflicting bounds
def intToString(i: Int): String = xToString(i)
@@ -22,3 +22,61 @@ object Test50 {
val s: String = intToString(1)
}
}
+object Test2 {
+
+ trait C { type A }
+
+ type T = C { type A = Any }
+ type U = C { type A = Nothing }
+ type X = T & U
+
+ def main(args: Array[String]) = {
+ val y: X#A = 1 // error: conflicting bounds
+ val z: String = y
+ }
+}
+object Tiark1 {
+ trait A { type L <: Nothing }
+ trait B { type L >: Any}
+ trait U {
+ val p: B
+ def brand(x: Any): p.L = x // error: not final
+ }
+ trait V extends U {
+ lazy val p: A & B = ???
+ }
+ val v = new V {}
+ v.brand("boom!")
+}
+object Tiark2 {
+ trait A { type L <: Nothing }
+ trait B { type L >: Any}
+ trait U {
+ type X <: B
+ val p: X
+ def brand(x: Any): p.L = x // error: not final
+ }
+ trait V extends U {
+ type X = B & A
+ lazy val p: X = ???
+ }
+ val v = new V {}
+ v.brand("boom!"): Nothing
+}
+/*
+object Import {
+ trait A { type L <: Nothing }
+ trait B { type L >: Any}
+ trait U {
+ val p: B
+ def brand(x: Any): p.L = x // error: not final
+ locally { import p._
+ }
+ }
+ trait V extends U {
+ lazy val p: A & B = ???
+ }
+ val v = new V {}
+ v.brand("boom!")
+}
+*/
diff --git a/tests/neg/ski.scala b/tests/neg/ski.scala
index 6510e66ae..8fb35c7f2 100644
--- a/tests/neg/ski.scala
+++ b/tests/neg/ski.scala
@@ -17,8 +17,8 @@ trait S2[x <: Term, y <: Term] extends Term {
type eval = S2[x, y]
}
trait S3[x <: Term, y <: Term, z <: Term] extends Term {
- type ap[v <: Term] = eval#ap[v]
- type eval = x#ap[z]#ap[y#ap[z]]#eval
+ type ap[v <: Term] = eval#ap[v] // error
+ type eval = x#ap[z]#ap[y#ap[z]]#eval // error // error
}
// The K combinator
@@ -31,8 +31,8 @@ trait K1[x <: Term] extends Term {
type eval = K1[x]
}
trait K2[x <: Term, y <: Term] extends Term {
- type ap[z <: Term] = eval#ap[z]
- type eval = x#eval
+ type ap[z <: Term] = eval#ap[z] // error
+ type eval = x#eval // error
}
// The I combinator
@@ -41,8 +41,8 @@ trait I extends Term {
type eval = I
}
trait I1[x <: Term] extends Term {
- type ap[y <: Term] = eval#ap[y]
- type eval = x#eval
+ type ap[y <: Term] = eval#ap[y] // error
+ type eval = x#eval // error
}
// Constants
@@ -64,9 +64,9 @@ case class Equals[A >: B <:B , B]()
object Test {
type T1 = Equals[Int, Int] // compiles fine
- type T2 = Equals[String, Int] // error
+ type T2 = Equals[String, Int] // was error, now masked
type T3 = Equals[I#ap[c]#eval, c]
- type T3a = Equals[I#ap[c]#eval, d]// error
+ type T3a = Equals[I#ap[c]#eval, d] // was error, now masked
// Ic -> c
type T4 = Equals[I#ap[c]#eval, c]
@@ -106,11 +106,11 @@ object Test {
type eval = A0
}
trait A1 extends Term {
- type ap[x <: Term] = x#ap[A0]#eval
+ type ap[x <: Term] = x#ap[A0]#eval // error
type eval = A1
}
trait A2 extends Term {
- type ap[x <: Term] = x#ap[A1]#eval
+ type ap[x <: Term] = x#ap[A1]#eval // error
type eval = A2
}
@@ -126,7 +126,7 @@ object Test {
type T15 = Equals[NN3#eval, c]
trait An extends Term {
- type ap[x <: Term] = x#ap[An]#eval
+ type ap[x <: Term] = x#ap[An]#eval // error
type eval = An
}
diff --git a/tests/neg/t2994.scala b/tests/neg/t2994.scala
index 9e9c4ec08..9827b1989 100644
--- a/tests/neg/t2994.scala
+++ b/tests/neg/t2994.scala
@@ -7,7 +7,7 @@ object Naturals {
type a[s[_ <: NAT] <: NAT, z <: NAT] = z
}
final class SUCC[n <: NAT] extends NAT {
- type a[s[_ <: NAT] <: NAT, z <: NAT] = s[n#a[s, z]]
+ type a[s[_ <: NAT] <: NAT, z <: NAT] = s[n#a[s, z]] // error: not a legal path
}
type _0 = ZERO
type _1 = SUCC[_0]
@@ -21,8 +21,8 @@ object Naturals {
// crashes scala-2.8.0 beta1
trait MUL[n <: NAT, m <: NAT] extends NAT {
trait curry[n[_[_], _], s[_]] { type f[z <: NAT] = n[s, z] } // can't do double param lists:
- // error: `]' expected but `[` found.
- type a[s[_ <: NAT] <: NAT, z <: NAT] = n#a[curry[m#a, s]#f, z]
+ // error: `]' expected but `[` found. // error: wrong number of type arguments
+ type a[s[_ <: NAT] <: NAT, z <: NAT] = n#a[curry[m#a, s]#f, z] // error: not a legal path // error: not a legal path
}
}