hdl: disallow signed(0) values with unclear semantics.

Fixes #807.
This commit is contained in:
Catherine 2023-09-03 04:27:17 +00:00
parent 21b5451036
commit f135226a79
3 changed files with 36 additions and 13 deletions

View file

@ -42,11 +42,20 @@ class ShapeTestCase(FHDLTestCase):
s3 = Shape(3, True)
self.assertEqual(s3.width, 3)
self.assertEqual(s3.signed, True)
s4 = Shape(0)
self.assertEqual(s4.width, 0)
self.assertEqual(s4.signed, False)
def test_make_wrong(self):
with self.assertRaisesRegex(TypeError,
r"^Width must be a non-negative integer, not -1$"):
Shape(-1)
r"^Width must be an integer, not 'a'$"):
Shape("a")
with self.assertRaisesRegex(TypeError,
r"^Width of an unsigned value must be zero or a positive integer, not -1$"):
Shape(-1, signed=False)
with self.assertRaisesRegex(TypeError,
r"^Width of a signed value must be a positive integer, not 0$"):
Shape(0, signed=True)
def test_compare_non_shape(self):
self.assertNotEqual(Shape(1, True), "hi")
@ -87,7 +96,7 @@ class ShapeTestCase(FHDLTestCase):
def test_cast_int_wrong(self):
with self.assertRaisesRegex(TypeError,
r"^Width must be a non-negative integer, not -1$"):
r"^Width of an unsigned value must be zero or a positive integer, not -1$"):
Shape.cast(-1)
def test_cast_tuple_wrong(self):
@ -116,7 +125,7 @@ class ShapeTestCase(FHDLTestCase):
self.assertEqual(s6.signed, False)
s7 = Shape.cast(range(-1, -1))
self.assertEqual(s7.width, 0)
self.assertEqual(s7.signed, True)
self.assertEqual(s7.signed, False)
s8 = Shape.cast(range(0, 10, 3))
self.assertEqual(s8.width, 4)
self.assertEqual(s8.signed, False)
@ -386,7 +395,7 @@ class ConstTestCase(FHDLTestCase):
def test_shape_wrong(self):
with self.assertRaisesRegex(TypeError,
r"^Width must be a non-negative integer, not -1$"):
r"^Width of an unsigned value must be zero or a positive integer, not -1$"):
Const(1, -1)
def test_wrong_fencepost(self):
@ -1022,7 +1031,7 @@ class SignalTestCase(FHDLTestCase):
def test_shape_wrong(self):
with self.assertRaisesRegex(TypeError,
r"^Width must be a non-negative integer, not -10$"):
r"^Width of an unsigned value must be zero or a positive integer, not -10$"):
Signal(-10)
def test_name(self):