Exemple #1
0
    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
Exemple #2
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])
Exemple #3
0
    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])
Exemple #4
0
    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