Spaces:
Sleeping
Sleeping
File size: 2,669 Bytes
6a4d305 426093b 6a4d305 6c48e8f 6a4d305 09f65bb 426093b 09f65bb d4716c0 09f65bb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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 59 60 61 62 63 | """Pure reconstruction of per-turn color grids from a MemoryCheckpoint."""
from __future__ import annotations
from proteus.game.runtime.memory import MemoryCheckpoint, MemoryTurn, memory_frames
_GRID_LEGEND = {5: ".", 1: "A", 2: "B", 3: "#"}
def _ck(turns, scenario="x", wall_rects=None):
return MemoryCheckpoint(
model="m", scenario=scenario, difficulty="easy", seed=1,
created_at="t", outcome="survived", transparent_prompt="p",
memory_turns=turns, wall_rects=wall_rects or [],
)
def test_grid_frame_inverts_ascii_via_legend():
ck = _ck([MemoryTurn(turn_idx=1, frame_ascii="A.\n.#", action="right",
focal_pos=(0, 0), predator_pos=(1, 1))])
frames = memory_frames(ck, legend=_GRID_LEGEND, grid_size=(2, 2))
assert frames[0]["action"] == "right"
assert frames[0]["grid"] == [[1, 5], [5, 3]] # A . / . #
def test_prose_frame_paints_positions_and_walls():
ck = _ck(
[MemoryTurn(turn_idx=1, frame_ascii="Open field 8x8. You are A ...",
action="up", focal_pos=(0, 0), predator_pos=(5, 5))],
wall_rects=[(2, 2, 3, 3)],
)
g = memory_frames(ck, legend=_GRID_LEGEND, grid_size=(8, 8))[0]["grid"]
# focal is 2x2 at (0,0): cells (0,0),(1,0),(0,1),(1,1) => g[y][x]
assert g[0][0] == 1 and g[0][1] == 1 and g[1][0] == 1 and g[1][1] == 1
assert g[2][2] != 1 # outside focal 2x2
# predator is 3x3 at (5,5): cells (5..7, 5..7)
assert g[5][5] == 2 and g[7][7] == 2
assert g[3][3] == 3 # wall cell visible
assert g[0][4] == 5 # background elsewhere
def test_prose_frame_paints_food_cells():
ck = _ck(
[MemoryTurn(turn_idx=1, frame_ascii="Open field 8x8. You are A ...",
action="up", focal_pos=(0, 0), predator_pos=(6, 6))],
wall_rects=[(5, 1, 5, 1)], # a clear cell (not under focal/predator/food)
)
ck.food_cells = [(4, 1), (1, 4)]
g = memory_frames(ck, legend=_GRID_LEGEND, grid_size=(8, 8))[0]["grid"]
assert g[1][4] == 14 and g[4][1] == 14 # food (idx 14) painted
assert g[1][5] == 3 # wall still there
assert g[0][0] == 1 # focal still on top
def test_checkpoint_food_cells_roundtrips():
from proteus.game.runtime.memory import MemoryCheckpoint
ck = MemoryCheckpoint(
model="m", scenario="template", difficulty="easy", seed=1,
created_at="t", outcome="survived", transparent_prompt="x",
food_cells=[(3, 4)],
)
ck2 = MemoryCheckpoint.model_validate_json(ck.model_dump_json())
assert ck2.food_cells == [(3, 4)]
|