Пример #1
0
    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)
Пример #2
0
    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())
Пример #3
0
    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())
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
    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)
Пример #11
0
    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())
Пример #12
0
    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)
Пример #13
0
    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])
Пример #14
0
    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])
Пример #15
0
    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)
Пример #16
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)
Пример #17
0
    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])
Пример #18
0
    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)
Пример #19
0
    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)