diff options
| author | Schuyler Eldridge | 2019-12-18 14:16:46 -0500 |
|---|---|---|
| committer | Schuyler Eldridge | 2020-02-19 19:47:17 -0500 |
| commit | 3b3f29c35d709b2bedd6614be84713667265ab32 (patch) | |
| tree | fadaafa176b9cae0aaa07d84b8fad8f30b431ed5 /src/test | |
| parent | a5aeea34d310970e1ea46ccf15155570bed466a8 (diff) | |
Add optionalPrerequisites to Dependency API
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/scala/firrtlTests/options/PhaseManagerSpec.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/options/PhaseManagerSpec.scala b/src/test/scala/firrtlTests/options/PhaseManagerSpec.scala index b13ee215..744d621e 100644 --- a/src/test/scala/firrtlTests/options/PhaseManagerSpec.scala +++ b/src/test/scala/firrtlTests/options/PhaseManagerSpec.scala @@ -328,6 +328,34 @@ object CustomAfterOptimizationFixture { } +object OptionalPrerequisitesFixture { + + class Root extends IdentityPhase + + class OptMinimum extends IdentityPhase with PreservesAll[Phase] { + override val prerequisites = Seq(Dependency[Root]) + } + + class OptFull extends IdentityPhase with PreservesAll[Phase] { + override val prerequisites = Seq(Dependency[Root], Dependency[OptMinimum]) + } + + class DoneMinimum extends IdentityPhase with PreservesAll[Phase] { + override val prerequisites = Seq(Dependency[OptMinimum]) + } + + class DoneFull extends IdentityPhase with PreservesAll[Phase] { + override val prerequisites = Seq(Dependency[OptFull]) + } + + class Custom extends IdentityPhase with PreservesAll[Phase] { + override val prerequisites = Seq(Dependency[Root]) + override val optionalPrerequisites = Seq(Dependency[OptMinimum], Dependency[OptFull]) + override val dependents = Seq(Dependency[DoneMinimum], Dependency[DoneFull]) + } + +} + object OrderingFixture { class A extends IdentityPhase with PreservesAll[Phase] @@ -618,6 +646,24 @@ class PhaseManagerSpec extends FlatSpec with Matchers { pmFull.flattenedTransformOrder.map(_.getClass) should be (expectedFull) } + it should "support optional prerequisites" in { + val f = OptionalPrerequisitesFixture + + val targetsMinimum = Seq(Dependency[f.Custom], Dependency[f.DoneMinimum]) + val pmMinimum = new PhaseManager(targetsMinimum) + + val targetsFull = Seq(Dependency[f.Custom], Dependency[f.DoneFull]) + val pmFull = new PhaseManager(targetsFull) + + val expectedMinimum = Seq(classOf[f.Root], classOf[f.OptMinimum], classOf[f.Custom], classOf[f.DoneMinimum]) + writeGraphviz(pmMinimum, "test_run_dir/PhaseManagerSpec/CustomAfterOptimization/minimum") + pmMinimum.flattenedTransformOrder.map(_.getClass) should be (expectedMinimum) + + val expectedFull = Seq(classOf[f.Root], classOf[f.OptMinimum], classOf[f.OptFull], classOf[f.Custom], classOf[f.DoneFull]) + writeGraphviz(pmFull, "test_run_dir/PhaseManagerSpec/CustomAfterOptimization/full") + pmFull.flattenedTransformOrder.map(_.getClass) should be (expectedFull) + } + /** This tests a situation the ordering of edges matters. Namely, this test is dependent on the ordering in which * DiGraph.linearize walks the edges of each node. */ |
