Source code for day19.tests.test_classes

"""Tests for day19 classes."""
from day19.lib.classes import (
    Comparator,
    Component,
    Condition,
    Part,
    PartRange,
    PartRangeDest,
    Rule,
    Workflow,
)


[docs] def get_part_range() -> tuple[Part, Part]: """Returns a reusable partrange for our tests.""" return Part(100, 100, 100, 100), Part(150, 200, 150, 150)
[docs] def test_part_range() -> None: """Test ``PartRange`` class.""" low: Part = Part(100, 100, 100, 100) high: Part = Part(150, 200, 150, 150) part_range: PartRange = PartRange(low, high) low_split, high_split = part_range.split(Component.M, 300) assert low_split == part_range assert high_split is None low_split, high_split = part_range.split(Component.M, 25) assert low_split is None assert high_split == part_range assert str(part_range) == "100<=x<=149, 100<=m<=199, 100<=a<=149, 100<=s<=149"
[docs] def test_part_range_dest() -> None: """Test ``PartRangeDest`` class.""" part_range: PartRange = PartRange(*get_part_range()) part_range_dest = PartRangeDest(part_range, "test") assert ( str(part_range_dest) == "test:100<=x<=149, 100<=m<=199, 100<=a<=149, 100<=s<=149" )
[docs] def test_rule() -> None: """Test ``Rule`` class.""" rule = Rule("test", Condition(Component.M, Comparator.LessThan, 50)) low: Part = Part(100, 100, 100, 100) high: Part = Part(150, 200, 150, 150) part_range = PartRange(low, high) dest, rest = rule.process_part_range(part_range) assert dest is None assert rest == part_range
[docs] def test_workflow() -> None: """Test ``Workflow`` class.""" rule1: Rule = Rule("test", Condition(Component.M, Comparator.LessThan, 50)) rule2: Rule = Rule("rest") workflow: Workflow = Workflow("workflow1", [rule1, rule2]) low: Part = Part(100, 100, 100, 100) high: Part = Part(150, 200, 150, 150) part_range = PartRange(low, high) results = workflow.process_part_range(part_range) assert results[0].destination == "rest"