diff options
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/run/complicatedmatch.check | 6 | ||||
-rw-r--r-- | test/files/run/complicatedmatch.scala | 31 |
2 files changed, 37 insertions, 0 deletions
diff --git a/test/files/run/complicatedmatch.check b/test/files/run/complicatedmatch.check new file mode 100644 index 0000000000..501b7a32d6 --- /dev/null +++ b/test/files/run/complicatedmatch.check @@ -0,0 +1,6 @@ +1 +42 +42 +11 +7 +13 diff --git a/test/files/run/complicatedmatch.scala b/test/files/run/complicatedmatch.scala new file mode 100644 index 0000000000..c837c328b3 --- /dev/null +++ b/test/files/run/complicatedmatch.scala @@ -0,0 +1,31 @@ +object Bar{ + def unapply(x : String) = x == "bar"; +} + +object Even{ + def unapply(x : Int) = if (x % 2 == 0) Some(x / 2) else None; +} + +object Test extends Application{ + val LongWord = "supercalifragilisticexpialadocious"; + + def foo(x : Int, y : String) : Int = (x, y) match { + case (Even(i), "bar") => 1 + case (1 | 2 | 3, "foo") => 42; + case (x, y) if y.length < x => 11; + case (1 | 2 | 3, Bar()) => 7; + case (1 | 2 | 3, "bar") => 8 + case (Even(Even(3)), Bar()) => 13; + case (Even(Even(3)), LongWord) => 13; + case _ => 0; + } + + List( + 2 -> "bar", + 2 -> "foo", + 3 -> "foo", + 7 -> "flob", + 3 -> "bar", + 12 -> LongWord + ).foreach({case (x, y) => println(foo(x, y))}); +} |