import pytest from solution import Range, part1, part2 @pytest.fixture def example() -> str: return """2-4,6-8 2-3,4-5 5-7,7-9 2-8,3-7 6-6,4-6 2-6,4-8""" @pytest.mark.parametrize( "a,b,expected", [ (Range(2, 4), Range(3, 4), True), (Range(2, 4), Range(1, 4), True), (Range(2, 4), Range(2, 4), True), (Range(4, 4), Range(3, 4), True), (Range(2, 4), Range(3, 5), False), (Range(4, 4), Range(3, 3), False), ], ) def test_range_fully_contains(a: Range, b: Range, expected: bool) -> None: assert a.fully_contains(b) == expected assert b.fully_contains(a) == expected @pytest.mark.parametrize( "a,b,expected", [ (Range(5, 7), Range(7, 9), True), (Range(2, 8), Range(3, 7), True), (Range(6, 6), Range(4, 6), True), (Range(2, 6), Range(4, 8), True), (Range(5, 7), Range(8, 9), False), (Range(2, 3), Range(5, 7), False), (Range(6, 6), Range(4, 5), False), (Range(2, 2), Range(4, 4), False), ], ) def test_range_overlaps(a: Range, b: Range, expected: bool) -> None: assert a.overlaps(b) == expected assert b.overlaps(a) == expected def test_part1(example: str) -> None: assert part1(example) == 2 def test_part2(example: str) -> None: assert part2(example) == 4