ethicsguard / tests /test_env.py
GodreignElgin
Clamp final task scores to open interval
bbcb74d
import asyncio
from ethicsguard.env import EthicsGuardEnv
from ethicsguard.models import EthicsGuardAction
def test_env_reset_returns_queue() -> None:
result = asyncio.run(EthicsGuardEnv(difficulty="easy", seed=1000).reset())
assert result.done is False
assert len(result.observation.remaining_queue) > 0
def test_skip_removes_item_and_keeps_it_unresolved() -> None:
env = EthicsGuardEnv(difficulty="easy", seed=1000)
initial = asyncio.run(env.reset())
item_id = initial.observation.remaining_queue[0].id
after = asyncio.run(env.step(EthicsGuardAction(item_id=item_id, action_type="skip")))
assert all(item.id != item_id for item in after.observation.remaining_queue)
state = asyncio.run(env.state())
assert item_id in state.unresolved_item_ids
def test_unknown_item_returns_error_without_ending_episode() -> None:
env = EthicsGuardEnv(difficulty="easy", seed=1000)
asyncio.run(env.reset())
result = asyncio.run(env.step(EthicsGuardAction(item_id="missing", action_type="approve")))
assert result.done is False
assert result.last_action_error is not None
def test_terminal_score_is_in_open_interval() -> None:
env = EthicsGuardEnv(difficulty="easy", seed=1000)
result = asyncio.run(env.reset())
while not result.done:
item_id = result.observation.remaining_queue[0].id
result = asyncio.run(env.step(EthicsGuardAction(item_id=item_id, action_type="approve")))
assert result.score is not None
assert 0.0 < result.score < 1.0