summaryrefslogtreecommitdiff
path: root/test/files/jvm/t2515.scala
blob: 83cb0581683cb0b9c8479024bc8f229cda23a756 (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
38
39
40
import scala.actors.{Futures, TIMEOUT}
import scala.actors.Actor._

object Test {

  def compute(): Option[Boolean] = {
    val fts = for (j <- 0 until 5) yield Futures.future {
      receiveWithin (100) {
        case TIMEOUT => true
        case other   => false
      }
    }
    val done = Futures.awaitAll(2000, fts.toArray: _*) // list to array, as varargs
    if (done.contains(None))
      None
    else
      Some(true)
  }

  def main(args:Array[String]) : Unit = {
    val format = new java.text.DecimalFormat("000.00'ms'")
    var iter = 1
    val done = 11
    while (iter < done) {
      val start = System.nanoTime()
      val result = compute()
      val time = System.nanoTime() - start
      result match {
        case Some(result) =>
          //printf("Iteration %2d succeeded after %s %n", iter, format.format(time / 1e6))
          printf("Iteration %2d succeeded%n", iter)
          iter += 1
        case None =>
          printf(">>>> Iteration %2d failed after %s <<<<< %n", iter, format.format(time / 1e6))
          iter = done
      }
    }
  }

}