@@ -0,0 +1,1763 @@
+package uk.co.ticklethepanda.location.history.cartograph;%0A%0Aimport org.apache.logging.log4j.LogManager;%0Aimport org.apache.logging.log4j.Logger;%0Aimport org.junit.jupiter.api.BeforeAll;%0Aimport org.junit.jupiter.api.Tag;%0Aimport org.junit.jupiter.api.Test;%0Aimport uk.co.ticklethepanda.location.history.cartograph.model.PointData;%0Aimport uk.co.ticklethepanda.location.history.cartograph.models.quadtree.Quadtree;%0Aimport uk.co.ticklethepanda.location.history.cartograph.projection.LongLat;%0Aimport uk.co.ticklethepanda.location.history.data.loader.geodetic.GeodeticDataLoadException;%0Aimport uk.co.ticklethepanda.location.history.data.loader.geodetic.GeodeticDataLoader;%0Aimport uk.co.ticklethepanda.location.history.data.loader.geodetic.google.GoogleLocationGeodeticDataLoader;%0A%0Aimport java.time.LocalDate;%0Aimport java.time.LocalDateTime;%0Aimport java.time.temporal.ChronoUnit;%0Aimport java.util.List;%0A%0Apublic class BenchmarkQuadtreeTest %7B%0A%0A    private static final Logger LOG = LogManager.getLogger();%0A%0A    private static Quadtree%3CLongLat, LocalDate%3E quadtree;%0A%0A    @BeforeAll%0A    public static void loadData() throws GeodeticDataLoadException %7B%0A%0A        GeodeticDataLoader%3CLongLat, LocalDate%3E loader = new GoogleLocationGeodeticDataLoader(%22./input/location-history.json%22, -1);%0A        List%3CPointData%3CLongLat, LocalDate%3E%3E loaded = loader.load();%0A%0A        quadtree = new Quadtree%3C%3E(loaded);%0A    %7D%0A%0A    @Test%0A    @Tag(%22slow%22)%0A    public void benchmarkQueryWithoutFilter() %7B%0A        LocalDateTime start = LocalDateTime.now();%0A        for (int i = 0; i %3C 1000; i++) %7B%0A            quadtree.countPoints(quadtree.getBoundingRectangle());%0A        %7D%0A%0A        long elapsed = start.until(LocalDateTime.now(), ChronoUnit.MILLIS);%0A%0A        LOG.info(%22Time taken %7B%7Dms%22, elapsed);%0A    %7D%0A%7D%0A

Add simple benchmark for quadtree