|
| 1 | +import pytest |
| 2 | + |
| 3 | +from adventofcode.year_2015.day_21_2015 import get_boss, get_shop_inventory, get_damage, Character, Weapon, \ |
| 4 | + Armor, Ring, part_one |
| 5 | + |
| 6 | +test_input = [ |
| 7 | + 'Hit Points: 100', |
| 8 | + 'Damage: 8', |
| 9 | + 'Armor: 2', |
| 10 | +] |
| 11 | + |
| 12 | + |
| 13 | +def test_get_boss(): |
| 14 | + assert get_boss(test_input) == Character(health=100, armor=2, damage=8) |
| 15 | + |
| 16 | + |
| 17 | +@pytest.mark.parametrize(['attacker', 'defender', 'expected'], [ |
| 18 | + (Character(health=100, damage=10, armor=10), Character(health=100, damage=10, armor=10), 1), |
| 19 | + (Character(health=100, damage=100, armor=10), Character(health=100, damage=10, armor=10), 90), |
| 20 | + (Character(health=100, damage=10, armor=10), Character(health=100, damage=10, armor=100), 1), |
| 21 | +]) |
| 22 | +def test_get_damage(attacker, defender, expected): |
| 23 | + assert get_damage(attacker, defender) == expected |
| 24 | + |
| 25 | + |
| 26 | +def test_get_shop_inventory(): |
| 27 | + weapons = [ |
| 28 | + Weapon(name='Dagger', cost=8, damage=4, armor=0), |
| 29 | + Weapon(name='Shortsword', cost=10, damage=5, armor=0), |
| 30 | + Weapon(name='Warhammer', cost=25, damage=6, armor=0), |
| 31 | + Weapon(name='Longsword', cost=40, damage=7, armor=0), |
| 32 | + Weapon(name='Greataxe', cost=74, damage=8, armor=0), |
| 33 | + Weapon(name='Empty', cost=0, damage=0, armor=0) |
| 34 | + ] |
| 35 | + |
| 36 | + armor = [ |
| 37 | + Armor(name='Leather', cost=13, damage=0, armor=1), |
| 38 | + Armor(name='Chainmail', cost=31, damage=0, armor=2), |
| 39 | + Armor(name='Splintmail', cost=53, damage=0, armor=3), |
| 40 | + Armor(name='Bandedmail', cost=75, damage=0, armor=4), |
| 41 | + Armor(name='Platemail', cost=102, damage=0, armor=5), |
| 42 | + Armor(name='Naked', cost=0, damage=0, armor=0) |
| 43 | + ] |
| 44 | + |
| 45 | + rings = [ |
| 46 | + Ring(name='Damage +1', cost=25, damage=1, armor=0), |
| 47 | + Ring(name='Damage +2', cost=50, damage=2, armor=0), |
| 48 | + Ring(name='Damage +3', cost=100, damage=3, armor=0), |
| 49 | + Ring(name='Defense +1', cost=20, damage=0, armor=1), |
| 50 | + Ring(name='Defense +2', cost=40, damage=0, armor=2), |
| 51 | + Ring(name='Defense +3', cost=80, damage=0, armor=3), |
| 52 | + Ring(name='No jewelry', cost=0, damage=0, armor=0) |
| 53 | + ] |
| 54 | + |
| 55 | + assert get_shop_inventory() == (weapons, armor, rings) |
| 56 | + |
| 57 | + |
| 58 | +def test_part_one(): |
| 59 | + assert part_one(test_input) == 91 |
0 commit comments