summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/GCD.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/chiselTests/GCD.scala')
-rw-r--r--src/test/scala/chiselTests/GCD.scala50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/GCD.scala b/src/test/scala/chiselTests/GCD.scala
new file mode 100644
index 00000000..4f861201
--- /dev/null
+++ b/src/test/scala/chiselTests/GCD.scala
@@ -0,0 +1,50 @@
+package Chisel
+import Chisel.testers._
+import org.scalatest._
+import org.scalatest.prop._
+import org.scalatest.prop.TableDrivenPropertyChecks._
+
+class GCD extends Module {
+ val io = new Bundle {
+ val a = Bits(INPUT, 16)
+ val b = Bits(INPUT, 16)
+ val e = Bool(INPUT)
+ val z = Bits(OUTPUT, 16)
+ val v = Bool(OUTPUT)
+ }
+ val x = Reg(Bits(width = 16))
+ val y = Reg(Bits(width = 16))
+ when (x > y) { x := x -% y }
+ .otherwise { y := y -% x }
+ when (io.e) { x := io.a; y := io.b }
+ io.z := x
+ io.v := y === Bits(0)
+}
+
+class GCDSpec extends ChiselSpec {
+
+ class GCDTester(a: Int, b: Int, z: Int) extends BasicTester {
+ val dut = Module(new GCD)
+ val first = Reg(init=Bool(true))
+ dut.io.a := UInt(a)
+ dut.io.b := UInt(b)
+ dut.io.e := first
+ when(first) { first := Bool(false) }
+ when(dut.io.v) {
+ io.done := Bool(true)
+ io.error := (dut.io.z != UInt(z)).toUInt
+ }
+ }
+
+ val gcds = Table(
+ ("a", "b", "z"), // First tuple defines column names
+ ( 64, 48, 16), // Subsequent tuples define the data
+ ( 12, 9, 3),
+ ( 48, 64, 12))
+
+ "GCD" should "return the correct result" in {
+ forAll (gcds) { (a: Int, b: Int, z: Int) =>
+ assert(TesterDriver.execute{ new GCDTester(a, b, z) })
+ }
+ }
+}