From 63d618b20c238f5963c034afd96cb0bd34a73d14 Mon Sep 17 00:00:00 2001 From: Burak Emir Date: Mon, 6 Nov 2006 18:13:23 +0000 Subject: test cases for unapply --- test/pending/pos/bug796.scala | 26 ++++++++++++++++++++++++++ test/pending/pos/unapply.scala | 27 ++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 test/pending/pos/bug796.scala (limited to 'test/pending/pos') diff --git a/test/pending/pos/bug796.scala b/test/pending/pos/bug796.scala new file mode 100644 index 0000000000..756c103e7c --- /dev/null +++ b/test/pending/pos/bug796.scala @@ -0,0 +1,26 @@ +/** I know what I am doing is wrong -- since I am about to look into + * this bug, I add a test in pending/pos... however, I am afraid that + * once this bug is fixed, this test case might go into test/pos + * there it adds to the huge number of tiny little test cases. + * + * Ideally, an option in the bugtracking system would automatically + * handle "pos" bugs. + */ +object Test extends Application { + + object Twice { + def apply(x: int) = x * 2 + def unapply(x: int): Option[Tuple1[int]] = + if (x % 2 == 0) Some(Tuple1(x / 2)) + else None + } + + def test(x: int) = x match { + case Twice(y) => "x is two times "+y + case _ => "x is odd" + } + + Console.println(test(3)) + Console.println(test(4)) + +} diff --git a/test/pending/pos/unapply.scala b/test/pending/pos/unapply.scala index 70e4a1d913..4ddc93120b 100644 --- a/test/pending/pos/unapply.scala +++ b/test/pending/pos/unapply.scala @@ -1,3 +1,9 @@ +object Test { + def main(args:Array[String]) = { + Foo.run + Mas.run + } +} object Foo { def unapply(x: Any): Option[Product2[Int, String]] = x match { case y: Bar => Some(Tuple(y.size, y.name)) @@ -8,7 +14,7 @@ object Foo { case y: Bar => Some(Tuple(y.name)) case _ => None }*/ - def main(args:Array[String]): Unit = { + def run: Unit = { val b = new Bar b match { case Foo(s:Int, n:String) => Console.println("size "+s+" name "+n) @@ -28,3 +34,22 @@ class Bar { var size: Int = 50 var name: String = "medium" } + +object Mas { + object Gaz { + def unapply(x: Any): Option[Product2[Int, String]] = x match { + case y: Baz => Some(Tuple(y.size, y.name)) + case _ => None + } + } + class Baz { + var size: Int = 60 + var name: String = "too large" + } + def run: Unit = { + val b = new Baz + b match { + case Gaz(s:Int, n:String) => Console.println("size "+s+" name "+n) + } + } +} -- cgit v1.2.3