def test_text_init(self): "Test the Reindeer object creation from text" # 1. Create Reindeer object from text myobj = reindeer.Reindeer(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 6) self.assertEqual(len(myobj.armies), 2) self.assertEqual(myobj.armies[0].name, 'Immune System') self.assertEqual(myobj.armies[1].name, 'Infection') self.assertEqual(len(myobj.armies[0].groups), 2) self.assertEqual(len(myobj.armies[1].groups), 2) self.assertEqual(myobj.armies[0].groups[0].number, 17) self.assertEqual(myobj.armies[0].groups[1].number, 989) self.assertEqual(myobj.armies[1].groups[0].number, 801) self.assertEqual(myobj.armies[1].groups[1].number, 4485) # 3. Check str() self.assertEqual(str(myobj), EXAMPLE_STR.strip()) # 4. Fight one round myobj.round() self.assertEqual(str(myobj), AFTER_ONE_ROUND.strip()) # 5. And then a couple more result = myobj.fight() self.assertEqual(result, PART_ONE_RESULT) # 6. Give the raindeer a boast myobj.boast(1570) result = myobj.fight() self.assertEqual(result, PART_TWO_RESULT)
def test_text_init(self): "Test the Tiles object creation from text" # 1. Create Tiles object from text myobj = tiles.Tiles(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 20) self.assertEqual(len(myobj.tiles), 15) # 3. Test methods self.assertEqual(myobj.count_black(), 10) myobj.one_day() self.assertEqual(myobj.count_black(), 15) myobj.one_day() self.assertEqual(myobj.count_black(), 12) myobj.one_day() self.assertEqual(myobj.count_black(), 25) myobj.one_day() self.assertEqual(myobj.count_black(), 14) myobj.one_day() self.assertEqual(myobj.count_black(), 23) myobj.one_day() self.assertEqual(myobj.count_black(), 28) myobj.one_day() self.assertEqual(myobj.count_black(), 41) myobj.one_day() self.assertEqual(myobj.count_black(), 37) myobj.one_day() self.assertEqual(myobj.count_black(), 49) myobj.one_day() self.assertEqual(myobj.count_black(), 37)
def test_text_three(self): "Test the Alu object creation from text - example three" # 1. Create Alu object from text myobj = alu.Alu(text=aoc_24.from_text(EXAMPLE_THREE), inp='6') # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 11) self.assertEqual(len(myobj.regs), 4) self.assertEqual(len(myobj.inst), 11) self.assertEqual(myobj.step, 0) self.assertEqual(len(myobj.inp), 1) # 3. Check methods self.assertEqual(myobj.regs['w'], 0) self.assertEqual(myobj.regs['x'], 0) self.assertEqual(myobj.regs['y'], 0) self.assertEqual(myobj.regs['z'], 0) self.assertEqual(myobj.run(), 0) self.assertEqual(myobj.regs['w'], 0) self.assertEqual(myobj.regs['x'], 1) self.assertEqual(myobj.regs['y'], 1) self.assertEqual(myobj.regs['z'], 0) self.assertEqual(len(myobj.inp), 0) self.assertEqual(myobj.one_step(), False)
def test_text_init(self): "Test the Monad object creation from text" # 1. Create Monad object from text myobj = monad.Monad(text=aoc_24.from_text(EXAMPLE_TEXT), inp=EXAMPLE_DIGITS) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 252) self.assertEqual(len(myobj.alu.inst), 252) self.assertEqual(len(myobj.constants), 3) self.assertEqual(len(myobj.constants[0]), 14) self.assertEqual(myobj.constants[0][0], 1) self.assertEqual(myobj.constants[1][0], 14) self.assertEqual(myobj.constants[2][0], 12) self.assertEqual(myobj.constants[0][7], 26) self.assertEqual(myobj.constants[1][7], -13) self.assertEqual(myobj.constants[2][7], 5) self.assertEqual(myobj.constants[0][13], 26) self.assertEqual(myobj.constants[1][13], -4) self.assertEqual(myobj.constants[2][13], 11) self.assertEqual(len(myobj.alu.inp), 14) self.assertEqual(myobj.alu.inp[0], 1) self.assertEqual(myobj.alu.inp[13], 9) # 3. Check methods result = myobj.alu.run() self.assertEqual(myobj.run(EXAMPLE_DIGITS), result) self.assertEqual(myobj.unrun(digits=monad.DIGITS), PART_ONE_RESULT) self.assertEqual(myobj.unrun(digits=monad.STIGID), PART_TWO_RESULT)
def test_part_one(self): "Test part one example of Robot object" # 1. Create Robot object from text myobj = robot.Robot(text=aoc_24.from_text(PART_ONE_TEXT)) # 2. Check the part one result self.assertEqual(myobj.part_one(verbose=False), PART_ONE_RESULT)
def test_part_two(self): "Test part two example of Robot object" # 1. Create Robot object from text myobj = robot.Robot(part2=True, text=aoc_24.from_text(PART_TWO_TEXT)) # 2. Check the part two result self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
def test_text_init(self): "Test the Robot object creation from text" # 1. Create Robot object from text myobj = robot.Robot(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 5) self.assertEqual(len(myobj.ducts.text), 5)
def test_text_init(self): "Test the Ducts object creation from text" # 1. Create Ducts object from text myobj = ducts.Ducts(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 5) self.assertEqual(len(myobj.num_to_loc), 5) self.assertEqual(len(myobj.loc_to_num), 5) self.assertEqual(myobj.num_to_loc[0], (1, 1)) self.assertEqual(myobj.num_to_loc[4], (1, 3)) self.assertEqual(myobj.loc_to_num[(1, 1)], 0) self.assertEqual(myobj.loc_to_num[(1, 3)], 4) # 3. Check methods self.assertEqual(myobj.where_is(0), (1, 1)) self.assertEqual(myobj.where_is(4), (1, 3)) self.assertEqual(myobj.where_is(9), None) self.assertEqual(myobj.what_is_at((1, 1)), 0) self.assertEqual(myobj.what_is_at((1, 3)), 4) self.assertEqual(myobj.what_is_at((7, 9)), None) self.assertEqual(myobj.is_wall(None), True) self.assertEqual(myobj.is_wall((-1, -1)), True) self.assertEqual(myobj.is_wall((0, 0)), True) self.assertEqual(myobj.is_wall((1, 1)), False) self.assertEqual(myobj.one_step((1, 1)), [(2, 1), (1, 2)]) self.assertEqual(myobj.one_step((1, 3)), [(2, 3), (1, 2)]) self.assertEqual(myobj.steps_to_others(0), {1: 2, 4: 2}) self.assertEqual(myobj.steps_to_others(1), {0: 2, 2: 6}) self.assertEqual(myobj.steps_to_others(2), {3: 2, 1: 6}) self.assertEqual(myobj.steps_to_others(3), {2: 2, 4: 8}) self.assertEqual(myobj.steps_to_others(4), {0: 2, 3: 8}) self.assertEqual(myobj.steps_to_others(0, full=True), { 1: 2, 2: 8, 3: 10, 4: 2 }) self.assertEqual(myobj.steps_to_others(1, full=True), { 0: 2, 2: 6, 3: 8, 4: 4 }) all_steps = myobj.all_steps() self.assertEqual(len(all_steps), len(myobj.num_to_loc)) self.assertEqual(all_steps[0], {1: 2, 2: 8, 3: 10, 4: 2}) self.assertEqual(all_steps[1], {0: 2, 2: 6, 3: 8, 4: 4})
def test_strength(self): "Test the Moat.strength function" # 1. Create Moat object from text myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Loop for all of the example bridges for bnum, bridge in enumerate(BRIDGES): # 3. Compute and compare strengths self.assertEqual(myobj.strength(bridge), STRENGTHS[bnum])
def test_last_port(self): "Test the Moat last_port function" # 1. Create Moat object from text myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Loop for all of the example bridges for bnum, bridge in enumerate(BRIDGES): # 3. Verify that hey have the expected last port self.assertEqual(myobj.last_port(bridge), LAST[bnum])
def test_text_init(self): "Test the Immune/Infection group object creation from text" # 1. Create Immune/Infection army object from text myobj = reindeer.Army(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.name, 'Immune System') self.assertEqual(len(myobj.groups), 2) self.assertEqual(myobj.groups[0].number, 17) self.assertEqual(myobj.groups[1].number, 989)
def test_text_init(self): "Test the Moat object creation from text" # 1. Create Moat object from text myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 8) self.assertEqual(len(myobj.components), 8) self.assertEqual(myobj.components[0], (0, 2)) self.assertEqual(len(myobj.ports), 8) self.assertEqual(myobj.ports[0], [0, 5])
def test_check_bridge(self): "Test the Moat.strength function" # 1. Create Moat object from text myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Loop for all of the example bridges for bridge in BRIDGES: # 3. They should all pass the test self.assertEqual(myobj.check_bridge(bridge), True) # 4. Loop for all of the incorrectly assembled bridges for bridge in BAD_BRIDGES: # 5. They should all fail the test self.assertEqual(myobj.check_bridge(bridge), False)
def test_all_components(self): "Test the Moat all_components function" # 1. Create Moat object from text myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Components that can start a bridge self.assertEqual(list(myobj.all_components()), [0, 5]) # 3. Components that can be the used after 0/1 starts a bridge self.assertEqual(list(myobj.all_components(bridge=[5])), [6]) # 4. Components that can be the used after 0/1--10/1 starts a bridge self.assertEqual(list(myobj.all_components(bridge=[5, 6])), [7]) # 5. Components that can be the used after 0/1--10/1--9/10 starts a bridge self.assertEqual(list(myobj.all_components(bridge=[5, 6, 7])), [])
def test_all_bridges(self): "Test the Moat all_components function" # 1. Create Moat object from text myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Loop for all the bridges knt_bridges = 0 for bridge in myobj.all_bridges(): # 3. Validate it self.assertEqual(myobj.check_bridge(bridge), True) self.assertTrue(bridge in BRIDGES) # 4. Keep track of the number of bridges generated knt_bridges += 1 # 5. Verify that we generated them all self.assertEqual(knt_bridges, len(BRIDGES))
def test_text_init(self): "Test the Packages object creation from text" # 1. Create Packages object from text myobj = packages.Packages(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 10) self.assertEqual(len(myobj.weights), 10) self.assertEqual(myobj.compartments, 3) self.assertEqual(myobj.balance, 20) # 3. Test methods self.assertEqual(myobj.min_max_helper(myobj.weights, myobj.balance), 6) myobj.weights.reverse() self.assertEqual(myobj.min_max_helper(myobj.weights, myobj.balance), 2) self.assertEqual( myobj.find_min_max_packages(myobj.weights, myobj.balance), (2, 6)) self.assertEqual( len(myobj.get_weighted(myobj.weights, myobj.balance, 2)), 1) self.assertEqual( len(myobj.get_weighted(myobj.weights, myobj.balance, 3)), 9) self.assertEqual( len(myobj.get_weighted(myobj.weights, myobj.balance, 4)), 11) self.assertEqual( len(myobj.get_weighted(myobj.weights, myobj.balance, 5)), 4) self.assertEqual( myobj.is_remainder_balanced(myobj.weights, [9, 11], myobj.balance, 2), True) self.assertEqual( myobj.is_remainder_balanced(myobj.weights, [1, 8, 11], myobj.balance, 2), True) self.assertEqual( myobj.is_remainder_balanced(myobj.weights, [1, 9, 10], myobj.balance, 2), True) self.assertEqual(myobj.find_best_legroom(), 99)
def test_simple_bridges(self): "Test build a couple of bridges" # 1. Create Moat object from text myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT)) # 2. Build one bridge bridge = myobj.build_a_bridge(first=True) # 3. Validate it self.assertEqual(myobj.check_bridge(bridge), True) self.assertEqual(bridge, [0, 1, 2, 3]) # 4. Build a couple of random bridges for _ in range(50): # 5. Build a bridge bridge = myobj.build_a_bridge() # 6. Validate it self.assertEqual(myobj.check_bridge(bridge), True) self.assertTrue(bridge in BRIDGES)