mirror of https://github.com/sbt/sbt.git
44 lines
1.2 KiB
Scala
44 lines
1.2 KiB
Scala
/*
|
|
* sbt
|
|
* Copyright 2011 - 2018, Lightbend, Inc.
|
|
* Copyright 2008 - 2010, Mark Harrah
|
|
* Licensed under Apache License 2.0 (see LICENSE)
|
|
*/
|
|
|
|
package sbt
|
|
|
|
import org.scalacheck._
|
|
import Gen.choose
|
|
|
|
object TaskGen extends std.TaskExtra {
|
|
// upper bounds to make the tests finish in reasonable time
|
|
val MaxTasks = 100
|
|
val MaxWorkers = 29
|
|
val MaxJoin = 20
|
|
|
|
val MaxTasksGen = choose(0, MaxTasks)
|
|
val MaxWorkersGen = choose(1, MaxWorkers)
|
|
val MaxJoinGen = choose(0, MaxJoin)
|
|
val TaskListGen = MaxTasksGen.flatMap(size => Gen.listOfN(size, Arbitrary.arbInt.arbitrary))
|
|
|
|
def run[T](root: Task[T], checkCycles: Boolean, maxWorkers: Int): Result[T] = {
|
|
val (service, shutdown) = CompletionService[Task[_], Completed](maxWorkers)
|
|
val dummies = std.Transform.DummyTaskMap(Nil)
|
|
val x = new Execute[Task](
|
|
Execute.config(checkCycles),
|
|
Execute.noTriggers,
|
|
ExecuteProgress.empty[Task]
|
|
)(std.Transform(dummies))
|
|
try {
|
|
x.run(root)(service)
|
|
} finally {
|
|
shutdown()
|
|
}
|
|
}
|
|
def tryRun[T](root: Task[T], checkCycles: Boolean, maxWorkers: Int): T =
|
|
run(root, checkCycles, maxWorkers) match {
|
|
case Value(v) => v
|
|
case Inc(i) => throw i
|
|
}
|
|
}
|