### Question:
LoopUnlocked implements Loop { @Override public void start(Screen screen, Frame frame) { Check.notNull(screen); Check.notNull(frame); isRunning = true; while (isRunning) { if (screen.isReady()) { final long lastTime = System.nanoTime(); frame.update(Constant.EXTRP); screen.preUpdate(); frame.render(); screen.update(); frame.computeFrameRate(lastTime, Math.max(lastTime + 1, System.nanoTime())); } else { frame.check(); UtilSequence.pause(Constant.DECADE); } } } LoopUnlocked(); @Override void start(Screen screen, Frame frame); @Override void stop(); @Override void notifyRateChanged(int rate);  }### Answer:
@Test void testLoop() { ScreenMock.setScreenWait(false); final Screen screen = new ScreenMock(new Config(new Resolution(320, 240, 50), 16, true)); final Thread thread = getTask(screen); thread.start(); assertTimeout(1000L, thread::join); assertEquals(maxTick.get(), tick.get()); assertEquals(tick.get(), rendered.get()); assertTrue(computed.get() >= screen.getConfig().getOutput().getRate(), String.valueOf(computed.get())); }