summaryrefslogtreecommitdiff
path: root/test/files/run/forvaleq.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-08-14 23:00:25 +0000
committerPaul Phillips <paulp@improving.org>2009-08-14 23:00:25 +0000
commit43b445579feb1499d3f405c64a45666037255f7d (patch)
treebeceee3e7b8609f82c4bf9ed6d985c280a64b4a0 /test/files/run/forvaleq.scala
parent7838ff734a2018d626086b02cdae0a1416b84e84 (diff)
downloadscala-43b445579feb1499d3f405c64a45666037255f7d.tar.gz
scala-43b445579feb1499d3f405c64a45666037255f7d.tar.bz2
scala-43b445579feb1499d3f405c64a45666037255f7d.zip
Polished up some disabled tests and returned th...
Polished up some disabled tests and returned them to files.
Diffstat (limited to 'test/files/run/forvaleq.scala')
-rw-r--r--test/files/run/forvaleq.scala92
1 files changed, 92 insertions, 0 deletions
diff --git a/test/files/run/forvaleq.scala b/test/files/run/forvaleq.scala
new file mode 100644
index 0000000000..80d41acd85
--- /dev/null
+++ b/test/files/run/forvaleq.scala
@@ -0,0 +1,92 @@
+// test "foo = expr" clauses in for comprehensions
+// $Id$
+
+import scala.collection.immutable.Queue
+import scala.{List=>L}
+
+object Test {
+ // redefine some symbols to make it extra hard
+ class List
+ class Tuple2
+ def List[A](as: A*) = 5
+
+ def firstDigit(x: Int): Int =
+ x match {
+ case 0 => 0
+ case _ if (x<0) => firstDigit(-x)
+ case _ if (x<10) => x
+ case _ => firstDigit(x / 10)
+ }
+
+
+ {
+ // a basic test case
+
+ val input = L.range(0,20)
+ val oddFirstTimesTwo =
+ for {x <- input
+ xf = firstDigit(x)
+ if xf % 2 == 1}
+ yield x*2
+ println(oddFirstTimesTwo)
+ }
+
+ {
+ // a test case with patterns
+
+ val input = L.range(0, 20)
+ val oddFirstTimesTwo =
+ for {x <- input
+ xf = firstDigit(x)
+ yf = x - firstDigit(x) / 10
+ (a, b) = (xf - yf, xf + yf)
+ if xf % 2 == 1}
+ yield a + b
+ println(oddFirstTimesTwo)
+ }
+
+ {
+ // make sure it works on non-Ls
+
+ // val input: Queue = Queue.Empty[int].incl(L.range(0,20))
+ val input = L.range(0, 20).iterator
+ val oddFirstTimesTwo =
+ for {x <- input
+ xf = firstDigit(x)
+ if xf % 2 == 1}
+ yield x*2
+ println(oddFirstTimesTwo.toList)
+ }
+
+ {
+ // yield the computed value
+
+ val input = L.range(0,20)
+ val oddFirstTimesTwo =
+ for {x <- input
+ xf = firstDigit(x)
+ if xf % 2 == 1}
+ yield xf*2
+ println(oddFirstTimesTwo)
+ }
+
+ {
+ // make sure the function is only called once
+ var count: Int = 0
+
+ def fdct(x: Int) = {
+ count += 1
+ firstDigit(x)
+ }
+
+ val input = L.range(0,20)
+ for {x <- input
+ xf = fdct(x)
+ if xf % 2 == 1}
+ yield xf
+
+ println("called " + count + " times")
+ }
+
+ def main(args: Array[String]) {}
+}