From 6f19d87e86077ac55da89e3919fa541fc296ce62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20W=C3=B6lfer?= Date: Sun, 21 Apr 2019 02:04:03 +0200 Subject: [PATCH] Fixed check_correct --- shenzhen_solitaire/board.py | 6 +++--- shenzhen_solitaire/board_actions.py | 2 -- shenzhen_solitaire/solver.py | 3 --- test/helper.py | 15 +++++++++++++++ test/test_solver.py | 23 ++++++++++++++--------- 5 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 test/helper.py diff --git a/shenzhen_solitaire/board.py b/shenzhen_solitaire/board.py index 0a87a68..1989150 100644 --- a/shenzhen_solitaire/board.py +++ b/shenzhen_solitaire/board.py @@ -133,7 +133,7 @@ class Board: self.bunker, itertools.chain.from_iterable( stack for stack in self.field if stack), ): if isinstance(card, tuple): - special_cards[card[0]] += 4 # pylint: disable=E1136 + special_cards[card[0]] += 4 elif isinstance(card, SpecialCard): special_cards[card] += 1 elif isinstance(card, NumberCard): @@ -141,8 +141,8 @@ class Board: return False number_cards[card.suit].add(card.number) - for _, numbers in number_cards.items(): - if set(range(1, 10)) != numbers: + for suit, numbers in number_cards.items(): + if set(range(self.goal[suit] + 1, 10)) != numbers: return False for cardtype, count in special_cards.items(): diff --git a/shenzhen_solitaire/board_actions.py b/shenzhen_solitaire/board_actions.py index 4a3bb31..2056fca 100644 --- a/shenzhen_solitaire/board_actions.py +++ b/shenzhen_solitaire/board_actions.py @@ -15,8 +15,6 @@ class Action: pass def apply(self, action_board: board.Board) -> None: - assert self._before_state == 0 - assert self._after_state == 0 if __debug__: self._before_state = action_board.state_identifier self._apply(action_board) diff --git a/shenzhen_solitaire/solver.py b/shenzhen_solitaire/solver.py index 96badf6..e73bc87 100644 --- a/shenzhen_solitaire/solver.py +++ b/shenzhen_solitaire/solver.py @@ -71,9 +71,6 @@ def solve(board: Board) -> Iterator[List[board_actions.Action]]: for prev_action in stack.action_stack[-2:-21:-1]: if isinstance(prev_action, MoveAction): if prev_action.cards == action.cards: - print("Dropping") - print(action) - print(prev_action) drop = True if drop: continue diff --git a/test/helper.py b/test/helper.py new file mode 100644 index 0000000..70f54f7 --- /dev/null +++ b/test/helper.py @@ -0,0 +1,15 @@ +from .context import shenzhen_solitaire +from shenzhen_solitaire import solver + +from .boards import my_board + + +def main() -> None: + A = solver.solve(my_board) + for _, B in zip(range(1), A): + print(*B, sep='\n') + print(len(B)) + + +if __name__ == "__main__": + main() diff --git a/test/test_solver.py b/test/test_solver.py index 70f54f7..1db3a0b 100644 --- a/test/test_solver.py +++ b/test/test_solver.py @@ -1,15 +1,20 @@ +import unittest +import copy + from .context import shenzhen_solitaire from shenzhen_solitaire import solver from .boards import my_board -def main() -> None: - A = solver.solve(my_board) - for _, B in zip(range(1), A): - print(*B, sep='\n') - print(len(B)) - - -if __name__ == "__main__": - main() +class SolverTest(unittest.TestCase): + def test_solver(self) -> None: + board_copy = copy.deepcopy(my_board) + board_id = my_board.state_identifier + A = solver.solve(my_board) + for _, B in zip(range(1), A): + self.assertEqual(board_id, board_copy.state_identifier) + for x in B: + x.apply(board_copy) + self.assertTrue(board_copy.check_correct()) + self.assertTrue(board_copy.solved())