run_tests.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/usr/bin/env python3
  2. import random
  3. import gym
  4. import numpy as np
  5. from gym_minigrid.register import envSet
  6. from gym_minigrid.minigrid import Grid
  7. # Test specifically importing a specific environment
  8. from gym_minigrid.envs import DoorKeyEnv
  9. # Test importing wrappers
  10. from gym_minigrid.wrappers import *
  11. print('%d environments registered' % len(envSet))
  12. for envName in sorted(envSet):
  13. print('testing "%s"' % envName)
  14. # Load the gym environment
  15. env = gym.make(envName)
  16. env.reset()
  17. env.render('rgb_array')
  18. # Verify that the same seed always produces the same environment
  19. for i in range(0, 5):
  20. seed = 1337 + i
  21. env.seed(seed)
  22. grid1 = env.grid.encode()
  23. env.seed(seed)
  24. grid2 = env.grid.encode()
  25. assert np.array_equal(grid2, grid1)
  26. env.reset()
  27. # Run for a few episodes
  28. for i in range(5 * env.maxSteps):
  29. # Pick a random action
  30. action = random.randint(0, env.action_space.n - 1)
  31. obs, reward, done, info = env.step(action)
  32. # Test observation encode/decode roundtrip
  33. img = obs if type(obs) is np.ndarray else obs['image']
  34. grid = Grid.decode(img)
  35. img2 = grid.encode()
  36. assert np.array_equal(img2, img)
  37. # Check that the reward is within the specified range
  38. assert reward >= env.reward_range[0], reward
  39. assert reward <= env.reward_range[1], reward
  40. if done:
  41. env.reset()
  42. # Check that the agent doesn't overlap with an object
  43. assert env.grid.get(*env.agentPos) is None
  44. env.render('rgb_array')
  45. env.close()