Implement RFC 17: Remove log2_int.
Reexports of `amaranth.utils` functions are removed from `amaranth._utils` to avoid a circular import issue (for `deprecated`). Since this is a private module, this should not be a problem.
This commit is contained in:
parent
ea258fad71
commit
7f76914b74
8 changed files with 142 additions and 20 deletions
75
tests/test_utils.py
Normal file
75
tests/test_utils.py
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
import unittest
|
||||
|
||||
from amaranth.utils import *
|
||||
from amaranth._utils import _ignore_deprecated
|
||||
|
||||
|
||||
class Log2TestCase(unittest.TestCase):
|
||||
def test_ceil_log2(self):
|
||||
self.assertEqual(ceil_log2(0), 0)
|
||||
self.assertEqual(ceil_log2(1), 0)
|
||||
self.assertEqual(ceil_log2(2), 1)
|
||||
self.assertEqual(ceil_log2(3), 2)
|
||||
self.assertEqual(ceil_log2(4), 2)
|
||||
self.assertEqual(ceil_log2(5), 3)
|
||||
self.assertEqual(ceil_log2(8), 3)
|
||||
self.assertEqual(ceil_log2(9), 4)
|
||||
with self.assertRaises(TypeError):
|
||||
ceil_log2(1.5)
|
||||
with self.assertRaises(ValueError):
|
||||
ceil_log2(-1)
|
||||
|
||||
def test_exact_log2(self):
|
||||
self.assertEqual(exact_log2(1), 0)
|
||||
self.assertEqual(exact_log2(2), 1)
|
||||
self.assertEqual(exact_log2(4), 2)
|
||||
self.assertEqual(exact_log2(8), 3)
|
||||
for val in [-1, 0, 3, 5, 6, 7, 9]:
|
||||
with self.assertRaises(ValueError):
|
||||
exact_log2(val)
|
||||
with self.assertRaises(TypeError):
|
||||
exact_log2(1.5)
|
||||
|
||||
@_ignore_deprecated
|
||||
def test_log2_int(self):
|
||||
self.assertEqual(log2_int(1), 0)
|
||||
self.assertEqual(log2_int(2), 1)
|
||||
self.assertEqual(log2_int(4), 2)
|
||||
self.assertEqual(log2_int(8), 3)
|
||||
for val in [-1, 3, 5, 6, 7, 9]:
|
||||
with self.assertRaises(ValueError):
|
||||
log2_int(val)
|
||||
with self.assertRaises(TypeError):
|
||||
log2_int(1.5)
|
||||
self.assertEqual(log2_int(0, False), 0)
|
||||
self.assertEqual(log2_int(1, False), 0)
|
||||
self.assertEqual(log2_int(2, False), 1)
|
||||
self.assertEqual(log2_int(3, False), 2)
|
||||
self.assertEqual(log2_int(4, False), 2)
|
||||
self.assertEqual(log2_int(5, False), 3)
|
||||
self.assertEqual(log2_int(8, False), 3)
|
||||
self.assertEqual(log2_int(9, False), 4)
|
||||
|
||||
def test_bits_for(self):
|
||||
self.assertEqual(bits_for(-4), 3)
|
||||
self.assertEqual(bits_for(-3), 3)
|
||||
self.assertEqual(bits_for(-2), 2)
|
||||
self.assertEqual(bits_for(-1), 1)
|
||||
self.assertEqual(bits_for(0), 1)
|
||||
self.assertEqual(bits_for(1), 1)
|
||||
self.assertEqual(bits_for(2), 2)
|
||||
self.assertEqual(bits_for(3), 2)
|
||||
self.assertEqual(bits_for(4), 3)
|
||||
self.assertEqual(bits_for(5), 3)
|
||||
self.assertEqual(bits_for(-4, True), 3)
|
||||
self.assertEqual(bits_for(-3, True), 3)
|
||||
self.assertEqual(bits_for(-2, True), 2)
|
||||
self.assertEqual(bits_for(-1, True), 1)
|
||||
self.assertEqual(bits_for(0, True), 1)
|
||||
self.assertEqual(bits_for(1, True), 2)
|
||||
self.assertEqual(bits_for(2, True), 3)
|
||||
self.assertEqual(bits_for(3, True), 3)
|
||||
self.assertEqual(bits_for(4, True), 4)
|
||||
self.assertEqual(bits_for(5, True), 4)
|
||||
with self.assertRaises(TypeError):
|
||||
bits_for(1.5)
|
||||
Loading…
Add table
Add a link
Reference in a new issue