diff options
| author | Schuyler Eldridge | 2020-07-10 22:55:47 -0400 |
|---|---|---|
| committer | Schuyler Eldridge | 2020-07-16 12:51:54 -0400 |
| commit | debee42971229c7d1f1f698d65ea3fd089609af5 (patch) | |
| tree | 379a7b85741ac56c08bd98e94b7051ac7f4b774f | |
| parent | f5dd8ddc72ce829406337f22e73cac27b58aa521 (diff) | |
Simplify CustomTransformSpec
Refactor the test used in the CustomTransformSpec to assert that
inputForm=LowForm legacy transforms run right before the emitter (see
note below!). The new test looks only for a list of (customTransform,
emitter) in a sliding, size-2 window of the flattened transform order.
Previously, this was looking for a match before and after the custom
transform. The old implementation necessitate busywork updates of the
test when new transforms are added that changed the transform running
before the custom transform.
Note: this test, as written is intentionally wrong. When verification
statements were added, the test was changed to not do what it's
supposed to do. Namely, the test is supposed to ensure that an
inputForm=LowForm transform runs immediately before its emitter.
However, the test is actually checking that the custom transform runs
before transforms that convert and remove verification statements. I'm
intentionally leaving the test broken, but doing the refactor in order
to make this easier to manually backport to the 1.3.x branch.
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
| -rw-r--r-- | src/test/scala/firrtlTests/CustomTransformSpec.scala | 53 |
1 files changed, 21 insertions, 32 deletions
diff --git a/src/test/scala/firrtlTests/CustomTransformSpec.scala b/src/test/scala/firrtlTests/CustomTransformSpec.scala index 7a683ea9..9141a9f7 100644 --- a/src/test/scala/firrtlTests/CustomTransformSpec.scala +++ b/src/test/scala/firrtlTests/CustomTransformSpec.scala @@ -6,11 +6,11 @@ import firrtl.ir.Circuit import firrtl._ import firrtl.passes.Pass import firrtl.ir._ -import firrtl.stage.{FirrtlSourceAnnotation, FirrtlStage, Forms, RunFirrtlTransformAnnotation} +import firrtl.stage.{FirrtlSourceAnnotation, FirrtlStage, RunFirrtlTransformAnnotation} import firrtl.options.Dependency import firrtl.transforms.{IdentityTransform, LegalizeAndReductionsTransform} import firrtl.testutils._ -import firrtl.transforms.formal.{RemoveVerificationStatements, ConvertAsserts} +import firrtl.transforms.formal.ConvertAsserts import scala.reflect.runtime @@ -150,40 +150,29 @@ class CustomTransformSpec extends FirrtlFlatSpec { they should "run right before the emitter* when inputForm=LowForm" in { - val custom = Dependency[IdentityLowForm] - - def testOrder(after: Seq[Dependency[Transform]], before: Seq[Dependency[Transform]]): Unit = { - val expectedSlice: Seq[Dependency[Transform]] = before ++: custom +: after - - info(expectedSlice.map(_.getSimpleName).mkString(" -> ") + " ok!") - - val compiler = new firrtl.stage.transforms.Compiler(custom +: after) - info("Transform Order: \n" + compiler.prettyPrint(" ")) - + val locationMap = Map( + Dependency[LowFirrtlEmitter] -> Dependency[LowFirrtlEmitter], + Dependency[MinimumVerilogEmitter] -> Dependency(ConvertAsserts), + Dependency[VerilogEmitter] -> Dependency(ConvertAsserts), + Dependency[SystemVerilogEmitter] -> Dependency[LegalizeAndReductionsTransform] + ) - compiler + Seq( + Dependency[LowFirrtlEmitter], + Dependency[MinimumVerilogEmitter], + Dependency[VerilogEmitter], + Dependency[SystemVerilogEmitter] + ).foreach { emitter => + val custom = Dependency[IdentityLowForm] + val tm = new firrtl.stage.transforms.Compiler(custom :: emitter :: Nil) + info(s"when using ${emitter.getObject.name}") + tm .flattenedTransformOrder - .map(Dependency.fromTransform(_)) - .containsSlice(expectedSlice) should be (true) + .map(Dependency.fromTransform) + .sliding(2) + .toList should contain (Seq(custom, locationMap(emitter))) } - val Seq(low, lowMinOpt, lowOpt) = - Seq(Forms.LowForm, Forms.LowFormMinimumOptimized, Forms.LowFormOptimized) - .map(target => new firrtl.stage.transforms.Compiler(target)) - .map(_.flattenedTransformOrder.map(Dependency.fromTransform(_))) - - Seq( (Seq(Dependency[LowFirrtlEmitter]), Seq(low.last) ), - (Seq(Dependency[LegalizeAndReductionsTransform], - Dependency(ConvertAsserts), - Dependency[RemoveVerificationStatements], - Dependency[MinimumVerilogEmitter]), Seq(lowMinOpt.last)), - (Seq(Dependency[LegalizeAndReductionsTransform], - Dependency(ConvertAsserts), - Dependency[RemoveVerificationStatements], - Dependency[VerilogEmitter]), Seq(lowOpt.last) ), - (Seq(Dependency[LegalizeAndReductionsTransform], - Dependency[SystemVerilogEmitter]), Seq(lowOpt.last) ) - ).foreach((testOrder _).tupled) } they should "work if placed inside an object" in { |
