def test_part_one_initial(self):
        """Test initial Spinlock step step by step from example"""

        # 1. Create Spinlock object from text
        mylock = spinlock.Spinlock(text=EXAMPLE_TEXT)

        # 2. Split example buffer text into a list
        part_one_buffers = aoc_17.from_text(PART_ONE_STR)

        # 3. Loop for the configurations in the example
        for configuration in part_one_buffers:

            # 4. Check this configuration
            self.assertEqual(str(mylock), configuration)

            # 5. Advance the spinlock one step
            mylock.advance()

        # 6. Spin until the end
        mylock.spin(spinlock.P1_LAST_NUMBER, verbose=False)

        # 7. Check the number in the next position
        self.assertEqual(mylock.buffer[0], 0)
        self.assertEqual(mylock.buffer[mylock.position],
                         spinlock.P1_LAST_NUMBER)
        self.assertEqual(mylock.buffer[mylock.position + 1], PART_ONE_RESULT)
    def test_text_init(self):
        "Test the Pocket object creation from text"

        # 1. Create Pocket object from text
        myobj = pocket.Pocket(text=aoc_17.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 3)
        self.assertEqual(myobj.cycle, 0)
        self.assertEqual(len(myobj.active), 5)

        # 3. Check methods
        self.assertEqual(myobj.count(), EXAMPLE_COUNT[0])
        self.assertEqual(len([_ for _ in myobj.nearby((0, 0, 0))]), 26)
        self.assertEqual(myobj.count_nearby((0, 0, 0)), 1)
        self.assertEqual(myobj.count_nearby((0, 0, 1)), 1)
        self.assertEqual(myobj.count_nearby((1, 1, 0)), 5)
        self.assertEqual(myobj.count_nearby((1, 1, 1)), 5)

        myobj.one_cycle()
        self.assertEqual(myobj.count(), EXAMPLE_COUNT[1])
        myobj.one_cycle()
        self.assertEqual(myobj.count(), EXAMPLE_COUNT[2])
        myobj.one_cycle()
        self.assertEqual(myobj.count(), EXAMPLE_COUNT[3])
示例#3
0
    def test_text_init(self):
        "Test the Probe object creation from text"

        # 1. Create Probe object from text
        myobj = probe.Probe(text=aoc_17.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.start, (0, 0))
        self.assertEqual(myobj.target, [20, 30, -10, -5])
        self.assertEqual(myobj.position, (0, 0))
        self.assertEqual(myobj.velocity, None)
        self.assertEqual(myobj.height, 0)

        # 3. Check methods
        myobj.reload((7, 2))
        self.assertEqual(myobj.position, (0, 0))
        self.assertEqual(myobj.velocity, (7, 2))
        self.assertEqual(myobj.is_in_target(), False)
        self.assertEqual(myobj.is_possible(), True)
        myobj.step()
        self.assertEqual(myobj.position, (7, 2))
        self.assertEqual(myobj.velocity, (6, 1))
        self.assertEqual(myobj.is_in_target(), False)
        self.assertEqual(myobj.is_possible(), True)
        myobj.step()
        self.assertEqual(myobj.position, (13, 3))
        self.assertEqual(myobj.velocity, (5, 0))
        self.assertEqual(myobj.is_in_target(), False)
        self.assertEqual(myobj.is_possible(), True)
        myobj.step()
        myobj.step()
        myobj.step()
        myobj.step()
        self.assertEqual(myobj.position, (27, -3))
        self.assertEqual(myobj.velocity, (1, -4))
        self.assertEqual(myobj.is_in_target(), False)
        self.assertEqual(myobj.is_possible(), True)
        myobj.step()
        self.assertEqual(myobj.position, (28, -7))
        self.assertEqual(myobj.velocity, (0, -5))
        self.assertEqual(myobj.is_in_target(), True)
        self.assertEqual(myobj.is_possible(), True)
        myobj.step()
        self.assertEqual(myobj.position, (28, -12))
        self.assertEqual(myobj.velocity, (0, -6))
        self.assertEqual(myobj.is_in_target(), False)
        self.assertEqual(myobj.is_possible(), False)
        self.assertEqual(myobj.height, 3)

        self.assertEqual(myobj.fire((7, 2)), 3)
        self.assertEqual(myobj.fire((6, 3)), 6)
        self.assertEqual(myobj.fire((9, 0)), 0)
        self.assertEqual(myobj.fire((17, -4)), -1)
        self.assertEqual(myobj.fire((6, 9)), 45)

        self.assertEqual(myobj.highest(), 45)
        self.assertEqual(myobj.count(), 112)
