Source code for day20.tests.test_parsers

"""Test parsing code."""
from day20.day20 import FILE_A, FILE_B
from day20.lib.classes import (
    BaseModule,
    BroadcastModule,
    ConjunctionModule,
    FlipFlopModule,
)
from day20.lib.parsers import finalize_modules, get_modules, parse_line


[docs] def test_parse_line() -> None: """Test ``parse_line()``.""" module: BaseModule = parse_line("broadcaster -> a") assert isinstance(module, BroadcastModule) module = parse_line("%a -> inv, con") assert isinstance(module, FlipFlopModule) assert module.outputs == ["inv", "con"] module = parse_line("&a -> inv, con") assert isinstance(module, ConjunctionModule) assert module.outputs == ["inv", "con"]
[docs] def test_get_modules() -> None: """Test ``get_modules``.""" modules: list[BaseModule] = get_modules(FILE_A) assert len(modules) == 5 assert modules[0].outputs == ["a", "b", "c"] assert modules[1].outputs == ["b"] assert modules[2].outputs == ["c"] assert modules[3].outputs == ["inv"] assert modules[4].outputs == ["a"] assert isinstance(modules[0], BroadcastModule) assert isinstance(modules[1], FlipFlopModule) assert isinstance(modules[2], FlipFlopModule) assert isinstance(modules[3], FlipFlopModule) assert isinstance(modules[4], ConjunctionModule)
[docs] def test_finalize_modules() -> None: """Test ``finalize_modules()``.""" modules: list[BaseModule] = get_modules(FILE_A) modules = finalize_modules(modules) assert isinstance(modules[4], ConjunctionModule) assert set(modules[4].inputs.keys()) == {"c"} modules = get_modules(FILE_B) modules = finalize_modules(modules) assert isinstance(modules[4], ConjunctionModule) assert set(modules[4].inputs.keys()) == {"a", "b"}