56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
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
|