summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-10-22 16:31:07 -0700
committerLi Haoyi <haoyi.sg@gmail.com>2017-10-22 16:31:07 -0700
commit58daff70ac26cab4833ed4b5e57e13f60f440bc0 (patch)
treec5c474ad91838082b99a8560f44a5581b1110bab /src
parent73ba1b6134b4171719283812cbea66784acbbd9c (diff)
downloadmill-58daff70ac26cab4833ed4b5e57e13f60f440bc0.tar.gz
mill-58daff70ac26cab4833ed4b5e57e13f60f440bc0.tar.bz2
mill-58daff70ac26cab4833ed4b5e57e13f60f440bc0.zip
Add simple unit tests for `topoSortedTransitiveTargets`
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/forge/Evaluator.scala10
-rw-r--r--src/test/scala/forge/ForgeTests.scala33
2 files changed, 26 insertions, 17 deletions
diff --git a/src/main/scala/forge/Evaluator.scala b/src/main/scala/forge/Evaluator.scala
index c6658ece..d2fdcb53 100644
--- a/src/main/scala/forge/Evaluator.scala
+++ b/src/main/scala/forge/Evaluator.scala
@@ -12,7 +12,7 @@ class Evaluator(workspacePath: jnio.Path,
/**
* Takes the given targets, finds
*/
- def prepareTransitiveTargets(sourceTargets: Seq[Target[_]]) = {
+ def topoSortedTransitiveTargets(sourceTargets: Seq[Target[_]]) = {
val transitiveTargetSet = mutable.Set.empty[Target[_]]
def rec(t: Target[_]): Unit = {
if (transitiveTargetSet.contains(t)) () // do nothing
@@ -33,18 +33,16 @@ class Evaluator(workspacePath: jnio.Path,
val sortedClusters = Tarjans(numberedEdges)
val nonTrivialClusters = sortedClusters.filter(_.length > 1)
assert(nonTrivialClusters.isEmpty, nonTrivialClusters)
- (transitiveTargets, sortedClusters.flatten)
+ sortedClusters.flatten.map(transitiveTargets)
}
def apply[T](t: Target[T])
(implicit enclosing: Enclosing): T = {
jnio.Files.createDirectories(workspacePath)
- val (transitiveTargets, sortedTargetIndices) = prepareTransitiveTargets(Seq(t))
+ val sortedTargets = topoSortedTransitiveTargets(Seq(t))
val results = mutable.Map.empty[Target[_], Any]
- for (index <- sortedTargetIndices){
-
- val target = transitiveTargets(index)
+ for (target <- sortedTargets){
val inputResults = target.inputs.map(results)
val targetDestPath = target.defCtx.staticEnclosing match{
diff --git a/src/test/scala/forge/ForgeTests.scala b/src/test/scala/forge/ForgeTests.scala
index 45d68f1c..0ad15a59 100644
--- a/src/test/scala/forge/ForgeTests.scala
+++ b/src/test/scala/forge/ForgeTests.scala
@@ -26,18 +26,29 @@ object ForgeTests extends TestSuite{
val down = noop(noop(up), noop(up))
}
val tests = Tests{
- 'singleton - {
- evaluator.apply(Singleton.single)
- }
- 'pair - {
- evaluator.prepareTransitiveTargets(Seq(Pair.down))
- }
- 'diamond - {
- evaluator.apply(Diamond.down)
- }
- 'anonDiamond - {
- evaluator.apply(AnonymousDiamond.down)
+ 'topoSortedTransitiveTargets - {
+ def check(targets: Seq[Target[_]], expected: Seq[Target[_]]) = {
+ val result = evaluator.topoSortedTransitiveTargets(targets)
+ assert(result == expected)
+ }
+ 'singleton - check(
+ targets = Seq(Singleton.single),
+ expected = Seq(Singleton.single)
+ )
+ 'pair - check(
+ targets = Seq(Pair.down),
+ expected = Seq(Pair.up, Pair.down)
+ )
+ 'diamond - check(
+ targets = Seq(Diamond.down),
+ expected = Seq(Diamond.up, Diamond.right, Diamond.left, Diamond.down)
+ )
+ 'anonDiamond - check(
+ targets = Seq(Diamond.down),
+ expected = Seq(Diamond.up, Diamond.down.inputs(1), Diamond.down.inputs(0), Diamond.down)
+ )
}
+
// 'full - {
// val sourceRoot = Target.path(jnio.Paths.get("src/test/resources/example/src"))
// val resourceRoot = Target.path(jnio.Paths.get("src/test/resources/example/resources"))