コード例 #1
0
    def test_text_init(self):
        "Test the Conway object creation from text"

        # 1. Create Conway object from text
        myobj = conway.Conway(text=aoc_18.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.grid), 15)
        self.assertEqual(myobj.size, 6)

        # 3. Check methods
        self.assertEqual(myobj.number_on(), 15)
        self.assertEqual(str(myobj), EXAMPLE_TEXT.strip())
        self.assertEqual(myobj.neighbors((0, 0)), 1)
        self.assertEqual(myobj.neighbors((1, 1)), 2)
        self.assertEqual(myobj.neighbors((1, 4)), 6)
        myobj.grid = myobj.next_gen()
        self.assertEqual(str(myobj), STEP_ONE.strip())
        myobj.grid = myobj.next_gen()
        self.assertEqual(str(myobj), STEP_TWO.strip())
        myobj.grid = myobj.next_gen()
        myobj.grid = myobj.next_gen()
        self.assertEqual(myobj.number_on(), 4)
コード例 #2
0
    def test_part_two(self):
        "Test part two example of Homework object"

        # 1. Create Homework object from text
        myobj = homework.Homework(part2=True, text=aoc_18.from_text(PART_TWO_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
コード例 #3
0
    def test_part_one(self):
        "Test part one example of Homework object"

        # 1. Create Homework object from text
        myobj = homework.Homework(text=aoc_18.from_text(PART_ONE_TEXT))

        # 2. Check the part one result
        self.assertEqual(myobj.part_one(verbose=False), PART_ONE_RESULT)
コード例 #4
0
    def test_part_one(self):
        "Test part one example of Recover object"

        # 1. Create Spinlock object from text
        myobj = recover.Recover(text=aoc_18.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_text_init(self):
        "Test the Homework object creation from text"

        # 1. Create Homework object from text
        myobj = homework.Homework(text=aoc_18.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 4)
コード例 #6
0
    def test_part_two(self):
        "Test part two example of Recover object"

        # 1. Create Spinlock object from text
        myobj = recover.Recover(part2=True,
                                text=aoc_18.from_text(PART_TWO_TEXT))

        # 2. Check the part two
        self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
        self.assertEqual(myobj.registers[0]['c'], 1)
        self.assertEqual(myobj.registers[1]['c'], 0)
コード例 #7
0
    def test_text_init(self):
        "Test the Room object creation from text"

        # 1. Create Room object from text
        myobj = room.Room(text=aoc_18.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 1)
        self.assertNotEqual(myobj.row, None)

        # 3. Check methods
        self.assertEqual(myobj.safe(10), 38)
コード例 #8
0
    def test_text_init(self):
        "Test the Acres object creation from text"

        # 1. Create Acres object from text
        myobj = acres.Acres(text=aoc_18.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.grid), 100)
        self.assertEqual(myobj.max_row, 9)
        self.assertEqual(myobj.minutes, 10)
        self.assertEqual(str(myobj), EXAMPLE_TEXT.strip())

        # 3. Test adjacency
        adj = myobj.adjacent(0)
        self.assertEqual(adj[acres.OPEN], 2)
        self.assertEqual(adj[acres.WOOD], 0)
        self.assertEqual(adj[acres.YARD], 1)
        adj = myobj.adjacent(1001)
        self.assertEqual(adj[acres.OPEN], 6)
        self.assertEqual(adj[acres.WOOD], 1)
        self.assertEqual(adj[acres.YARD], 1)
        adj = myobj.adjacent(2002)
        self.assertEqual(adj[acres.OPEN], 5)
        self.assertEqual(adj[acres.WOOD], 2)
        self.assertEqual(adj[acres.YARD], 1)

        # 4. Test the only universal constant
        myobj.change()
        self.assertEqual(len(myobj.grid), 100)
        self.assertEqual(str(myobj), AFTER_ONE.strip())
        myobj.change()
        self.assertEqual(len(myobj.grid), 100)
        self.assertEqual(str(myobj), AFTER_TWO.strip())
        myobj.change()
        myobj.change()
        myobj.change()
        myobj.change()
        myobj.change()
        myobj.change()
        myobj.change()
        myobj.change()
        self.assertEqual(len(myobj.grid), 100)
        self.assertEqual(str(myobj), AFTER_TEN.strip())

        # 5. Check the counts
        counts = myobj.counts()
        self.assertEqual(counts[acres.WOOD], 37)
        self.assertEqual(counts[acres.YARD], 31)
        self.assertEqual(counts[acres.RVAL], 1147)
コード例 #9
0
    def test_text_init_one(self):
        "Test the Homework object creation from text"

        # 1. Create Homework object from text
        myobj = homework.Homework(text=aoc_18.from_text(EXAMPLE_ONE))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 10)
        self.assertEqual(len(myobj.pairs), 10)
        self.assertEqual(myobj.sumation, [])

        # 3. Check addition
        myobj.sum_them_up()
        self.assertEqual(
            str(myobj.sumation),
            "[[[[8,7],[7,7]],[[8,6],[7,7]]],[[[0,7],[6,6]],[8,7]]]")
        self.assertEqual(myobj.sumation.magnitude(), 3488)
コード例 #10
0
    def test_text_init(self):
        "Test the Recover object creation from text"

        # 1. Create Recover object from text
        myobj = recover.Recover(text=aoc_18.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.instructions), 10)
        self.assertEqual(myobj.instructions[0], ('set', 'a', 1))
        self.assertEqual(myobj.instructions[9], ('jgz', 'a', -2))
        self.assertEqual(myobj.position, [0, 0])
        self.assertEqual(myobj.proc, 0)
        self.assertEqual(myobj.sound, None)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(len(myobj.registers[0]), 26)
        self.assertEqual(myobj.registers[0]['a'], 0)
        self.assertEqual(myobj.registers[0]['p'], 0)
        self.assertEqual(myobj.registers[0]['z'], 0)

        # 3. Do a few steps
        # 3a. The first four instructions set a to 1, add 2 to it, square it, and
        #     then set it to itself modulo 5, resulting in a value of 4.
        self.assertEqual(myobj.step(), True)  # set a 1
        self.assertEqual(myobj.position[0], 1)
        self.assertEqual(myobj.registers[0]['a'], 1)
        self.assertEqual(myobj.sound, None)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # add a 2
        self.assertEqual(myobj.position[0], 2)
        self.assertEqual(myobj.registers[0]['a'], 3)
        self.assertEqual(myobj.sound, None)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # mul a a
        self.assertEqual(myobj.position[0], 3)
        self.assertEqual(myobj.registers[0]['a'], 9)
        self.assertEqual(myobj.sound, None)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # mod a 5
        self.assertEqual(myobj.position[0], 4)
        self.assertEqual(myobj.registers[0]['a'], 4)
        self.assertEqual(myobj.sound, None)
        self.assertEqual(myobj.recovered, None)
        # 3b. Then, a sound with frequency 4 (the value of a) is played.
        self.assertEqual(myobj.step(), True)  # snd a
        self.assertEqual(myobj.position[0], 5)
        self.assertEqual(myobj.registers[0]['a'], 4)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, None)
        # 3c. After that, a is set to 0, causing the subsequent rcv and jgz
        #     instructions to both be skipped (rcv because a is 0, and jgz because a
        #     is not greater than 0).
        self.assertEqual(myobj.step(), True)  # set a 0
        self.assertEqual(myobj.position[0], 6)
        self.assertEqual(myobj.registers[0]['a'], 0)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # rcv a
        self.assertEqual(myobj.position[0], 7)
        self.assertEqual(myobj.registers[0]['a'], 0)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # jgz a -1
        self.assertEqual(myobj.position[0], 8)
        self.assertEqual(myobj.registers[0]['a'], 0)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, None)
        # 3d. Finally, a is set to 1, causing the next jgz instruction to activate,
        #     jumping back two instructions to another jump, which jumps again to
        #     the rcv, which ultimately triggers the recover operation.
        self.assertEqual(myobj.step(), True)  # set a 1
        self.assertEqual(myobj.position[0], 9)
        self.assertEqual(myobj.registers[0]['a'], 1)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # jgz a -2
        self.assertEqual(myobj.position[0], 7)
        self.assertEqual(myobj.registers[0]['a'], 1)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # jgz a -1
        self.assertEqual(myobj.position[0], 6)
        self.assertEqual(myobj.registers[0]['a'], 1)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, None)
        self.assertEqual(myobj.step(), True)  # rcv a
        self.assertEqual(myobj.position[0], 7)
        self.assertEqual(myobj.registers[0]['a'], 1)
        self.assertEqual(myobj.sound, 4)
        self.assertEqual(myobj.recovered, 4)