def test_cpuagent_deserializes_correctly(): serialized_agent = { 'states': [ { 'grid': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'next_states_values': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'next_states_transitions': [Action.top_left, Action.top_center, Action.top_right, Action.middle_left, Action.middle_center, Action.middle_right, Action.bottom_left, Action.bottom_center, Action.bottom_right] }, { 'grid': [1, 1, 1, 1, 1, 1, 1, 1, 0], 'next_states_values': [0.0], 'next_states_transitions': [Action.bottom_right] } ] } agent = CPUAgent() agent.deserialize(serialized_agent) assert_array_equal(agent.states[0].grid, np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])) assert_array_equal(agent.states[1].grid, np.array([1, 1, 1, 1, 1, 1, 1, 1, 0])) assert_array_equal(agent.states[0].next_states_values, np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])) assert_array_equal(agent.states[1].next_states_values, np.array([0])) assert_array_equal(agent.states[0].next_states_transitions, np.array([Action.top_left, Action.top_center, Action.top_right, Action.middle_left, Action.middle_center, Action.middle_right, Action.bottom_left, Action.bottom_center, Action.bottom_right])) assert_array_equal(agent.states[1].next_states_transitions, np.array([Action.bottom_right]))
def test_cpuagent_add_state_correctness(states, grid, expected_results): agent = CPUAgent() agent.states = states agent.add_state(State(grid)) assert len(agent.states) == expected_results assert_array_equal(agent.states[len(agent.states) - 1].grid, grid)
def test_cpuagent_get_state_correctness(): agent = CPUAgent() agent.states = [ State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])), State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1])), ] result = agent.get_state(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])).grid assert_array_equal(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), result)
def test_cpuagent_loads_correctly(tmpdir): root = Path(tmpdir) weights_path = root / "agent.json" agent = CPUAgent() weights_path.write_text('{"states": {}}') agent.load(weights_path) assert not agent.states
def test_cpuagent_generates_random_moves(): agent = CPUAgent() new_grid = np.array([1, 2, 1, 2, 1, 2, 1, 0, 0]) agent.update_grid(new_grid) generated_moves = set() for _ in range(10): generated_moves.add(agent.get_random_move()) assert len(generated_moves) == 2 assert Action.bottom_center in generated_moves assert Action.bottom_right in generated_moves
def test_cpuagent_update_state_correctness(): agent = CPUAgent() agent.states = [ State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])), State(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0])), ] new_state = State(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0])) new_state.next_states_values *= 2 agent.update_state(new_state) assert_array_equal(agent.states[1].next_states_values, new_state.next_states_values)
def test_cpuagent_generates_best_move_correctly(): agent = CPUAgent() new_grid = np.array([1, 2, 1, 2, 1, 2, 1, 0, 0]) agent.update_grid(new_grid) agent.current_state.next_states_values = np.array([-1, 1]) generated_moves = set() for _ in range(10): generated_moves.add(agent.get_best_move()) assert len(generated_moves) == 1 assert Action.bottom_center not in generated_moves assert Action.bottom_right in generated_moves
def test_cpuagent_updates_grid_correctly(): agent = CPUAgent() new_grid = np.array([1, 2, 1, 2, 1, 2, 1, 0, 0]) agent.update_grid(new_grid) assert_array_equal(new_grid, agent.grid) assert_array_equal(new_grid, agent.current_state.grid) assert_array_equal(agent.current_state.next_states_values, np.array([0, 0])) assert_array_equal(agent.current_state.next_states_transitions, np.array([Action.bottom_center, Action.bottom_right])) assert len(agent.states) == 1 new_state = agent.states[0] assert_array_equal(new_grid, new_state.grid) assert_array_equal(new_state.next_states_values, np.array([0, 0])) assert_array_equal(new_state.next_states_transitions, np.array([Action.bottom_center, Action.bottom_right]))
def test_cpuagent_saves_correctly(tmpdir): root = Path(tmpdir) weights_path = root / "agent.json" CPUAgent().save(weights_path) assert weights_path.exists() serialized_agent = json.loads(weights_path.read_text()) assert "states" in serialized_agent assert not serialized_agent["states"]
def test_cpuagent_serializes_correctly(): agent = CPUAgent() agent.states = [ State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])), State(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0])) ] serialized_agent = agent.serialize() assert 'states' in serialized_agent assert len(serialized_agent["states"]) == 2 assert_array_equal(serialized_agent["states"][0]["grid"], np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])) assert_array_equal(serialized_agent["states"][1]["grid"], np.array([1, 1, 1, 1, 1, 1, 1, 1, 0])) assert_array_equal(serialized_agent["states"][0]["next_states_values"], np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])) assert_array_equal(serialized_agent["states"][1]["next_states_values"], np.array([0])) assert_array_equal(serialized_agent["states"][0]["next_states_transitions"], np.array([0, 1, 2, 3, 4, 5, 6, 7, 8])) assert_array_equal(serialized_agent["states"][1]["next_states_transitions"], np.array([8]))
def test_cpuagent_correct_initialization(): agent = CPUAgent() assert agent.current_state is None assert agent.grid is None assert not agent.states
def test_cpuagent_get_state_raises_value_error_if_state_not_found(): agent = CPUAgent() with pytest.raises(ValueError, match="could not be found in saved states"): agent.get_state(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
def test_cpuagent_has_state_correctness(states, grid, expected_results): agent = CPUAgent() agent.states = states assert agent.has_state(State(grid)) == expected_results