| import os |
| import tempfile |
| from env import WildfireEnv |
| from env.models import Action, ActionType |
| from env.rendering import render_frame, render_episode_gif |
| from agents.random_agent import RandomAgent |
|
|
|
|
| def test_render_frame_produces_rgb(fresh_env): |
| fresh_env.reset(task_id="easy", seed=42) |
| state = fresh_env.state() |
| frame = render_frame(state, step=0) |
| assert frame.ndim == 3 |
| assert frame.shape[2] == 3 |
| assert frame.dtype.name == "uint8" |
| assert frame.shape[0] > 0 and frame.shape[1] > 0 |
|
|
|
|
| def test_gif_creation(fresh_env): |
| agent = RandomAgent() |
| obs = fresh_env.reset(task_id="easy", seed=42) |
| frames = [render_frame(fresh_env.state(), step=0)] |
| for i in range(1, 21): |
| action = agent.act(obs) |
| result = fresh_env.step(action) |
| obs = result.observation |
| frames.append(render_frame(fresh_env.state(), step=i)) |
| if result.done: |
| break |
|
|
| with tempfile.NamedTemporaryFile(suffix=".gif", delete=False) as f: |
| path = f.name |
| try: |
| render_episode_gif(frames, path) |
| assert os.path.exists(path) |
| assert os.path.getsize(path) > 10_000, "GIF too small — likely empty" |
| finally: |
| os.unlink(path) |
|
|