Solve day 8
This commit is contained in:
99
tests/network_test.py
Normal file
99
tests/network_test.py
Normal file
@@ -0,0 +1,99 @@
|
||||
from textwrap import dedent
|
||||
|
||||
import pytest
|
||||
from frozendict import frozendict
|
||||
|
||||
from advent_of_code.network import Instruction, Network, solve_part_1, solve_part_2
|
||||
|
||||
mock_network = Network(
|
||||
(
|
||||
Instruction.Left,
|
||||
Instruction.Left,
|
||||
Instruction.Right,
|
||||
),
|
||||
frozendict(
|
||||
{
|
||||
"AAA": ("BBB", "BBB"),
|
||||
"BBB": ("AAA", "ZZZ"),
|
||||
"ZZZ": ("ZZZ", "ZZZ"),
|
||||
}
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def test_network_parse():
|
||||
mock_input = dedent(
|
||||
"""\
|
||||
LLR
|
||||
|
||||
AAA = (BBB, BBB)
|
||||
BBB = (AAA, ZZZ)
|
||||
ZZZ = (ZZZ, ZZZ)
|
||||
"""
|
||||
)
|
||||
assert Network.parse(mock_input) == mock_network
|
||||
|
||||
assert Network.parse("LR") == Network((Instruction.Left, Instruction.Right), {})
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
Network.parse("invalid\nAAA = (BBB, CCC)")
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
Network.parse("LR\n\ninvalid")
|
||||
|
||||
|
||||
def test_network_traverse():
|
||||
assert mock_network.traverse("AAA") == "BBB"
|
||||
assert mock_network.traverse("BBB") == "ZZZ"
|
||||
|
||||
with pytest.raises(Exception):
|
||||
network = Network(
|
||||
(Instruction.Left, Instruction.Left),
|
||||
frozendict({"AAA": ("BBB", "BBB")}),
|
||||
)
|
||||
network.traverse("AAA")
|
||||
|
||||
|
||||
def test_network_distance():
|
||||
assert mock_network.distance("AAA", "ZZZ") == 6
|
||||
|
||||
|
||||
def test_solve_part_1():
|
||||
assert (
|
||||
solve_part_1(
|
||||
dedent(
|
||||
"""\
|
||||
RL
|
||||
|
||||
AAA = (BBB, AAA)
|
||||
BBB = (CCC, BBB)
|
||||
CCC = (DDD, CCC)
|
||||
DDD = (ZZZ, DDD)
|
||||
ZZZ = (ZZZ, ZZZ)
|
||||
"""
|
||||
)
|
||||
)
|
||||
== 8
|
||||
)
|
||||
|
||||
|
||||
def test_solve_part_2():
|
||||
assert (
|
||||
solve_part_2(
|
||||
dedent(
|
||||
"""\
|
||||
LR
|
||||
|
||||
11A = (11B, XXX)
|
||||
11B = (XXX, 11Z)
|
||||
11Z = (11B, XXX)
|
||||
22A = (22B, XXX)
|
||||
22B = (22C, 22C)
|
||||
22C = (22Z, 22Z)
|
||||
22Z = (22B, 22B)
|
||||
XXX = (XXX, XXX)
|
||||
"""
|
||||
)
|
||||
)
|
||||
== 6
|
||||
)
|
Reference in New Issue
Block a user