diff options
| author | Jack Koenig | 2021-08-20 16:38:08 -0700 |
|---|---|---|
| committer | GitHub | 2021-08-20 23:38:08 +0000 |
| commit | 762f7747bd2082c27af9cb46f5e2333df0329a56 (patch) | |
| tree | 194a2bb8862418af866382b12b2d16377afcbe69 /src/test | |
| parent | 765af619af24fccd2dea748e95d70c9c6e8ea12b (diff) | |
Fix Serializer for single indented DefModule emission (#2332)
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/scala/firrtlTests/SerializerSpec.scala | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/src/test/scala/firrtlTests/SerializerSpec.scala b/src/test/scala/firrtlTests/SerializerSpec.scala index e8245872..aae0ff1f 100644 --- a/src/test/scala/firrtlTests/SerializerSpec.scala +++ b/src/test/scala/firrtlTests/SerializerSpec.scala @@ -4,7 +4,7 @@ package firrtlTests import org.scalatest._ import firrtl.ir._ -import firrtl.Utils +import firrtl.{Parser, Utils} import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers @@ -33,6 +33,37 @@ object SerializerSpec { def mapType(f: Type => Type): Expression = this.copy(expr.mapType(f)) def mapWidth(f: Width => Width): Expression = this.copy(expr.mapWidth(f)) } + + private def tab(s: String): String = { + // Careful to only tab non-empty lines + s.split("\n") + .map { line => + if (line.nonEmpty) Serializer.Indent + line else line + } + .mkString("\n") + } + + val testModule: String = + """module test : + | input in : UInt<8> + | output out : UInt<8> + | + | inst c of child + | c.in <= in + | out <= c.out""".stripMargin + + val testModuleTabbed: String = tab(testModule) + + val childModule: String = + """extmodule child : + | input in : UInt<8> + | output out : UInt<8> + | defname = child""".stripMargin + + val childModuleTabbed: String = tab(childModule) + + val simpleCircuit: String = + "circuit test :\n" + childModuleTabbed + "\n\n" + testModuleTabbed + "\n" } class SerializerSpec extends AnyFlatSpec with Matchers { @@ -58,4 +89,31 @@ class SerializerSpec extends AnyFlatSpec with Matchers { Serializer.serialize(stmts) should be(ser) } + it should "support emitting circuits" in { + val parsed = Parser.parse(simpleCircuit) + val serialized = Serializer.serialize(parsed) + serialized should be(simpleCircuit) + } + + it should "support emitting individual modules" in { + val parsed = Parser.parse(simpleCircuit) + val m = parsed.modules.find(_.name == "test").get + val serialized = Serializer.serialize(m) + serialized should be(testModule) + } + + it should "support emitting indented individual modules" in { + val parsed = Parser.parse(simpleCircuit) + val m = parsed.modules.find(_.name == "test").get + val serialized = Serializer.serialize(m, 1) + serialized should be(testModuleTabbed) + } + + it should "support emitting indented individual extmodules" in { + val parsed = Parser.parse(simpleCircuit) + val m = parsed.modules.find(_.name == "child").get + val serialized = Serializer.serialize(m, 1) + serialized should be(childModuleTabbed) + } + } |
