///|
pub fn signal_path(signal : Signal) -> String {
  if signal.scope.length() == 0 {
    signal.name
  } else {
    signal.scope.join(".") + "." + signal.name
  }
}

///|
pub fn text_report(trace : Trace) -> String {
  let out : Array[String] = []
  out.push("MoonBit VCD report")
  out.push("signals: \{trace.signals.length()}")
  out.push("changes: \{trace.changes.length()}")
  out.push("end time: \{trace.end_time}")
  for signal in trace.signals {
    let item = stats(trace, signal.id)
    out.push(
      "- \{signal_path(signal)} [\{signal.id}] changes=\{item.changes} rising=\{item.rising_edges} falling=\{item.falling_edges}",
    )
  }
  out.join("\n")
}