Stats implements GazeMotionListener { static double[][] instantiateHeatMapData(final Scene gameContextScene, final double heatMapPixelSize) { final int heatMapWidth = (int) (gameContextScene.getHeight() / heatMapPixelSize); final int heatMapHeight = (int) (gameContextScene.getWidth() / heatMapPixelSize); log.info("heatMapWidth = {}, heatMapHeight = {}", heatMapWidth, heatMapHeight); return new double[heatMapWidth][heatMapHeight]; } Stats(final Scene gameContextScene);  Stats(final Scene gameContextScene, final String gameName); ArrayList<TargetAOI> getTargetAOIList(); void setTargetAOIList(final ArrayList<TargetAOI> targetAOIList); void notifyNewRoundReady(); void notifyNextRound(); void startVideoRecording(); void endVideoRecording(); void start(); List<CoordinatesTracker> getMovementHistoryWithTime(); void reset(); void stop(); @Override void gazeMoved(final javafx.geometry.Point2D position); Graphics initGazeMetricsImage(BufferedImage bImage, BufferedImage screenshotImage); SavedStatsInfo saveStats(); long computeRoundsDurationAverageDuration(); long getStartTime(); long computeRoundsDurationMedianDuration(); long getRoundsTotalAdditiveDuration(); long computeTotalElapsedDuration(); double computeRoundsDurationVariance(); double computeRoundsDurationStandardDeviation(); void incrementNumberOfGoalsToReach(); void incrementNumberOfGoalsToReach(int i); void incrementNumberOfGoalsReached(); void addRoundDuration(); int getShotRatio(); List<Long> getSortedDurationsBetweenGoals(); List<Long> getOriginalDurationsBetweenGoals(); String getDirectoryOfVideo(); void takeScreenShot(); final Scene gameContextScene; @Getter
    public int nbGoalsReached; }
@Test void shouldInstantiateHeatMapData() { when(mockScene.getHeight()).thenReturn(30.0); when(mockScene.getWidth()).thenReturn(60.0); double[][] result = Stats.instantiateHeatMapData(mockScene, 3.0); assertEquals(10, result.length); assertEquals(20, result[0].length); }