sbt/tasks/src/test/scala/TestRunnerCall.scala

44 lines
952 B
Scala
Raw Normal View History

2010-06-10 14:19:15 +02:00
import sbt._
2009-08-16 20:29:08 +02:00
import org.scalacheck._
import Prop._
import TaskGen._
2010-06-10 14:19:15 +02:00
import Task._
2009-08-16 20:29:08 +02:00
object TaskRunnerCallTest extends Properties("TaskRunner Call")
{
property("calculates fibonacci") = forAll(MaxTasksGen, MaxWorkersGen) { (i: Int, workers: Int) =>
(i > 0) ==> {
2009-08-16 20:29:08 +02:00
val f = fibDirect(i)
("Workers: " + workers) |: ("i: " + i) |: ("fib(i): " + f) |:
{
2010-06-10 14:19:15 +02:00
def result = tryRun( fibTask(i), false, workers)
checkResult(result, f)
2009-08-16 20:29:08 +02:00
}
}
}
2009-08-16 20:29:08 +02:00
final def fibTask(i: Int) =
{
require(i > 0)
lazy val next: (Int,Int,Int) => Task[Int] =
(index, x1, x2) =>
{
if(index == i)
2010-06-10 14:19:15 +02:00
pure(x2)
2009-08-16 20:29:08 +02:00
else
iterate( (index+1, x2, x1+x2) )
}
2010-06-10 14:19:15 +02:00
def iterate(iteration: (Int,Int,Int)) = pure( iteration ) flatMap next.tupled
2009-08-16 20:29:08 +02:00
iterate( (1, 0, 1) )
}
final def fibDirect(i: Int): Int =
{
require(i > 0)
def build(index: Int, x1: Int, x2: Int): Int =
if(index == i)
x2
else
build(index+1, x2, x1+x2)
build(1, 0, 1)
}
}