diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/scala/chiselTests/util/experimental/DecoderSpec.scala | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/util/experimental/DecoderSpec.scala b/src/test/scala/chiselTests/util/experimental/DecoderSpec.scala new file mode 100644 index 00000000..3c9d490d --- /dev/null +++ b/src/test/scala/chiselTests/util/experimental/DecoderSpec.scala @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: Apache-2.0 + +package chiselTests.util.experimental + +import chisel3.util.experimental.decode.{DecodeTableAnnotation, Minimizer, QMCMinimizer, TruthTable} +import chiselTests.SMTModelCheckingSpec +import chiselTests.util.experimental.minimizer.DecodeTestModule +import firrtl.annotations.ReferenceTarget + +class DecoderSpec extends SMTModelCheckingSpec { + val xor = TruthTable( + """10->1 + |01->1 + | 0""".stripMargin) + + def minimizer: Minimizer = QMCMinimizer + + "decoder" should "pass without DecodeTableAnnotation" in { + test( + () => new DecodeTestModule(minimizer, table = xor), + s"${minimizer.getClass.getSimpleName}.noAnno", + success + ) + } + + "decoder" should "fail with a incorrect DecodeTableAnnotation" in { + test( + () => new DecodeTestModule(minimizer, table = xor), + s"${minimizer.getClass.getSimpleName}.incorrectAnno", + fail(0), + annos = Seq( + DecodeTableAnnotation(ReferenceTarget("", "", Nil, "", Nil), + """10->1 + |01->1 + | 0""".stripMargin, + """10->1 + | 0""".stripMargin + ) + ) + ) + } + + "decoder" should "success with a correct DecodeTableAnnotation" in { + test( + () => new DecodeTestModule(minimizer, table = xor), + s"${minimizer.getClass.getSimpleName}.correctAnno", + success, + annos = Seq( + DecodeTableAnnotation(ReferenceTarget("", "", Nil, "", Nil), + """10->1 + |01->1 + | 0""".stripMargin, + QMCMinimizer.minimize(TruthTable( + """10->1 + |01->1 + | 0""".stripMargin)).toString + ) + ) + ) + } +} |
