summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/PopCount.scala
blob: eaea7a2cfa8755f1b6fac38dbb1e621b50513ab5 (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
// SPDX-License-Identifier: Apache-2.0

package chiselTests

import chisel3._
import chisel3.util.PopCount
import chisel3.testers.BasicTester

class PopCountTester(n: Int) extends BasicTester {
  val x = RegInit(0.U(n.W))
  x := x + 1.U
  when(RegNext(x === ~0.U(n.W))) { stop() }

  val result = PopCount(x.asBools)
  val expected = x.asBools.foldLeft(0.U)(_ +& _)
  assert(result === expected)

  require(result.getWidth == BigInt(n).bitLength)
}

class PopCountSpec extends ChiselPropSpec {
  property("Mul lookup table should return the correct result") {
    forAll(smallPosInts) { (n: Int) => assertTesterPasses { new PopCountTester(n) } }
  }
}