Source code for day03.tests.test_classes

"""tests day3's classes."""
from dataclasses import dataclass

import pytest

from day03.day3 import INPUT_SMALL
from day03.lib.classes import Gear, Matrix, PartNumber
from day03.lib.parsers import get_matrix


[docs] @dataclass class PartNumberTouchTest: """Result for a part number touching something else.""" col: int row: int row_size: int result: bool
[docs] def test_part_number() -> None: """Tests part number class.""" part_number = PartNumber(0, 0, 3, 467) assert part_number.end_index == 3 tests = [ PartNumberTouchTest(0, 0, 10, True), PartNumberTouchTest(0, 0, 10, True), PartNumberTouchTest(1, 0, 10, True), PartNumberTouchTest(2, 0, 10, True), PartNumberTouchTest(3, 0, 10, True), PartNumberTouchTest(0, 0, 10, True), PartNumberTouchTest(1, 1, 10, True), PartNumberTouchTest(2, 1, 10, True), PartNumberTouchTest(3, 1, 10, True), PartNumberTouchTest(1, -1, 10, True), PartNumberTouchTest(2, -1, 10, True), PartNumberTouchTest(3, -1, 10, True), PartNumberTouchTest(4, 0, 10, False), ] for test in tests: assert part_number.touching(test.col, test.row, test.row_size) == test.result
[docs] def test_matrix() -> None: """Tests matrix.""" matrix: Matrix = get_matrix(INPUT_SMALL) part_numbers: list["PartNumber"] = matrix.get_part_numbers() assert (matrix.row_count, matrix.row_size) == (10, 10) assert len(part_numbers) == 10 part_numbers = matrix.filter_engine_parts(part_numbers) assert len(part_numbers) == 8 assert not Matrix.is_engine_part_row("123.24.56") assert Matrix.is_engine_part_row("123.#24.56") assert Matrix.is_engine_part_row("123.*24.56") gears: list[Gear] = matrix.get_gears(part_numbers) assert len(gears) == 3 matrix2: Matrix = Matrix(["*755."]) assert matrix2.is_engine_part(PartNumber(1, 0, 3, 755))
[docs] def test_gear() -> None: """Tests gear class.""" # 69... # ..*78 # 54... part_number1 = PartNumber(0, 0, 2, 69) part_number2 = PartNumber(3, 1, 2, 78) part_number3 = PartNumber(0, 2, 2, 54) gear1 = Gear(1, 2, [part_number1]) gear2 = Gear(1, 2, [part_number1, part_number2]) gear3 = Gear(1, 2, [part_number1, part_number2, part_number3]) assert gear1.gear_ratio == 0 assert gear2.gear_ratio == 69 * 78 assert gear3.gear_ratio == 0 gear_not_init = Gear(1, 1) with pytest.raises(ValueError): gear_not_init.gear_ratio