[Arc] Error out on zero radius

This commit is contained in:
Jan Petykiewicz 2026-03-31 22:03:42 -07:00
commit 2176d56b4c
2 changed files with 15 additions and 6 deletions

View file

@ -54,8 +54,8 @@ class Arc(PositionableImpl, Shape):
val = numpy.array(val, dtype=float).flatten() val = numpy.array(val, dtype=float).flatten()
if not val.size == 2: if not val.size == 2:
raise PatternError('Radii must have length 2') raise PatternError('Radii must have length 2')
if not val.min() >= 0: if not val.min() > 0:
raise PatternError('Radii must be non-negative') raise PatternError('Radii must be positive')
self._radii = val self._radii = val
@property @property
@ -64,8 +64,8 @@ class Arc(PositionableImpl, Shape):
@radius_x.setter @radius_x.setter
def radius_x(self, val: float) -> None: def radius_x(self, val: float) -> None:
if not val >= 0: if not val > 0:
raise PatternError('Radius must be non-negative') raise PatternError('Radius must be positive')
self._radii[0] = val self._radii[0] = val
@property @property
@ -74,8 +74,8 @@ class Arc(PositionableImpl, Shape):
@radius_y.setter @radius_y.setter
def radius_y(self, val: float) -> None: def radius_y(self, val: float) -> None:
if not val >= 0: if not val > 0:
raise PatternError('Radius must be non-negative') raise PatternError('Radius must be positive')
self._radii[1] = val self._radii[1] = val
# arc start/stop angle properties # arc start/stop angle properties

View file

@ -128,6 +128,15 @@ def test_ellipse_integer_radii_scale_cleanly() -> None:
assert_allclose(ellipse.radii, [5, 10]) assert_allclose(ellipse.radii, [5, 10])
def test_arc_rejects_zero_radii_up_front() -> None:
with pytest.raises(PatternError, match='Radii must be positive'):
Arc(radii=(0, 5), angles=(0, 1), width=1)
with pytest.raises(PatternError, match='Radii must be positive'):
Arc(radii=(5, 0), angles=(0, 1), width=1)
with pytest.raises(PatternError, match='Radii must be positive'):
Arc(radii=(0, 0), angles=(0, 1), width=1)
def test_path_edge_cases() -> None: def test_path_edge_cases() -> None:
# Zero-length segments # Zero-length segments
p = MPath(vertices=[[0, 0], [0, 0], [10, 0]], width=2) p = MPath(vertices=[[0, 0], [0, 0], [10, 0]], width=2)