@Override
    public void accept(Point newPoint) {

        //ensure this method is never called by multiple threads at the same time.
        parallelismDetector.run(
            () -> doAccept(newPoint)
        );
    }
@Test
    public void testMakingTracksWithDistantPoints() {
        /*
         * Verify point that are "threadable" but too far apart in physical space are not threaded
         * together.
         */
        String trackId = "hello";
        Instant time1 = Instant.EPOCH;
        Instant time2 = time1.plusSeconds(3);
        Instant time3 = time2.plusSeconds(3);
        Instant time4 = time3.plusSeconds(3);
        Instant time5 = time4.plusSeconds(3);

        Point point1 = (new PointBuilder())
            .trackId(trackId).time(time1)
            .latLong(0.0, 0.0)
            .build();

        Point point2 = (new PointBuilder())
            .trackId(trackId).time(time2)
            .latLong(0.0, 0.0001)
            .build();

        Point point3 = (new PointBuilder())
            .trackId(trackId).time(time3)
            .latLong(0.0, 0.0002)
            .build();

        /*
         * This 4th point should not be "tracked" with the prior 3 point -- it is too far away.
         *
         * This 4th point should also prompt the publication of a 3 point track.
         */
        Point point4 = (new PointBuilder())
            .trackId(trackId).time(time4)
            .latLong(0.0, 1.0)
            .build();

        /*
         * This 5th point should not be "tracked" with the prior point -- it is too far away.
         *
         * This 5th point should also prompt the publication of a 1 point track.
         */
        Point point5 = (new PointBuilder())
            .trackId(trackId).time(time5)
            .latLong(0.0, 0.0004)
            .build();

        ConsumingArrayList<Track> aggregator = newConsumingArrayList();

        TrackMaker maker = new TrackMaker(Duration.ofMinutes(5), aggregator);
        maker.accept(point1);
        maker.accept(point2);
        maker.accept(point3);
        maker.accept(point4);
        maker.accept(point5);

        ArrayList<Track> publishedTracks = aggregator;
        assertEquals(2, publishedTracks.size());
        assertEquals(3, publishedTracks.get(0).points().size(), "The 1st track should have 3 points");
        assertEquals(1, publishedTracks.get(1).points().size(), "The 2nd track should have 1 point");
    }