From 58daff70ac26cab4833ed4b5e57e13f60f440bc0 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 22 Oct 2017 16:31:07 -0700 Subject: Add simple unit tests for `topoSortedTransitiveTargets` --- src/main/scala/forge/Evaluator.scala | 10 ++++------ src/test/scala/forge/ForgeTests.scala | 33 ++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 17 deletions(-) (limited to 'src') 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")) -- cgit v1.2.3