From debee42971229c7d1f1f698d65ea3fd089609af5 Mon Sep 17 00:00:00 2001 From: Schuyler Eldridge Date: Fri, 10 Jul 2020 22:55:47 -0400 Subject: 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 --- .../scala/firrtlTests/CustomTransformSpec.scala | 53 +++++++++------------- 1 file changed, 21 insertions(+), 32 deletions(-) (limited to 'src') 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 { -- cgit v1.2.3