summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-07-27 20:59:33 +0000
committerPaul Phillips <paulp@improving.org>2011-07-27 20:59:33 +0000
commitac0bfa6220835723498a2f387b803fe8cd87b68d (patch)
tree4070e501dd1d2ecb9661ccd5b2893cb117031d54
parent6b096309778039f75d450acec3d02c3a0fa005f3 (diff)
downloadscala-ac0bfa6220835723498a2f387b803fe8cd87b68d.tar.gz
scala-ac0bfa6220835723498a2f387b803fe8cd87b68d.tar.bz2
scala-ac0bfa6220835723498a2f387b803fe8cd87b68d.zip
A few tests for pending and non-pending, no rev...
A few tests for pending and non-pending, no review.
-rw-r--r--test/files/pos/list-extractor.scala8
-rw-r--r--test/pending/pos/existentials-harmful.scala54
-rw-r--r--test/pending/pos/package-case.scala4
-rw-r--r--test/pending/run/structural-types-vs-anon-classes.scala17
4 files changed, 83 insertions, 0 deletions
diff --git a/test/files/pos/list-extractor.scala b/test/files/pos/list-extractor.scala
new file mode 100644
index 0000000000..79c622bca0
--- /dev/null
+++ b/test/files/pos/list-extractor.scala
@@ -0,0 +1,8 @@
+// This was fixed in r25277 but is enough different
+// from the case I was knowingly fixing, I'm throwing it
+// in there.
+object HasArgs {
+ def boop(params: List[List[_]]) = params match {
+ case List(List()) => 2
+ }
+}
diff --git a/test/pending/pos/existentials-harmful.scala b/test/pending/pos/existentials-harmful.scala
new file mode 100644
index 0000000000..8722852e8a
--- /dev/null
+++ b/test/pending/pos/existentials-harmful.scala
@@ -0,0 +1,54 @@
+// a.scala
+// Mon Jul 11 14:18:26 PDT 2011
+
+object ExistentialsConsideredHarmful {
+ class Animal(val name: String)
+ object Dog extends Animal("Dog")
+ object Sheep extends Animal("Sheep")
+
+ trait Tools[A] {
+ def shave(a: A): A
+ }
+ def tools[A](a: A): Tools[A] = null // dummy
+
+ case class TransportBox[A <: Animal](animal: A, tools: Tools[A]) {
+ def label: String = animal.name
+ }
+
+ // 1.
+ def carry[A <: Animal](box: TransportBox[A]): Unit = {
+ println(box.animal.name+" got carried away")
+ }
+
+ val aBox =
+ if (math.random < 0.5)
+ TransportBox(Dog, tools(Dog))
+ else
+ TransportBox(Sheep, tools(Sheep))
+
+ // 2.
+ //aBox.tools.shave(aBox.animal)
+
+ // Use pattern match to avoid opening the existential twice
+ aBox match {
+ case TransportBox(animal, tools) => tools.shave(animal)
+ }
+
+ abstract class BoxCarrier[R <: Animal](box: TransportBox[R]) {
+ def speed: Int
+
+ def talkToAnimal: Unit = println("The carrier says hello to"+box.animal.name)
+ }
+
+ // 3.
+ //val bc = new BoxCarrier(aBox) {
+
+ // Use pattern match to avoid opening the existential twice
+ // Type annotation on bc is required ... possible compiler bug?
+ // val bc : BoxCarrier[_ <: Animal] = aBox match {
+ val bc = aBox match {
+ case tb : TransportBox[a] => new BoxCarrier(tb) {
+ def speed: Int = 12
+ }
+ }
+}
diff --git a/test/pending/pos/package-case.scala b/test/pending/pos/package-case.scala
new file mode 100644
index 0000000000..906f1eb3f2
--- /dev/null
+++ b/test/pending/pos/package-case.scala
@@ -0,0 +1,4 @@
+// a.scala
+// Sat Jul 16 00:34:36 EDT 2011
+
+package object io { case class TextReader() }
diff --git a/test/pending/run/structural-types-vs-anon-classes.scala b/test/pending/run/structural-types-vs-anon-classes.scala
new file mode 100644
index 0000000000..cf68f831f5
--- /dev/null
+++ b/test/pending/run/structural-types-vs-anon-classes.scala
@@ -0,0 +1,17 @@
+object Test {
+ class Arm
+ class Leg
+ class Tail
+ class Monkey(arms: List[Arm], legs :List[Leg], tail: Tail)
+
+ def makeAwesomeMonkey(arms: List[Arm], legs: List[Leg], tail: Tail) = {
+ object m extends Monkey(arms, legs, tail) {
+ def beAwesome () = "I can fly! I can fly!"
+ }
+ m
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(makeAwesomeMonkey(Nil, Nil, new Tail) beAwesome)
+ }
+}