summaryrefslogtreecommitdiff
path: root/integration-tests
diff options
context:
space:
mode:
Diffstat (limited to 'integration-tests')
-rw-r--r--integration-tests/src/test/scala/chiselTests/util/experimental/algorithm/Bitwise.scala47
1 files changed, 47 insertions, 0 deletions
diff --git a/integration-tests/src/test/scala/chiselTests/util/experimental/algorithm/Bitwise.scala b/integration-tests/src/test/scala/chiselTests/util/experimental/algorithm/Bitwise.scala
new file mode 100644
index 00000000..6c8eb4b4
--- /dev/null
+++ b/integration-tests/src/test/scala/chiselTests/util/experimental/algorithm/Bitwise.scala
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: Apache-2.0
+
+import chisel3._
+import chisel3.util._
+import chiseltest._
+import chiseltest.formal._
+import org.scalatest.flatspec.AnyFlatSpec
+import scala.math.min
+
+class ScanLeftOrTestModule(width: Int) extends Module {
+ val input = IO(Input(UInt(width.W)))
+
+ var lsb = false.B
+ val vec = for(b <- input.asBools) yield {
+ val cur = b || lsb
+ lsb = cur
+ cur
+ }
+ val ref = VecInit(vec).asUInt
+
+ val testee = scanLeftOr(input)
+
+ assert(testee === ref)
+}
+
+class ScanRightOrTestModule(width: Int) extends Module {
+ val input = IO(Input(UInt(width.W)))
+
+ val ref = Reverse(scanLeftOr(Reverse(input)))
+ val testee = scanRightOr(input)
+
+ assert(testee === ref)
+}
+
+class scanOrTest extends AnyFlatSpec with ChiselScalatestTester with Formal {
+ "scanLeftOr" should "compute correctly" in {
+ for(i <- 1 to 16) {
+ verify(new ScanLeftOrTestModule(i), Seq(BoundedCheck(1)))
+ }
+ }
+
+ "scanRightOr" should "compute correctly" in {
+ for(i <- 1 to 16) {
+ verify(new ScanRightOrTestModule(i), Seq(BoundedCheck(1)))
+ }
+ }
+}