add more test
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import unittest
|
||||
from random import randint
|
||||
|
||||
|
||||
def pop_count(value: int) -> int:
|
||||
value -= ((value >> 1) & 0x55555555)
|
||||
value = (((value >> 2) & 0x33333333) + (value & 0x33333333))
|
||||
value = (((value >> 4) + value) & 0x0f0f0f0f)
|
||||
value += (value >> 8)
|
||||
value += (value >> 16)
|
||||
return value & 0x0000003f
|
||||
|
||||
|
||||
def bit_reverse(value: int) -> int:
|
||||
value = (((value & 0xaaaaaaaa) >> 1) | ((value & 0x55555555) << 1))
|
||||
value = (((value & 0xcccccccc) >> 2) | ((value & 0x33333333) << 2))
|
||||
value = (((value & 0xf0f0f0f0) >> 4) | ((value & 0x0f0f0f0f) << 4))
|
||||
value = (((value & 0xff00ff00) >> 8) | ((value & 0x00ff00ff) << 8))
|
||||
return (value >> 16) | (value << 16)
|
||||
|
||||
|
||||
def umc_pass_check(v1: int, v2: int) -> bool:
|
||||
return pop_count(v1) + pop_count(v2) == 4
|
||||
|
||||
|
||||
class PopCountTest(unittest.TestCase):
|
||||
def test_zero(self):
|
||||
self.assertEqual(0, pop_count(0))
|
||||
|
||||
def test_one(self):
|
||||
self.assertEqual(1, pop_count(1))
|
||||
|
||||
def test_two(self):
|
||||
for _ in range(4):
|
||||
a = randint(0, 8)
|
||||
b = randint(0, 8)
|
||||
|
||||
while a == b:
|
||||
b = randint(0, 8)
|
||||
|
||||
a = 1 << a
|
||||
b = 1 << b
|
||||
v = a | b
|
||||
self.assertEqual(2, pop_count(v))
|
||||
|
||||
|
||||
class BitReverseTest(unittest.TestCase):
|
||||
def test_zero(self):
|
||||
self.assertEqual(0, bit_reverse(0))
|
||||
|
||||
def test_one(self):
|
||||
self.assertEqual(0x8000_0000, bit_reverse(1))
|
||||
|
||||
def test_random_one(self):
|
||||
for _ in range(4):
|
||||
a = randint(0, 15)
|
||||
b = 31 - a
|
||||
|
||||
va = 1 << a
|
||||
vb = 1 << b
|
||||
|
||||
self.assertEqual(vb, bit_reverse(va), f"a = {a}, b = {b}")
|
||||
|
||||
|
||||
class UmcPassCheckTest(unittest.TestCase):
|
||||
def test_validate(self):
|
||||
self.assertFalse(umc_pass_check(0b0101_0001_0100_0000_0000_0000_0000_0000,
|
||||
0b0101_0000_0000_1100_0000_0000_0000_0000))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user