File: concurrent-stream.scala

package info (click to toggle)
scala 2.11.12-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 62,776 kB
  • sloc: java: 13,415; xml: 3,252; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (37 lines) | stat: -rw-r--r-- 1,005 bytes parent folder | download | duplicates (4)
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(_, _))
  }
}