Newer
Older

Florian Schröder
committed
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,
)

Florian Schröder
committed
from cooperative_cuisine.utils import (
url_and_port_arguments,
add_list_of_manager_ids_arguments,
disable_websocket_logging_arguments,
add_study_arguments,
add_gui_arguments,
create_layout_with_counters,
setup_logging,
)
from tests.test_start import env_config_no_validation
from tests.test_start import layout_empty_config, item_info

Florian Schröder
committed
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
def test_parser_gen():
parser = ArgumentParser()
url_and_port_arguments(parser)
disable_websocket_logging_arguments(parser)
add_list_of_manager_ids_arguments(parser)
add_study_arguments(parser)
add_gui_arguments(parser)
parser.parse_args(
[
"-s",
"localhost",
"-sp",
"8000",
"-g",
"localhost",
"-gp",
"8080",
"--manager-ids",
"123",
"123123",
"--do-study",
]
)
def test_layout_creation():
assert """###\n#_#\n###\n""" == create_layout_with_counters(3, 3)
assert """###\n#_#\n#_#\n###\n""" == create_layout_with_counters(3, 4)
def test_setup_logging():
setup_logging()
def test_movement_graph(env_config_no_validation, layout_empty_config, item_info):
env = Environment(
env_config_no_validation, layout_empty_config, item_info, as_files=False
)
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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,
)
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, "No path found, but should have."
# now with diagonal movement
graph = create_movement_graph(
json.loads(env.get_json_state(player_id=player_name)), diagonal=True
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,
)
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, "No path found, but should have."