from desktop_mark.models import Rect def test_normalized_keeps_positive_drag() -> None: assert Rect(10, 20, 30, 40).normalized() == Rect(10, 20, 30, 40) def test_normalized_handles_negative_drag() -> None: assert Rect(50, 60, -20, -30).normalized() == Rect(30, 30, 20, 30) def test_clamped_to_bounds() -> None: rect = Rect(80, 90, 50, 40).clamped_to(Rect(100, 100, 100, 100)) assert rect == Rect(100, 100, 30, 30) def test_clamped_negative_drag_to_bounds() -> None: rect = Rect(250, 250, -200, -200).clamped_to(Rect(100, 100, 100, 100)) assert rect == Rect(100, 100, 100, 100) def test_contains_uses_normalized_half_open_bounds() -> None: rect = Rect(20, 20, -10, -10) assert rect.contains(10, 10) assert rect.contains(19, 19) assert not rect.contains(20, 20)