class TestMaxAndSkip: def setup_method(self): self.env = DummyDiscretePixelEnv(random=False) self.env_wrap = MaxAndSkip(DummyDiscretePixelEnv(random=False), skip=4) def teardown_method(self): self.env.close() self.env_wrap.close() def test_max_and_skip_reset(self): np.testing.assert_array_equal(self.env.reset(), self.env_wrap.reset()) def test_max_and_skip_step(self): self.env.reset() self.env_wrap.reset() obs_wrap, reward_wrap, _, _ = self.env_wrap.step(1) reward = 0 for _ in range(4): obs, r, _, _ = self.env.step(1) reward += r np.testing.assert_array_equal(obs, obs_wrap) np.testing.assert_array_equal(reward, reward_wrap) # done=True because both env stepped more than 4 times in total obs_wrap, _, done_wrap, _ = self.env_wrap.step(1) obs, _, done, _ = self.env.step(1) assert done assert done_wrap np.testing.assert_array_equal(obs, obs_wrap)
class TestGrayscale: def setup_method(self): self.env = DummyDiscretePixelEnv(random=False) self.env_g = Grayscale(DummyDiscretePixelEnv(random=False)) def teardown_method(self): self.env.close() self.env_g.close() def test_grayscale_invalid_environment_type(self): with pytest.raises(ValueError): self.env.observation_space = gym.spaces.Discrete(64) Grayscale(self.env) def test_grayscale_invalid_environment_shape(self): with pytest.raises(ValueError): self.env.observation_space = gym.spaces.Box(low=0, high=255, shape=(4, ), dtype=np.uint8) Grayscale(self.env) def test_grayscale_observation_space(self): assert self.env_g.observation_space.shape == ( self.env.observation_space.shape[:-1]) def test_grayscale_reset(self): """ RGB to grayscale conversion using scikit-image. Weights used for conversion: Y = 0.2125 R + 0.7154 G + 0.0721 B Reference: http://scikit-image.org/docs/dev/api/skimage.color.html#skimage.color.rgb2grey """ grayscale_output = np.round( np.dot(self.env.reset()[:, :, :3], [0.2125, 0.7154, 0.0721])).astype(np.uint8) np.testing.assert_array_almost_equal(grayscale_output, self.env_g.reset()) def test_grayscale_step(self): self.env.reset() self.env_g.reset() obs, _, _, _ = self.env.step(1) obs_g, _, _, _ = self.env_g.step(1) grayscale_output = np.round( np.dot(obs[:, :, :3], [0.2125, 0.7154, 0.0721])).astype(np.uint8) np.testing.assert_array_almost_equal(grayscale_output, obs_g)