示例#4
0
    def test_part_two(self):
        "Test part two example of Doors object"

        # 1. Create Doors object from text
        myobj = doors.Doors(part2=True, text=aoc_17.from_text(PART_TWO_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
示例#5
0
    def test_part_one(self):
        "Test part one example of Doors object"

        # 1. Create Doors object from text
        myobj = doors.Doors(text=aoc_17.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 Eggnog object"

        # 1. Create Eggnog object from text
        myobj = eggnog.Eggnog(part2=True, text=aoc_17.from_text(PART_TWO_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=False, amount=EXAMPLE_EGGNOG),
                         PART_TWO_RESULT)
    def test_part_one(self):
        "Test part one example of Eggnog object"

        # 1. Create Eggnog object from text
        myobj = eggnog.Eggnog(text=aoc_17.from_text(PART_ONE_TEXT))

        # 2. Check the part one result
        self.assertEqual(myobj.part_one(verbose=False, amount=EXAMPLE_EGGNOG),
                         PART_ONE_RESULT)
示例#8
0
    def test_part_two(self):
        "Test part two example of Scans object"

        # 1. Create Scans object from text
        myobj = scans.Scans(part2=True, text=aoc_17.from_text(PART_TWO_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
        self.assertEqual(str(myobj), EXAMPLE_TEXT_WATER)
示例#9
0
    def test_part_one(self):
        "Test part one example of Scans object"

        # 1. Create Scans object from text
        myobj = scans.Scans(text=aoc_17.from_text(PART_ONE_TEXT))

        # 2. Check the part one result
        self.assertEqual(myobj.part_one(verbose=False, limit=99),
                         PART_ONE_RESULT)
        self.assertEqual(str(myobj), EXAMPLE_TEXT_WATER)
示例#10
0
    def test_text_init(self):
        "Test the Eggnog object creation from text"

        # 1. Create Eggnog object from text
        myobj = eggnog.Eggnog(text=aoc_17.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.containers), 5)

        # 3. Check methods
        self.assertEqual(myobj.num_combos(amount=EXAMPLE_EGGNOG), 4)
示例#11
0
    def test_text_init(self):
        "Test the Doors object creation from text"

        # 1. Create Doors object from text
        myobj = doors.Doors(text=aoc_17.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.seed, "ihgpwlah")

        # 3. Check methods
        self.assertEqual(myobj.shortest(), "DDRRRD")
        self.assertEqual(myobj.longest(), 370)
示例#12
0
    def test_text_init(self):
        "Test the Scans object creation from text"

        # 1. Create Scans object from text
        myobj = scans.Scans(text=aoc_17.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.clay), 34)
        self.assertEqual(1506 in myobj.clay, True)
        self.assertEqual(1507 in myobj.clay, False)
        self.assertEqual(4499 in myobj.clay, False)
        self.assertEqual(4500 in myobj.clay, False)
        self.assertEqual(7497 in myobj.clay, True)
        self.assertEqual(7501 in myobj.clay, True)
        self.assertEqual(7502 in myobj.clay, False)
        self.assertEqual(len(myobj.water), 1)
        self.assertEqual(500 in myobj.water, True)
        self.assertEqual(len(myobj.filled), 0)
        dimensions = myobj.clay_range()
        self.assertEqual(dimensions, [495, 506, 1, 13])
        self.assertEqual(str(myobj), EXAMPLE_TEXT_STR)

        # 3. Drip, drip, drip, little April shower
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 7)
        self.assertEqual(len(myobj.filled), 0)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 6)
        self.assertEqual(len(myobj.filled), 5)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 5)
        self.assertEqual(len(myobj.filled), 10)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 4)
        self.assertEqual(len(myobj.filled), 12)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 3)
        self.assertEqual(len(myobj.filled), 14)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 6)
        self.assertEqual(len(myobj.filled), 14)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 16)
        self.assertEqual(len(myobj.filled), 14)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 15)
        self.assertEqual(len(myobj.filled), 19)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 14)
        self.assertEqual(len(myobj.filled), 24)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 13)
        self.assertEqual(len(myobj.filled), 29)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 21)
        self.assertEqual(len(myobj.filled), 29)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 29)
        self.assertEqual(len(myobj.filled), 29)
        myobj.drip(14000)
        self.assertEqual(len(myobj.water), 29)
        self.assertEqual(len(myobj.filled), 29)
        self.assertEqual(str(myobj), EXAMPLE_TEXT_WATER)