From ac0bfa6220835723498a2f387b803fe8cd87b68d Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Wed, 27 Jul 2011 20:59:33 +0000 Subject: A few tests for pending and non-pending, no rev... A few tests for pending and non-pending, no review. --- test/pending/pos/existentials-harmful.scala | 54 ++++++++++++++++++++++ test/pending/pos/package-case.scala | 4 ++ .../run/structural-types-vs-anon-classes.scala | 17 +++++++ 3 files changed, 75 insertions(+) create mode 100644 test/pending/pos/existentials-harmful.scala create mode 100644 test/pending/pos/package-case.scala create mode 100644 test/pending/run/structural-types-vs-anon-classes.scala (limited to 'test/pending') 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) + } +} -- cgit v1.2.3