def test_autocombat(self): parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt") card_player = day22.AutoCombat(*parser.decks) card_player.play_game() # after a game player 1 should have no cards and player 2 should have all expected_cards = [3, 2, 10, 6, 8, 5, 9, 4, 7, 1] for expected, actual in zip(expected_cards, card_player.decks[1]): self.assertEqual(expected, actual) self.assertEqual(card_player.winner, 2)
def test_parser(self): parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt") deck1, deck2 = parser.decks expected_cards = [9, 2, 6, 3, 1] for expected, actual in zip(expected_cards, deck1): self.assertEqual(expected, actual) expected_cards = [5, 8, 4, 7, 10] for expected, actual in zip(expected_cards, deck2): self.assertEqual(expected, actual)
def test_recursive_combat(self): parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt") card_player = day22.RecursiveCombat(*parser.decks, verbose=True) [card_player.turn() for _ in range(8) ] # play the first 8 turns because nothing eventful happens card_player.turn( ) # this turn should trigger recusion and P2 should win expected_p2 = [10, 1, 7, 6, 3, 4] for expected, actual in zip(expected_p2, card_player.decks[1]): self.assertEqual(expected, actual) # now play out the rest of the game card_player.play_game() self.assertEqual(card_player.winner, 2) self.assertEqual(card_player.calculate_scores()[1], 291)
def test_part2(self): parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt") high_score = day22.part2(parser) self.assertEqual(high_score, 291)
def test_infinite_recusion_prevention(self): parser = day22.PuzzleParser(test_input_dir / "day22_test_input2.txt") card_player = day22.RecursiveCombat(*parser.decks, verbose=True) card_player.play_game() self.assertEqual(card_player.winner, 1)