summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2007-09-16 02:39:52 +0000
committerBurak Emir <emir@epfl.ch>2007-09-16 02:39:52 +0000
commit0b2f65aa6c6b3bb3e7628720893fb8116fdc8f71 (patch)
tree8ddae77b1334a6e4b80c47e3c58d650217fa80c1 /test/files
parent4c74083c14c959370dd69dd6a745f56354143998 (diff)
downloadscala-0b2f65aa6c6b3bb3e7628720893fb8116fdc8f71.tar.gz
scala-0b2f65aa6c6b3bb3e7628720893fb8116fdc8f71.tar.bz2
scala-0b2f65aa6c6b3bb3e7628720893fb8116fdc8f71.zip
fixed seq matching bug + reorganized test cases
Diffstat (limited to 'test/files')
-rw-r--r--test/files/run/patmatnew.scala157
-rw-r--r--test/files/run/regularpatmatnew.check0
-rw-r--r--test/files/run/regularpatmatnew.scala158
3 files changed, 153 insertions, 162 deletions
diff --git a/test/files/run/patmatnew.scala b/test/files/run/patmatnew.scala
index a61e9eb797..dc8e21701a 100644
--- a/test/files/run/patmatnew.scala
+++ b/test/files/run/patmatnew.scala
@@ -29,9 +29,17 @@ object Test extends TestConsoleMain {
SeqUnapply,
applyFromJcl,
new Test717,
- new TestGuards,
+ TestGuards,
TestEqualsPatternOpt,
- new TestStream,
+ TestSequence01,
+ TestSequence02,
+ TestSequence03,
+ TestSequence04,
+ TestSequence05,
+ TestSequence06,
+ TestSequence07,
+ TestSequence08,
+ TestStream,
new Test903,
new Test1163_Order,
new TestUnbox,
@@ -126,7 +134,7 @@ object Test extends TestConsoleMain {
}
}
- class TestGuards extends TestCase("multiple guards for same pattern") with Shmeez {
+ object TestGuards extends TestCase("multiple guards for same pattern") with Shmeez {
val tree:Tree = Beez(2)
override def runTest = {
val res = tree match {
@@ -153,7 +161,148 @@ object Test extends TestConsoleMain {
}
}
- class TestStream extends TestCase("unapply for Streams") {
+ object TestSequence01 extends TestCase("uno (all ignoring patterns on List)") {
+ def doMatch(xs: List[String]): String = xs match {
+ case List(_*) => "ok"
+ }
+ override def runTest() {
+ val list1 = List()
+ assertEquals(doMatch(list1), "ok")
+ val list2 = List("1","2","3")
+ assertEquals(doMatch(list2), "ok")
+ }
+ }
+
+
+ object TestSequence02 extends TestCase("due (all ignoring patterns on Seq)") {
+ def doMatch(l: Seq[String]): String = l match {
+ case Seq(_*) => "ok"
+ }
+ override def runTest() {
+ val list1 = List()
+ assertEquals(doMatch(list1), "ok")
+ val list2 = List("1", "2", "3")
+ assertEquals(doMatch(list2), "ok")
+ val array3 = Array[String]()
+ assertEquals(doMatch(array3), "ok")
+ val array4 = Array[String]("ga", "gu")
+ assertEquals(doMatch(array4), "ok")
+ }
+ }
+
+ object TestSequence03 extends TestCase("tre (right-ignoring patterns on List, defaults)") {
+ def doMatch(xs: List[String]): String = xs match {
+ case List(_,_,_,_*) => "ok"
+ case _ => "not ok"
+ }
+ override def runTest() {
+ val list1 = List()
+ assertEquals(doMatch(list1), "not ok")
+ val list2 = List("1","2","3")
+ assertEquals(doMatch(list2), "ok")
+ val list3 = List("1","2","3","4")
+ assertEquals(doMatch(list3), "ok")
+ }
+ }
+
+
+ object TestSequence04 extends TestCase("quattro (all- and right-ignoring pattern on case class w/ seq param)") {
+ case class Foo(i: Int, chars: Char*)
+
+ override def runTest() = {
+ val a = Foo(0, 'a') match {
+ case Foo(i, c, chars @ _*) => c
+ case _ => null
+ }
+ assertEquals(a, 'a')
+
+ val b = Foo(0, 'a') match {
+ case Foo(i, chars @ _*) => 'b'
+ case _ => null
+ }
+ assertEquals(b, 'b')
+ }
+ }
+
+ object TestSequence05 extends TestCase("cinque (sealed case class with ignoring seq patterns)") {
+ sealed abstract class Con;
+
+ case class Foo() extends Con
+ case class Bar(xs:Con*) extends Con
+
+ override def runTest() {
+ val res = (Bar(Foo()):Con) match {
+ case Bar(xs@_*) => xs // this should be optimized away to a pattern Bar(xs)
+ case _ => Nil
+ }
+ assertEquals("res instance"+res.isInstanceOf[Seq[Con] forSome { type Con }]+" res(0)="+res(0), true, res.isInstanceOf[Seq[Foo] forSome { type Foo}] && res(0) == Foo() )
+ }
+ }
+
+ object TestSequence06 extends TestCase("sei (not regular) fancy guards / bug#644 ") {
+
+ case class A(i: Any)
+
+ def doMatch(x: Any, bla: int) = x match {
+ case x:A if (bla==1) => 0
+ case A(1) => 1
+ case A(A(1)) => 2
+ }
+
+ override def runTest() {
+ assertEquals(doMatch(A(null),1), 0)
+ assertEquals(doMatch(A(1),2), 1)
+ assertEquals(doMatch(A(A(1)),2), 2)
+ }
+
+ }
+
+ object TestSequence07 extends TestCase("sette List of chars") {
+ def doMatch1(xs: List[char]) = xs match {
+ case List(x, y, _*) => x::y::Nil
+ }
+ def doMatch2(xs:List[char]) = xs match {
+ case List(x, y, z, w) => List(z,w)
+ }
+ //def doMatch3(xs:List[char]) = xs match {
+ // case List(_*, z, w) => w::Nil
+ //}
+ def doMatch4(xs:Seq[Char]) = xs match {
+ case Seq(x, y, _*) => x::y::Nil
+ case Seq(x, y, z, w) => List(z,w) // redundant!
+ }
+ def doMatch5(xs:Seq[Char]) = xs match {
+ case Seq(x, y, 'c', w @ _*) => x::y::Nil
+ case Seq(x, y, z @ _*) => z
+ }
+ def doMatch6(xs:Seq[Char]) = xs match {
+ case Seq(x, 'b') => x::'b'::Nil
+ case Seq(x, y, z @ _*) => z.toList
+ }
+
+ override def runTest() {
+ assertEquals(List('a','b'), doMatch1(List('a','b','c','d')))
+ assertEquals(List('c','d'), doMatch2(List('a','b','c','d')))
+ //assertEquals(doMatch3(List('a','b','c','d')), List('d'))
+ assertEquals(List('a','b'), doMatch4(List('a','b','c','d')))
+ assertEquals(List('a','b'), doMatch5(List('a','b','c','d')))
+ assertEquals(List('c','d'), doMatch6(List('a','b','c','d')))
+ }
+ }
+
+ object TestSequence08 extends TestCase("backquoted identifiers in pattern") {
+ override def runTest() {
+ val xs = List(2, 3)
+ val ys = List(1, 2, 3) match {
+ case x :: `xs` => xs
+ case _ => Nil
+ }
+ assertEquals(xs, ys)
+ }
+ }
+
+
+ object TestStream extends TestCase("unapply for Streams") {
def sum(stream: Stream[int]): int =
stream match {
case Stream.empty => 0
diff --git a/test/files/run/regularpatmatnew.check b/test/files/run/regularpatmatnew.check
deleted file mode 100644
index e69de29bb2..0000000000
--- a/test/files/run/regularpatmatnew.check
+++ /dev/null
diff --git a/test/files/run/regularpatmatnew.scala b/test/files/run/regularpatmatnew.scala
deleted file mode 100644
index c610b80444..0000000000
--- a/test/files/run/regularpatmatnew.scala
+++ /dev/null
@@ -1,158 +0,0 @@
-object Test {
- import scala.testing.SUnit._
-
- def main(args: Array[String]) {
- val tr = new TestResult
- new TestSuite(
-
- new Test01,
- new Test02,
- new Test03,
- new Test04,
- new Test05,
- new Test06,
- new Test07,
- new Test08
-
- ).run(tr)
-
- for (val f <- tr.failures()) println(f)
- }
-
- class Test01 extends TestCase("uno (all ignoring patterns on List)") {
- def doMatch(xs: List[String]): String = xs match {
- case List(_*) => "ok"
- }
- override def runTest() {
- val list1 = List()
- assertEquals(doMatch(list1), "ok")
- val list2 = List("1","2","3")
- assertEquals(doMatch(list2), "ok")
- }
- }
-
- /* these are not allowed, for strange reasons I will never figure out
-
- def doMatch(l:Seq[String]):String = l match {
- case List(_*) => "ok"
- case _ => "not ok"
- }
-
- def doMatch(l:Seq[String]):String = l match {
- case Array(_*) => "ok"
- case _ => "not ok"
- }
- */
-
- class Test02 extends TestCase("due (all ignoring patterns on Seq)") {
- def doMatch(l: Seq[String]): String = l match {
- case Seq(_*) => "ok"
- }
- override def runTest() {
- val list1 = List()
- assertEquals(doMatch(list1), "ok")
- val list2 = List("1", "2", "3")
- assertEquals(doMatch(list2), "ok")
- val array3 = Array[String]()
- assertEquals(doMatch(array3), "ok")
- val array4 = Array[String]("ga", "gu")
- assertEquals(doMatch(array4), "ok")
- }
- }
-
- class Test03 extends TestCase("tre (right-ignoring patterns on List, defaults)") {
- def doMatch(xs: List[String]): String = xs match {
- case List(_,_,_,_*) => "ok"
- case _ => "not ok"
- }
- override def runTest() {
- val list1 = List()
- assertEquals(doMatch(list1), "not ok")
- val list2 = List("1","2","3")
- assertEquals(doMatch(list2), "ok")
- val list3 = List("1","2","3","4")
- assertEquals(doMatch(list3), "ok")
- }
- }
-
-
- class Test04 extends TestCase("quattro (all- and right-ignoring pattern on case class w/ seq param)") {
- case class Foo(i: Int, chars: Char*)
-
- override def runTest() = {
- val a = Foo(0, 'a') match {
- case Foo(i, c, chars @ _*) => c
- case _ => null
- }
- assertEquals(a, 'a')
-
- val b = Foo(0, 'a') match {
- case Foo(i, chars @ _*) => 'b'
- case _ => null
- }
- assertEquals(b, 'b')
- }
- }
-
- class Test05 extends TestCase("cinque (sealed case class with ignoring seq patterns)") {
- sealed abstract class Con;
-
- case class Foo() extends Con
- case class Bar(xs:Con*) extends Con
-
- override def runTest() {
- val res = (Bar(Foo()):Con) match {
- case Bar(xs@_*) => xs // this should be optimized away to a pattern Bar(xs)
- case _ => Nil
- }
- assertEquals("res instance"+res.isInstanceOf[Seq[Con] forSome { type Con }]+" res(0)="+res(0), true, res.isInstanceOf[Seq[Foo] forSome { type Foo}] && res(0) == Foo() )
- }
- }
-
- class Test06 extends TestCase("sei (not regular) fancy guards / bug#644 ") {
-
- case class A(i: Any)
-
- def doMatch(x: Any, bla: int) = x match {
- case x:A if (bla==1) => 0
- case A(1) => 1
- case A(A(1)) => 2
- }
-
- override def runTest() {
- assertEquals(doMatch(A(null),1), 0)
- assertEquals(doMatch(A(1),2), 1)
- assertEquals(doMatch(A(A(1)),2), 2)
- }
-
- }
-
- class Test07 extends TestCase("sette List of chars") {
- def doMatch1(xs: List[char]) = xs match {
- case List(x, y, _*) => x::y::Nil
- }
- def doMatch2(xs:List[char]) = xs match {
- case List(x, y, z, w) => List(z,w)
- }
- //def doMatch3(xs:List[char]) = xs match {
- // case List(_*, z, w) => w::Nil
- //}
- override def runTest() {
- assertEquals(doMatch1(List('a','b','c','d')), List('a','b'))
- assertEquals(doMatch2(List('a','b','c','d')), List('c','d'))
- //assertEquals(doMatch3(List('a','b','c','d')), List('d'))
- }
- }
-
- class Test08 extends TestCase("backquoted identifiers in pattern") {
- override def runTest() {
- val xs = List(2, 3)
- val ys = List(1, 2, 3) match {
- case x :: `xs` => xs
- case _ => Nil
- }
- assertEquals(xs, ys)
- }
- }
-
-}