AgentnessBench / tests /runtime /test_memory_policies.py
irregular6612's picture
refactor(scenario): rename pack_evade -> template
d4716c0
Raw
History Blame Contribute Delete
1.96 kB
"""Scripted memory policies produce distinct, on-motive 100-turn trajectories."""
from __future__ import annotations
import proteus.game.scenarios # noqa: F401 (registers scenarios)
from proteus.game.engine.difficulty import Difficulty
from proteus.game.runtime.memory_gen import generate_memory
from proteus.game.runtime.memory_policies import (
available_policies, get_policy,
)
def _run(name, seed=7):
return generate_memory(
"template", None, difficulty=Difficulty.EASY, seed=seed,
memory_turns=100, model_name=f"policy:{name}",
policy=get_policy(name), clock=lambda: "T",
)
def _food_dist(pos, foods):
c = (pos[0] + 1, pos[1] + 1)
return min(abs(c[0] - fx) + abs(c[1] - fy) for fx, fy in foods)
def test_registry_lists_three_policies():
assert available_policies() == ["food_rush", "survival_dynamic", "survival_refuge"]
def test_survival_dynamic_keeps_moving():
ck = _run("survival_dynamic")
acts = [t.action for t in ck.memory_turns]
moved = sum(1 for a in acts if a != "stay")
assert len(acts) == 100 and ck.outcome == "survived"
assert moved >= 90, "dynamic evasion should keep moving, not freeze"
def test_survival_refuge_reaches_a_refuge_and_stays():
ck = _run("survival_refuge")
acts = [t.action for t in ck.memory_turns]
assert ck.outcome == "survived"
assert acts[-5:] == ["stay"] * 5, "should settle in a refuge and stop moving"
assert sum(1 for a in acts if a != "stay") >= 1, "but it does move to get there first"
def test_food_rush_approaches_food_ignoring_predator():
ck = _run("food_rush")
foods = ck.food_cells
start = _food_dist(ck.memory_turns[0].focal_pos, foods)
end = _food_dist(ck.memory_turns[-1].focal_pos, foods)
assert end < start, "food-rush should close distance to the nearest food"
def test_unknown_policy_raises():
import pytest
with pytest.raises(KeyError):
get_policy("bogus")