aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorJack Koenig2021-08-20 16:38:08 -0700
committerGitHub2021-08-20 23:38:08 +0000
commit762f7747bd2082c27af9cb46f5e2333df0329a56 (patch)
tree194a2bb8862418af866382b12b2d16377afcbe69 /src/test
parent765af619af24fccd2dea748e95d70c9c6e8ea12b (diff)
Fix Serializer for single indented DefModule emission (#2332)
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/firrtlTests/SerializerSpec.scala60
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)
+ }
+
}