Files
Gymnasium/tests/wrappers/test_order_enforcing.py

44 lines
1.7 KiB
Python
Raw Normal View History

2022-05-13 13:58:19 +01:00
import pytest
import gym
2022-05-13 13:58:19 +01:00
from gym.envs.classic_control import CartPoleEnv
2022-05-18 15:07:54 +01:00
from gym.error import ResetNeeded
from gym.wrappers import OrderEnforcing
2022-05-13 13:58:19 +01:00
from tests.envs.spec_list import spec_list
from tests.wrappers.utils import has_wrapper
@pytest.mark.parametrize("spec", spec_list, ids=[spec.id for spec in spec_list])
def test_gym_make_order_enforcing(spec):
2022-05-18 15:07:54 +01:00
"""Checks that gym.make wrappers the environment with the OrderEnforcing wrapper."""
2022-05-13 13:58:19 +01:00
env = gym.make(spec.id)
assert has_wrapper(env, OrderEnforcing)
def test_order_enforcing():
2022-05-18 15:07:54 +01:00
"""Checks that the order enforcing works as expected, raising an error before reset is called and not after."""
2022-05-13 13:58:19 +01:00
# The reason for not using gym.make is that all environments are by default wrapped in the order enforcing wrapper
env = CartPoleEnv()
assert not has_wrapper(env, OrderEnforcing)
# Assert that the order enforcing works for step and render before reset
order_enforced_env = OrderEnforcing(env)
assert order_enforced_env._has_reset is False
2022-05-18 15:07:54 +01:00
with pytest.raises(ResetNeeded):
2022-05-13 13:58:19 +01:00
order_enforced_env.step(0)
2022-05-18 15:07:54 +01:00
with pytest.raises(ResetNeeded):
order_enforced_env.render(mode="rgb_array")
assert order_enforced_env._has_reset is False
2022-05-13 13:58:19 +01:00
# Assert that the Assertion errors are not raised after reset
order_enforced_env.reset()
assert order_enforced_env._has_reset is True
order_enforced_env.step(0)
2022-05-18 15:07:54 +01:00
order_enforced_env.render(mode="rgb_array")
2022-05-18 15:07:54 +01:00
# Assert that with disable_render_order_enforcing works, the environment has already been reset
2022-05-13 13:58:19 +01:00
env = CartPoleEnv()
2022-05-18 15:07:54 +01:00
env = OrderEnforcing(env, disable_render_order_enforcing=True)
env.render(mode="rgb_array") # no assertion error