aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-01-27 11:38:50 +0100
committerMartin Odersky <odersky@gmail.com>2015-01-27 11:38:50 +0100
commit57b616c1a7adc78dd46cb3ae5545e312c11e69be (patch)
tree105089136359d4114b2b16f33c45dfac70b695fe /tests
parentf59d1d33d6e9dbb2988f165dc9b5b03792218a4c (diff)
downloaddotty-57b616c1a7adc78dd46cb3ae5545e312c11e69be.tar.gz
dotty-57b616c1a7adc78dd46cb3ae5545e312c11e69be.tar.bz2
dotty-57b616c1a7adc78dd46cb3ae5545e312c11e69be.zip
New tests
Diffstat (limited to 'tests')
-rw-r--r--tests/pos/t3020.scala9
-rw-r--r--tests/pos/t3037.scala13
-rw-r--r--tests/pos/t304.scala5
-rw-r--r--tests/pos/t3106.scala7
-rw-r--r--tests/pos/t3137.scala17
-rw-r--r--tests/pos/t3152.scala20
-rwxr-xr-xtests/pos/t3174.scala14
-rw-r--r--tests/pos/t3177.scala39
-rw-r--r--tests/pos/t8023.scala9
-rw-r--r--tests/pos/t9004.scala29
10 files changed, 162 insertions, 0 deletions
diff --git a/tests/pos/t3020.scala b/tests/pos/t3020.scala
new file mode 100644
index 000000000..016563e27
--- /dev/null
+++ b/tests/pos/t3020.scala
@@ -0,0 +1,9 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ var x = true
+
+ ( { if (x) new scala.util.Random() } .asInstanceOf[Runnable] )
+ }
+}
+
+
diff --git a/tests/pos/t3037.scala b/tests/pos/t3037.scala
new file mode 100644
index 000000000..b71ffe041
--- /dev/null
+++ b/tests/pos/t3037.scala
@@ -0,0 +1,13 @@
+package test
+
+object A {
+ println(("a" match {
+ case "a" => 1
+ case _ => "a"
+ }).asInstanceOf[Object])
+ def foo[T](x: T) = x
+ var x: Int = 1
+ var y: Long = 1L
+ x = foo(x)
+ y = foo(y)
+}
diff --git a/tests/pos/t304.scala b/tests/pos/t304.scala
new file mode 100644
index 000000000..76da44157
--- /dev/null
+++ b/tests/pos/t304.scala
@@ -0,0 +1,5 @@
+object O {
+ def f1 = -1;
+ def f2 = 0-1;
+ def f3 = -f1;
+}
diff --git a/tests/pos/t3106.scala b/tests/pos/t3106.scala
new file mode 100644
index 000000000..a9591d0aa
--- /dev/null
+++ b/tests/pos/t3106.scala
@@ -0,0 +1,7 @@
+class Sample[A] (val d0: ((A,A)) => A) {}
+
+object Sample {
+ implicit def apply[A] (x:A): Sample[A] = {
+ new Sample(p => p._1)
+ }
+}
diff --git a/tests/pos/t3137.scala b/tests/pos/t3137.scala
new file mode 100644
index 000000000..cb7317af0
--- /dev/null
+++ b/tests/pos/t3137.scala
@@ -0,0 +1,17 @@
+trait A {
+ val C: Any
+}
+
+class B extends A {
+ class C
+ object C
+}
+
+trait AA {
+ type C
+ def C: Int => C
+}
+
+class BB extends AA {
+ case class C(v: Int)
+}
diff --git a/tests/pos/t3152.scala b/tests/pos/t3152.scala
new file mode 100644
index 000000000..3d1dcbd6f
--- /dev/null
+++ b/tests/pos/t3152.scala
@@ -0,0 +1,20 @@
+trait Applicative[M[_]]
+
+sealed trait MA[M[_], A] {
+ def sequence[N[_], B](implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = sys.error("stub")
+ // def sequence3[N[_], B]()(implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = sys.error("stub")
+}
+
+object test {
+ implicit def ListMA[A](l: List[A]): MA[List, A] = sys.error("stub")
+ implicit val ao: Applicative[Option] = sys.error("stub")
+
+ /* This compiles OK:
+ (Nil: List[Option[Int]]).sequence3(): Option[List[Int]]
+ */
+
+ // BUG: error: immutable is not an enclosing class
+ // !!! No line number is reported with the error
+ (Nil: List[Option[Int]]).sequence: Option[List[Int]]
+ (List[Option[Int]]()).sequence: Option[List[Int]]
+}
diff --git a/tests/pos/t3174.scala b/tests/pos/t3174.scala
new file mode 100755
index 000000000..8d9b2578d
--- /dev/null
+++ b/tests/pos/t3174.scala
@@ -0,0 +1,14 @@
+object test {
+ def method(): Unit = {
+ class Foo extends AnyRef {
+ object Color {
+ object Blue
+ }
+
+ class Board {
+ val grid = Color.Blue
+ }
+ }
+ new Foo
+ }
+ }
diff --git a/tests/pos/t3177.scala b/tests/pos/t3177.scala
new file mode 100644
index 000000000..12dfce6ee
--- /dev/null
+++ b/tests/pos/t3177.scala
@@ -0,0 +1,39 @@
+trait InvariantFunctor[F[_]] {
+ def xmap[A, B](ma: F[A], f: A => B, g: B => A): F[B]
+}
+
+object InvariantFunctor {
+ import Endo._
+
+ implicit val EndoInvariantFunctor: InvariantFunctor[Endo] = new InvariantFunctor[Endo] {
+ def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b)))
+ }
+
+ // The definition about fails with:
+ // anon-type.scala:9: error: not found: value b
+ // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b)))
+ // ^
+ // anon-type.scala:8: error: not found: type $anon
+ // implicit val EndoInvariantFunctor = new InvariantFunctor[Endo] {
+ // ^
+
+
+ // These both work:
+ // implicit val EndoInvariantFunctorAscribed: InvariantFunctor[Endo] = new InvariantFunctor[Endo] {
+ // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b)))
+ // }
+ //
+ // implicit val EndoInvariantFunctorStubbed = new InvariantFunctor[Endo] {
+ // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = error("stub")
+ // }
+}
+
+trait Endo[X]
+
+object Endo {
+ implicit def EndoTo[A](f: A => A): Endo[A] = new Endo[A] {
+ def apply(a: A) = f(a)
+ }
+
+ implicit def EndoFrom[A](e: Endo[A]): A => A = e.apply(_)
+}
diff --git a/tests/pos/t8023.scala b/tests/pos/t8023.scala
new file mode 100644
index 000000000..66d478abd
--- /dev/null
+++ b/tests/pos/t8023.scala
@@ -0,0 +1,9 @@
+class C[K]
+class D[K]
+
+object Test3 {
+ def foo = (null: Any) match {
+ case a: C[k] => new C[k]() // this one worked before as the info of `A` was complete
+ // ()
+ }
+}
diff --git a/tests/pos/t9004.scala b/tests/pos/t9004.scala
new file mode 100644
index 000000000..d591bc852
--- /dev/null
+++ b/tests/pos/t9004.scala
@@ -0,0 +1,29 @@
+object Main {
+ trait AA[RR] { type R = RR; def r: R }
+
+ def test1(a: AA[_]) = {
+ val f = () => a.r
+ // The tree a.r is given the type `a.R` which normalizes
+ // to B', where B' is a distinct symbol ("captured existential skolem")
+ // to substitute for the reference to an existential skolem of B.
+ //
+ // inference of the result type of the function computes the
+ // packed type of tree `a.r` to make sure that terms and types
+ // local to the body of the function don't leak into its result
+ // type. The captured existential skolem is considered to be local
+ // so it is abstracted to its upper bound, Any.
+ //
+ // However, the packedType transformation need not have even considered
+ // B', as it is clear that the type `a.R` is not local to the function
+ // body!
+ f: (() => a.R)
+
+ // The workaround is to annotate the function type, rather than
+ // relying in inference.
+ val g: (() => a.R) = () => a.r
+ val g2 = () => a.r
+
+ ()
+ }
+ // typer debug trace: http://rawgit.com/retronym/d5aeaf8e0a4a2e6eef4b/raw/out.html
+}