Spaces:
Sleeping
Sleeping
| import numpy as np | |
| from traffic_rl.env.traffic_env import TrafficEnv | |
| def make_env(**overrides): | |
| config = { | |
| "max_steps": 20, | |
| "arrival_mode": "deterministic", | |
| "arrival_sequence": [ | |
| [2, 1, 0, 0], | |
| [1, 0, 2, 0], | |
| [0, 1, 1, 0], | |
| [1, 1, 0, 2], | |
| ], | |
| "service_rate": 2, | |
| "seed": 123, | |
| } | |
| config.update(overrides) | |
| return TrafficEnv(config=config) | |
| def test_reset_returns_valid_state(): | |
| env = make_env() | |
| state = env.reset() | |
| assert isinstance(state, np.ndarray) | |
| assert state.shape == (10,) | |
| assert np.all(state[:8] >= 0) | |
| assert state[8] in (0, 1) | |
| def test_step_updates_queues_and_non_negative(): | |
| env = make_env(arrival_sequence=[[1, 1, 0, 0]], service_rate=1) | |
| env.reset() | |
| next_state, reward, done, info = env.step(1) | |
| assert next_state.shape == (10,) | |
| assert np.all(next_state[:8] >= 0) | |
| assert isinstance(reward, float) | |
| assert isinstance(done, bool) | |
| assert "throughput" in info | |
| def test_environment_deterministic_transitions(): | |
| env1 = make_env() | |
| env2 = make_env() | |
| s1 = env1.reset() | |
| s2 = env2.reset() | |
| assert np.allclose(s1, s2) | |
| actions = [1, 0, 2, 0, 1] | |
| for a in actions: | |
| ns1, r1, d1, i1 = env1.step(a) | |
| ns2, r2, d2, i2 = env2.step(a) | |
| assert np.allclose(ns1, ns2) | |
| assert r1 == r2 | |
| assert d1 == d2 | |
| assert i1["throughput"] == i2["throughput"] | |
| def test_no_negative_values_over_rollout(): | |
| env = make_env() | |
| env.reset() | |
| for _ in range(10): | |
| state, _, done, _ = env.step(0) | |
| assert np.all(state[:8] >= 0) | |
| if done: | |
| break | |