def test_text_init(self): """Test the generators object creation from text""" # 1. Create generators object from text mygens = generator.Generators(text=aoc_15.from_text(EXAMPLE_INPUT), part2=True) # 2. Make sure it has the default values self.assertEqual(mygens.part2, True) self.assertEqual(len(mygens.text), 2) self.assertEqual(mygens.judge, 16) self.assertEqual(mygens.modulo, 2**16) self.assertEqual(mygens.count, 0) self.assertEqual(len(mygens.generators), 2) # 3. Check generator A self.assertEqual(mygens['A'].factor, generator.FACTOR_A) self.assertEqual(mygens['A'].modulo, generator.MODULO) self.assertEqual(mygens['A'].start, START_A) self.assertEqual(mygens['A'].value, START_A) self.assertEqual(mygens['A'].count, 0) self.assertEqual(mygens['A'].name, 'A') self.assertEqual(mygens['A'].part2, True) self.assertEqual(mygens['A'].multiple, generator.MULTIPLE_A) # 4. Check generator B self.assertEqual(mygens['B'].factor, generator.FACTOR_B) self.assertEqual(mygens['B'].modulo, generator.MODULO) self.assertEqual(mygens['B'].start, START_B) self.assertEqual(mygens['B'].value, START_B) self.assertEqual(mygens['B'].count, 0) self.assertEqual(mygens['B'].name, 'B') self.assertEqual(mygens['B'].part2, True) self.assertEqual(mygens['B'].multiple, generator.MULTIPLE_B)
def test_larger_movement_example(self): "Test the Combat object movement example" # 1. Create Combat object from text myobj = combat.Combat(text=aoc_15.from_text(MOVEMENT_EXAMPLE_0)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 9) self.assertEqual(len(myobj.cave), 3) self.assertEqual(len(myobj.cave['#']), 32) self.assertEqual(len(myobj.cave['E']), 1) self.assertEqual(len(myobj.cave['G']), 8) self.assertEqual(myobj.cave.max_loc(), 808) self.assertEqual(str(myobj), MOVEMENT_EXAMPLE_0.strip()) # 3. A couple of rounds of movement myobj.round() self.assertEqual(str(myobj), MOVEMENT_EXAMPLE_1.strip()) myobj.round() self.assertEqual(str(myobj), MOVEMENT_EXAMPLE_2.strip()) myobj.round() self.assertEqual(str(myobj), MOVEMENT_EXAMPLE_3.strip()) myobj.round() self.assertEqual(str(myobj), MOVEMENT_EXAMPLE_3.strip()) myobj.round() self.assertEqual(str(myobj), MOVEMENT_EXAMPLE_3.strip())
def test_movement_two(self): "Test movement example two" # 1. Create a cave from movement example one myobj = combat.Combat(text=aoc_15.from_text(TEST_MOVEMENT_TWO)) self.assertEqual(str(myobj), TEST_MOVEMENT_TWO.strip()) # 2. Check the opponents unit = myobj.cave.get_by_location(TEST_MOVEMENT_TWO_UNIT) opponents = myobj.opponents(unit) self.assertEqual(set(opponents), set(TEST_MOVEMENT_TWO_OPPONENTS)) # 3. Check the empty locations adjacent to the opponents in_range = myobj.move_in_range(unit, opponents) self.assertEqual(in_range, set(TEST_MOVEMENT_TWO_IN_RANGE)) # 4. Check the reachable locations reachable = myobj.move_reachable(unit, in_range) self.assertEqual(set(reachable), set(TEST_MOVEMENT_TWO_REACHABLE)) # 5. Check the nearest reachable locations nearest = myobj.move_nearest(unit, reachable) self.assertEqual(set(nearest), set(TEST_MOVEMENT_TWO_NEAREST)) # 6. Choose one of the nearest reachable locations chosen = myobj.move_choose(nearest) self.assertEqual(chosen, TEST_MOVEMENT_TWO_CHOSEN) # 7. Determine the first step toward the chosen location new_loc = myobj.move_location(reachable, chosen) self.assertEqual(new_loc, TEST_MOVEMENT_TWO_NEW_LOC) # 8. Execute the move myobj.move_execute(unit, new_loc) self.assertEqual(str(myobj), TEST_MOVEMENT_TWO_MOVED.strip())
def test_part_one(self): "Test part one example of Cookie object" # 1. Create Cookie object from text myobj = cookie.Cookie(text=aoc_15.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 Cookie object" # 1. Create Cookie object from text myobj = cookie.Cookie(part2=True, text=aoc_15.from_text(PART_TWO_TEXT)) # 2. Check the part two result self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
def test_part_one_judge_40m(self): """Test generators matches from example""" # 1. Create the generator object mygens = generator.Generators(text=aoc_15.from_text(EXAMPLE_INPUT)) # 2. Check the number of matches after six iterations self.assertEqual(mygens.part_one(verbose=False), EXAMPLE_JUDGE_40M)
def test_part_two_judge_5m(self): """Test generators matches from example""" # 1. Create the generator object mygens = generator.Generators(text=aoc_15.from_text(EXAMPLE_INPUT), part2=True) # 2. Check the number of matches after six iterations self.assertEqual(mygens.part_two(verbose=False), PART_TWO_JUDGE_5M)
def test_text_init(self): "Test the Game object creation from text" # 1. Create Game object from text myobj = game.Game(text=aoc_15.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 1) self.assertEqual(myobj.number_spoken(turn=9), 4)
def test_part_one_values(self): """Test generators output from example""" # 1. Create the generator object mygens = generator.Generators(text=aoc_15.from_text(EXAMPLE_INPUT)) # 2. Loop for all of the example output rows for row in aoc_15.from_text(EXAMPLE_VALUES): if row[0] == '-': continue # 3. Get the expected values expected = [int(_) for _ in row.split()] # 4. Advance the generators mygens.next_values() # 5. Check the values self.assertEqual(expected[0], mygens['A'].value) self.assertEqual(expected[1], mygens['B'].value)
def test_text_init(self): "Test the Cookie object creation from text" # 1. Create Cookie object from text myobj = cookie.Cookie(text=aoc_15.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 2) self.assertEqual(len(myobj.ingredients), 2) # 3. Check methods self.assertEqual(myobj.score([44, 56]), 62842880)
def test_text_init(self): "Test the Cave object creation from text" # 1. Create Cave object from text myobj = cave.Cave(text=aoc_15.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(len(myobj.text), 7) self.assertEqual(len(myobj.items), 3) self.assertEqual(len(myobj.items['#']), 27) self.assertEqual(len(myobj.items['E']), 2) self.assertEqual(len(myobj.items['G']), 4) self.assertEqual(myobj.max_loc(), 606) self.assertEqual(str(myobj), EXAMPLE_TEXT.strip())
def test_text_init(self): "Test the Discs object creation from text" # 1. Create Discs object from text myobj = discs.Discs(text=aoc_15.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 2) self.assertEqual(myobj.sizes, [5, 2]) self.assertEqual(myobj.positions, [4, 1]) # 3. Check methods self.assertEqual(myobj.useCRT(), 5)
def test_value_init(self): "Test the Node object creation with location and cave" # 1. Create Node object from values mycave = cave.Cave(text=aoc_15.from_text(EXAMPLE_TEXT)) myobj = path.Node(location=102, cave=mycave) # 2. Make sure it has the expected values self.assertEqual(myobj.location, 102) self.assertEqual(myobj.previous, None) self.assertEqual(myobj.cave, mycave) self.assertEqual(myobj.steps, 0) self.assertEqual(myobj.distance, None) self.assertEqual(myobj.shortest, []) self.assertEqual(myobj.adjacent, [None, 101, 103, 202])
def test_example_part_two_elf_attack(self): "Test determine attack rate for part two" # 1. Loop for all of the examples for index, text in enumerate(PART_TWO_COMBAT): #print("test_rounds %d" % index) # 2. Create the Combat object myobj = combat.Combat(text=aoc_15.from_text(text)) # 3. Determine the minimum attack rate elf_attack = myobj.minimum_elf_attack(verbose=False, limit=40) # 5. Verify that things are the way they should be self.assertEqual(elf_attack, PART_TWO_COMBAT_ATTACK[index])
def test_value_init(self): "Test the Path object creation with values" # 1. Create Node object from values mycave = cave.Cave(text=aoc_15.from_text(EXAMPLE_TEXT)) myobj = path.Path(source=102, destination=104, cave=mycave) # 2. Make sure it has the expected values self.assertEqual(myobj.source, 102) self.assertEqual(myobj.destination, 104) self.assertEqual(myobj.cave, mycave) self.assertNotEqual(myobj.node, None) self.assertEqual(myobj.node.location, myobj.source) self.assertEqual(myobj.node.cave, mycave) self.assertEqual(myobj.distance, 2) self.assertTrue(len(myobj.nodes) > 0) self.assertEqual(len(myobj.queue), 0)
def test_text_init(self): "Test the Risk object creation from text" # 1. Create Risk object from text myobj = risk.Risk(text=aoc_15.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.risks), 100) self.assertEqual(myobj.goal, (9, 9)) self.assertEqual(myobj.risks[(0, 0)], 1) self.assertEqual(myobj.risks[(9, 0)], 2) self.assertEqual(myobj.risks[(0, 9)], 2) self.assertEqual(myobj.risks[(9, 9)], 1) # 3. Check mothods #self.assertEqual(myobj.find_brute_force_risk(), 40) self.assertEqual(myobj.find_network_risk(), 40)
def test_example_combat_results(self): "Test combat results" # 1. Loop for all of the examples for index, text in enumerate(EXAMPLE_COMBAT): #print("test_rounds %d" % index) # 2. Create the Combat object myobj = combat.Combat(text=aoc_15.from_text(text)) # 3. Engage in combat rounds = myobj.fight(verbose=False) # 4. Get the surviving hit points hitpoints = myobj.hitpoints() # 5. Verify that things are the way they should be self.assertEqual(rounds, EXAMPLE_COMBAT_ROUNDS[index]) self.assertEqual(hitpoints, EXAMPLE_COMBAT_HITPOINTS[index]) self.assertEqual(hitpoints * rounds, EXAMPLE_COMBAT_RESULTS[index])
def test_text_init_two(self): "Test the Risk object creation from text" # 1. Create Risk object from text myobj = risk.Risk(text=aoc_15.from_text(EXAMPLE_TEXT), part2=True) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, True) self.assertEqual(len(myobj.text), 10) self.assertEqual(len(myobj.risks), 50 * 50) self.assertEqual(myobj.goal, (49, 49)) self.assertEqual(myobj.risks[(0, 0)], 1) self.assertEqual(myobj.risks[(9, 0)], 2) self.assertEqual(myobj.risks[(0, 9)], 2) self.assertEqual(myobj.risks[(9, 9)], 1) self.assertEqual(myobj.risks[(10, 0)], 2) self.assertEqual(myobj.risks[(49, 0)], 6) self.assertEqual(myobj.risks[(0, 10)], 2) self.assertEqual(myobj.risks[(0, 49)], 6) self.assertEqual(myobj.risks[(49, 49)], 9) # 3. Check mothods self.assertEqual(myobj.find_network_risk(), 315)
def test_text_init(self): "Test the Combat object creation from text" # 1. Create Combat object from text myobj = combat.Combat(text=aoc_15.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 7) self.assertEqual(len(myobj.cave), 3) self.assertEqual(len(myobj.cave['#']), 27) self.assertEqual(len(myobj.cave['E']), 2) self.assertEqual(len(myobj.cave['G']), 4) self.assertEqual(myobj.cave.max_loc(), 606) self.assertEqual(str(myobj), EXAMPLE_TEXT.strip()) self.assertEqual(myobj.map(), EXAMPLE_TEXT_WITH_HITPOINTS.strip()) # 3. A couple of rounds self.assertEqual(myobj.cave['E'].hitpoints(), 2 * 200) self.assertEqual(myobj.cave['G'].hitpoints(), 4 * 200) myobj.round() self.assertEqual(myobj.cave['E'].hitpoints(), 197 + 197) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 197 + 197) self.assertEqual(str(myobj), EXAMPLE_STEPS_01.strip()) myobj.round() self.assertEqual(myobj.cave['E'].hitpoints(), 188 + 194) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 194 + 194) self.assertEqual(str(myobj), EXAMPLE_STEPS_02.strip()) # 4. And then several more for _ in range(3, 24): assert _ > 0 myobj.round() self.assertEqual(str(myobj), EXAMPLE_STEPS_23.strip()) self.assertEqual(myobj.cave['E'].hitpoints(), 131) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 131 + 131) myobj.round() # 24 self.assertEqual(str(myobj), EXAMPLE_STEPS_24.strip()) self.assertEqual(myobj.cave['E'].hitpoints(), 128) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 131 + 128) myobj.round() # 25 self.assertEqual(str(myobj), EXAMPLE_STEPS_25.strip()) self.assertEqual(myobj.cave['E'].hitpoints(), 125) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 131 + 125) myobj.round() # 26 self.assertEqual(str(myobj), EXAMPLE_STEPS_26.strip()) self.assertEqual(myobj.cave['E'].hitpoints(), 122) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 131 + 122) myobj.round() # 27 self.assertEqual(str(myobj), EXAMPLE_STEPS_27.strip()) self.assertEqual(myobj.cave['E'].hitpoints(), 119) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 131 + 119) myobj.round() # 28 self.assertEqual(str(myobj), EXAMPLE_STEPS_28.strip()) self.assertEqual(myobj.cave['E'].hitpoints(), 113) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 131 + 116) # 5. And then several more again for _ in range(29, 48): assert _ > 0 myobj.round() self.assertEqual(str(myobj), EXAMPLE_STEPS_47.strip()) self.assertEqual(myobj.cave['E'].hitpoints(), 0) self.assertEqual(myobj.cave['G'].hitpoints(), 200 + 200 + 131 + 59)