aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/firrtlTests/annotationTests/JsonProtocolSpec.scala
blob: 2dce89db6ccea1d0e7ca1ca56a12d37debe0b67f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// See LICENSE for license details.

package firrtlTests.annotationTests

import firrtl.Parser
import firrtl.annotations.{Annotation, JsonProtocol, NoTargetAnnotation}
import firrtl.ir._
import org.scalatest.{FlatSpec, Matchers, PropSpec}

case class AnAnnotation(
    info: Info,
    cir: Circuit,
    mod: DefModule,
    port: Port,
    statement: Statement,
    expr: Expression,
    tpe: Type
) extends NoTargetAnnotation

class JsonProtocolSpec extends FlatSpec with Matchers {
  "JsonProtocol" should "serialize and deserialize FIRRTL types" in {

    val circuit =
      """circuit Top: @[FPU.scala 509:25]
        |  module Top:
        |    input x: UInt
        |    output y: UInt
        |    y <= add(x, x)
        |""".stripMargin
    val cir = Parser.parse(circuit)
    val mod = cir.modules.head
    val port = mod.ports.head
    val stmt = mod.asInstanceOf[Module].body
    val expr = stmt.asInstanceOf[Block].stmts.head.asInstanceOf[Connect].expr
    val tpe = port.tpe
    val inputAnnos = Seq(AnAnnotation(cir.info, cir, mod, port, stmt, expr, tpe))
    val annosString = JsonProtocol.serialize(inputAnnos)
    val outputAnnos = JsonProtocol.deserialize(annosString)
    inputAnnos should be (outputAnnos)
  }

}