summaryrefslogtreecommitdiff
path: root/test/files/run/concurrent-stream.scala
blob: 9d5ba0428e75b4862c89c2ca6ef3abe0b74a0a67 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// test concurrent calls to Stream.tail
@deprecated("Suppress warnings", since="2.11")
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 @unchecked] => list }
    val eval1 = receive { case list: List[Int @unchecked] => list }
    println("Evaluation 0: " + eval0)
    println("Evaluation 1: " + eval1)
  }

  def main(args: Array[String]) {
    println("Testing standard cons.")
    testCons(Stream.cons.apply(_, _))
  }
}