aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/firrtlTests
diff options
context:
space:
mode:
authorJack Koenig2020-12-15 16:41:53 -0800
committerGitHub2020-12-15 16:41:53 -0800
commit15013df6f6ac2dafeb35d7ed15cf95c7ac8a5bef (patch)
tree778a57914de512748d93c6aca6c2a2e4ded0a06d /src/test/scala/firrtlTests
parent93869ccec89aa9739b6fe9f0e3bd62ae8cf155cd (diff)
Improve performance of LowerTypes renaming (#2024)
This is done by having LowerTypes uses two RenameMaps instead of one for each module. There is one for renaming instance paths, and one for renaming everything within modules. Also add some utilities: * TargetUtils for dealing with InstanceTargets * RenameMap.fromInstanceRenames
Diffstat (limited to 'src/test/scala/firrtlTests')
-rw-r--r--src/test/scala/firrtlTests/RenameMapSpec.scala2
-rw-r--r--src/test/scala/firrtlTests/annotationTests/TargetUtilsSpec.scala56
2 files changed, 58 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/RenameMapSpec.scala b/src/test/scala/firrtlTests/RenameMapSpec.scala
index 29466c72..bebeb0bf 100644
--- a/src/test/scala/firrtlTests/RenameMapSpec.scala
+++ b/src/test/scala/firrtlTests/RenameMapSpec.scala
@@ -5,6 +5,8 @@ package firrtlTests
import firrtl.RenameMap
import firrtl.RenameMap.IllegalRenameException
import firrtl.annotations._
+import firrtl.annotations.TargetToken.{Instance, OfModule}
+import firrtl.analyses.InstanceKeyGraph
import firrtl.testutils._
class RenameMapSpec extends FirrtlFlatSpec {
diff --git a/src/test/scala/firrtlTests/annotationTests/TargetUtilsSpec.scala b/src/test/scala/firrtlTests/annotationTests/TargetUtilsSpec.scala
new file mode 100644
index 00000000..38266efe
--- /dev/null
+++ b/src/test/scala/firrtlTests/annotationTests/TargetUtilsSpec.scala
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: Apache-2.0
+
+package firrtlTests.annotationTests
+
+import firrtl.analyses.InstanceKeyGraph.InstanceKey
+import firrtl.annotations._
+import firrtl.annotations.TargetToken._
+import firrtl.annotations.TargetUtils._
+import firrtl.testutils.FirrtlFlatSpec
+
+class TargetUtilsSpec extends FirrtlFlatSpec {
+
+ behavior.of("instKeyPathToTarget")
+
+ it should "create a ModuleTarget for the top module" in {
+ val input = InstanceKey("Top", "Top") :: Nil
+ val expected = ModuleTarget("Top", "Top")
+ instKeyPathToTarget(input) should be(expected)
+ }
+
+ it should "create absolute InstanceTargets" in {
+ val input = InstanceKey("Top", "Top") ::
+ InstanceKey("foo", "Foo") ::
+ InstanceKey("bar", "Bar") ::
+ Nil
+ val expected = InstanceTarget("Top", "Top", Seq((Instance("foo"), OfModule("Foo"))), "bar", "Bar")
+ instKeyPathToTarget(input) should be(expected)
+ }
+
+ it should "support starting somewhere down the path" in {
+ val input = InstanceKey("Top", "Top") ::
+ InstanceKey("foo", "Foo") ::
+ InstanceKey("bar", "Bar") ::
+ InstanceKey("fizz", "Fizz") ::
+ Nil
+ val expected = InstanceTarget("Top", "Bar", Seq(), "fizz", "Fizz")
+ instKeyPathToTarget(input, Some("Bar")) should be(expected)
+ }
+
+ behavior.of("unfoldInstanceTargets")
+
+ it should "return nothing for ModuleTargets" in {
+ val input = ModuleTarget("Top", "Foo")
+ unfoldInstanceTargets(input) should be(Iterable())
+ }
+
+ it should "return all other InstanceTargets to the same instance" in {
+ val input = ModuleTarget("Top", "Top").instOf("foo", "Foo").instOf("bar", "Bar").instOf("fizz", "Fizz")
+ val expected =
+ input ::
+ ModuleTarget("Top", "Foo").instOf("bar", "Bar").instOf("fizz", "Fizz") ::
+ ModuleTarget("Top", "Bar").instOf("fizz", "Fizz") ::
+ Nil
+ unfoldInstanceTargets(input) should be(expected)
+ }
+}