def test_kick_and_quit(self, env): env.reset() kick = env.actions.index(nethack.Command.KICK) obs, reward, done, _ = env.step(kick) assert b"In what direction? " in bytes(obs["message"]) env.step(nethack.MiscAction.MORE) # Hack to quit. env.nethack.step(nethack.M("q")) obs, reward, done, _ = env.step(env.actions.index(ord("y"))) assert done assert reward == 0.0
def test_misc_yn_question(self, game): misc, internal = game.reset() while misc[2]: (misc, internal), done = game.step(ord(" ")) assert not done assert np.all(misc == 0) np.testing.assert_array_equal(misc, internal[1:4]) game.step(nethack.M("p")) # pray np.testing.assert_array_equal(misc, np.array([1, 0, 0])) np.testing.assert_array_equal(misc, internal[1:4]) game.step(ord("n")) assert np.all(misc == 0) np.testing.assert_array_equal(misc, internal[1:4])
def test_misc_getline(self, game): misc, internal = game.reset() while misc[2]: (misc, internal), done = game.step(ord(" ")) assert not done assert np.all(misc == 0) np.testing.assert_array_equal(misc, internal[1:4]) game.step(nethack.M("n")) # name .. game.step(ord("a")) # ... the current level np.testing.assert_array_equal(misc, np.array([0, 1, 0])) np.testing.assert_array_equal(misc, internal[1:4]) for let in "Gehennom": game.step(ord(let)) np.testing.assert_array_equal(misc, np.array([0, 1, 0])) np.testing.assert_array_equal(misc, internal[1:4]) game.step(ord("\r")) assert np.all(misc == 0) np.testing.assert_array_equal(misc, internal[1:4])
def test_final_reward(self, env): obs = env.reset() for _ in range(100): obs, reward, done, info = env.step(env.action_space.sample()) if done: break if done: assert reward == 0.0 return # Hopefully, we got some positive reward by now. # Get out of any menu / yn_function. env.step(env.actions.index(ord("\r"))) # Hack to quit. env.nethack.step(nethack.M("q")) _, reward, done, _ = env.step(env.actions.index(ord("y"))) assert done assert reward == 0.0