summaryrefslogtreecommitdiff
path: root/test/files/run/concurrent-stream.scala
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-09-01 16:01:59 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-09-01 16:01:59 +0000
commit707baf25a295bac11358a5ff935b73cc508c4daa (patch)
tree7f04610d2b2bba0a3f468d25e230e42688d9148c /test/files/run/concurrent-stream.scala
parent8f1a52438a2954c935f59c2e10220beac0e42d03 (diff)
downloadscala-707baf25a295bac11358a5ff935b73cc508c4daa.tar.gz
scala-707baf25a295bac11358a5ff935b73cc508c4daa.tar.bz2
scala-707baf25a295bac11358a5ff935b73cc508c4daa.zip
Closes #1220.
Diffstat (limited to 'test/files/run/concurrent-stream.scala')
-rw-r--r--test/files/run/concurrent-stream.scala36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/files/run/concurrent-stream.scala b/test/files/run/concurrent-stream.scala
new file mode 100644
index 0000000000..42c695964e
--- /dev/null
+++ b/test/files/run/concurrent-stream.scala
@@ -0,0 +1,36 @@
+// test concurrent calls to Stream.tail
+object Test {
+
+def slowRange(from: Int, until: Int, cons: (Int, => Stream[Int]) => Stream[Int]): Stream[Int] = {
+ var current = from
+ def next: Stream[Int] = {
+ Thread.sleep(100)
+ if (current >= until) Stream.empty
+ else {
+ val stream = cons(current, next)
+ current += 1
+ stream
+ }
+ }
+ next
+}
+
+def testCons(cons: (Int, => Stream[Int]) => Stream[Int]): Unit = {
+ import scala.actors.Actor._
+
+ val stream = slowRange(0, 10, cons)
+ val main = self
+ actor { main ! stream.toList }
+ actor { main ! stream.toList }
+ val eval0 = receive { case list: List[Int] => list }
+ val eval1 = receive { case list: List[Int] => list }
+ println("Evaluation 0: " + eval0)
+ println("Evaluation 1: " + eval1)
+}
+
+ def main(args: Array[String]) {
+ println("Testing standard cons.")
+ testCons(Stream.cons.apply(_, _))
+ }
+}
+