From 51a575befc53d5c4f15d81b899131f9d6ab7f256 Mon Sep 17 00:00:00 2001 From: fheinrich <fheinrich@techfak.uni-bielefeld.de> Date: Mon, 18 Mar 2024 11:10:52 +0100 Subject: [PATCH] Added tests for movement graph --- tests/test_utils.py | 79 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/tests/test_utils.py b/tests/test_utils.py index ad9fb6b6..13d1dcce 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,5 +1,15 @@ +import json from argparse import ArgumentParser +import networkx +import pytest + +from cooperative_cuisine.environment import Environment +from cooperative_cuisine.state_representation import ( + create_movement_graph, + restrict_movement_graph, + astar_heuristic, +) from cooperative_cuisine.utils import ( url_and_port_arguments, add_list_of_manager_ids_arguments, @@ -9,6 +19,7 @@ from cooperative_cuisine.utils import ( create_layout_with_counters, setup_logging, ) +from tests.test_start import env_config, layout_empty_config, item_info def test_parser_gen(): @@ -44,3 +55,71 @@ def test_layout_creation(): def test_setup_logging(): setup_logging() + + +def test_movement_graph(env_config, layout_empty_config, item_info): + env = Environment(env_config, layout_empty_config, item_info, as_files=False) + player_name = "0" + env.add_player(player_name) + + state_string = env.get_json_state(player_id=player_name) + state = json.loads(state_string) + graph_diag = create_movement_graph(state, diagonal=True) + + graph = create_movement_graph( + json.loads(env.get_json_state(player_id=player_name)), diagonal=False + ) + path = networkx.astar_path( + graph, + source=(0, 0), + target=(3, 3), + heuristic=astar_heuristic, + ) + assert len(path) != 0, "No path found, but should have." + + graph_restricted = restrict_movement_graph(graph_diag, [(1, 0), (0, 1), (1, 1)]) + with pytest.raises(networkx.exception.NetworkXNoPath) as e_info: + path = networkx.astar_path( + graph_restricted, + source=(0, 0), + target=(3, 3), + heuristic=astar_heuristic, + ) + with pytest.raises(networkx.exception.NodeNotFound) as e_info: + path = networkx.astar_path( + graph_restricted, + source=(20, 20), + target=(40, 40), + heuristic=astar_heuristic, + ) + + assert len(path) != 0, "No path found, but should have." + + path = networkx.astar_path( + restrict_movement_graph( + graph=graph_diag, + player_positions=[], + ), + source=(0, 0), + target=(5, 5), + heuristic=astar_heuristic, + ) + assert len(path) != 0 + + graph_diag_restricted = restrict_movement_graph( + graph_diag, [(1, 0), (0, 1), (1, 1)] + ) + with pytest.raises(networkx.exception.NetworkXNoPath) as e_info: + _ = networkx.astar_path( + graph_diag_restricted, + source=(0, 0), + target=(3, 3), + heuristic=astar_heuristic, + ) + with pytest.raises(networkx.exception.NodeNotFound) as e_info: + _ = networkx.astar_path( + graph_diag, + source=(20, 20), + target=(40, 40), + heuristic=astar_heuristic, + ) -- GitLab