From 4e9ad30ac8a1bc35ed2c2548793d70579e30732e Mon Sep 17 00:00:00 2001 From: Marianne Chevrot Date: Tue, 5 May 2020 20:49:29 +0200 Subject: Add arrows kana type and improved grid repr --- tests_solver/level_test_ar_x.yaml | 8 ++ tests_solver/level_test_type.yaml | 9 ++ tests_solver/level_test_type_short.yaml | 9 ++ tests_solver/test_solver.py | 141 ++++++++++++++++++++++++++++++-- 4 files changed, 160 insertions(+), 7 deletions(-) create mode 100644 tests_solver/level_test_ar_x.yaml create mode 100644 tests_solver/level_test_type.yaml create mode 100644 tests_solver/level_test_type_short.yaml (limited to 'tests_solver') diff --git a/tests_solver/level_test_ar_x.yaml b/tests_solver/level_test_ar_x.yaml new file mode 100644 index 0000000..633a843 --- /dev/null +++ b/tests_solver/level_test_ar_x.yaml @@ -0,0 +1,8 @@ +# kana quest grid level 1.1 +size: [3, 1] +max_actions: 1 +target_score: 2 +grid: [ + [ar_r, su ], [empt, null], [norm, so ], +] +# The kana 'no' need to be protected else the program convert it into False... diff --git a/tests_solver/level_test_type.yaml b/tests_solver/level_test_type.yaml new file mode 100644 index 0000000..0eec70a --- /dev/null +++ b/tests_solver/level_test_type.yaml @@ -0,0 +1,9 @@ +# kana quest grid level 1.1 +size: [6, 2] +max_actions: 6 +target_score: 8 +grid: [ + [ar_r, sa ], [empt, null], [norm, so ], [rock, se ], [myst, ka ], [ar_d, na ], + [ar_u, su ], [ar_l, nu ], [void, null], [void, null], [void, null], [froz, ke ], +] +# The kana 'no' need to be protected else the program convert it into False... diff --git a/tests_solver/level_test_type_short.yaml b/tests_solver/level_test_type_short.yaml new file mode 100644 index 0000000..7fa3a9a --- /dev/null +++ b/tests_solver/level_test_type_short.yaml @@ -0,0 +1,9 @@ +# kana quest grid level 1.1 +size: [2, 2] +max_actions: 3 +target_score: 3 +grid: [ + [myst, ka ], [ar_d, ne ], + [void, null], [froz, ke ], +] +# The kana 'no' need to be protected else the program convert it into False... diff --git a/tests_solver/test_solver.py b/tests_solver/test_solver.py index e2b45a5..82aca73 100644 --- a/tests_solver/test_solver.py +++ b/tests_solver/test_solver.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import os +import pprint import sys sys.path.append(os.getcwd()) @@ -8,13 +9,29 @@ sys.path.append(os.getcwd()) from solver import * def test_is_swappable(): - assert is_swappable(Kana("norm", "su"), Kana("norm", "su")) - assert is_swappable(Kana("froz", "su"), Kana("norm", "su")) - assert is_swappable(Kana("norm", "su"), Kana("empt")) - assert is_swappable(Kana("empt"), Kana("froz", "su")) - assert not is_swappable(Kana("norm", "su"), Kana("rock", "su")) - assert not is_swappable(Kana("froz", "su"), Kana("froz", "su")) - assert not is_swappable(Kana("empt"), Kana("empt")) + + swappable_grids = [ + [Kana("norm", "su"), Kana("norm", "su")], + [Kana("froz", "su"), Kana("norm", "su")], + [Kana("norm", "su"), Kana("empt" )], + [Kana("empt" ), Kana("froz", "su")], + ] + + for swappable_grid in swappable_grids: + kanagrid = KanaGrid((2, 1), swappable_grid) + print(kanagrid.grid) + assert kanagrid.is_swappable((0, 0), (1, 0)) + + not_swappable_grids = [ + [Kana("norm", "su"), Kana("rock", "su")], + [Kana("froz", "su"), Kana("froz", "su")], + [Kana("empt" ), Kana("empt" )], + ] + + for not_swappable_grid in not_swappable_grids: + kanagrid = KanaGrid((2, 1), not_swappable_grid) + print(kanagrid.grid) + assert not kanagrid.is_swappable((0, 0), (1, 0)) def test_kana_grid(): @@ -47,3 +64,113 @@ def test_kana_grid(): assert kanagrid_new.grid == expected_grid + +def test_kana_arrow_swap(): + kanagrid_orig = KanaGrid((2, 1), [Kana("ar_r", "su"), Kana("empt",)]) + kanagrid_new = kanagrid_orig.action(pos=(0, 0), action_type="right") + expected_grid = KanaGrid((2, 1), [Kana("empt",), Kana("ar_r", "su")]) + + print("kanagrid_orig") + print(kanagrid_orig) + print("kanagrid_new") + print(kanagrid_new) + print("expected_grid") + print(expected_grid) + + assert kanagrid_new.grid == expected_grid.grid + +def test_kana_arrow_swap(): + moves = [ + { + 'move_ok': 'up', + 'other_move_ok': 'down', + 'dest_pos': (1, 0), + 'orig': KanaGrid((3, 3), [ + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("ar_u", "ko"), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + ]), + 'moved': KanaGrid((3, 3), [ + Kana("empt" ), Kana("ar_u", "ko"), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + ], action_count=1), + }, + { + 'move_ok': 'right', + 'other_move_ok': 'left', + 'dest_pos': (2, 1), + 'orig': KanaGrid((3, 3), [ + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("ar_r", "ko"), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + ]), + 'moved': KanaGrid((3, 3), [ + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("ar_r", "ko"), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + ], action_count=1), + }, + { + 'move_ok': 'down', + 'other_move_ok': 'up', + 'dest_pos': (1, 2), + 'orig': KanaGrid((3, 3), [ + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("ar_d", "ko"), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + ]), + 'moved': KanaGrid((3, 3), [ + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("ar_d", "ko"), Kana("empt" ), + ], action_count=1), + }, + { + 'move_ok': 'left', + 'other_move_ok': 'right', + 'dest_pos': (0, 1), + 'orig': KanaGrid((3, 3), [ + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("ar_l", "ko"), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + ]), + 'moved': KanaGrid((3, 3), [ + Kana("empt" ), Kana("empt" ), Kana("empt" ), + Kana("ar_l", "ko"), Kana("empt" ), Kana("empt" ), + Kana("empt" ), Kana("empt" ), Kana("empt" ), + ], action_count=1), + }, + ] + + for move in moves: + print("pprint.pprint(move):") + pprint.pprint(move) + for action in ("up", "right", "down", "left"): + print("\n"*3) + print("action:", action) + + # try to move arrowed kana + kanagrid_test = move['orig'].copy() + kanagrid_test = kanagrid_test.action((1, 1), action) + print("=== move arrowed kana ===") + print(kanagrid_test) + if action == move['move_ok']: + assert move['orig'].is_swappable((1, 1), move['dest_pos']) + assert kanagrid_test == move['moved'] + else: + assert kanagrid_test is None + + for other_pos in ((1, 0), (2, 1), (1, 2), (0, 1)): + # try to move other kana with the arrowed one + kanagrid_test = move['orig'].copy() + kanagrid_test = kanagrid_test.action(other_pos, action) + print("=== move other kana ===") + print(kanagrid_test) + if action == move['other_move_ok'] \ + and other_pos == move['dest_pos']: + assert move['orig'].is_swappable(other_pos, (1, 1)) + assert kanagrid_test == move['moved'] + else: + assert kanagrid_test is None + -- cgit v1.2.3