aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorSchuyler Eldridge2019-12-18 14:16:46 -0500
committerSchuyler Eldridge2020-02-19 19:47:17 -0500
commit3b3f29c35d709b2bedd6614be84713667265ab32 (patch)
treefadaafa176b9cae0aaa07d84b8fad8f30b431ed5 /src/test
parenta5aeea34d310970e1ea46ccf15155570bed466a8 (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.scala46
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.
*/