public static List<Snap> lookup(List<GHPoint> points, EdgeFilter edgeFilter, LocationIndex locationIndex, Params params) {
        // todo: no snap preventions for round trip so far
        if (points.size() != 1)
            throw new IllegalArgumentException("For round trip calculation exactly one point is required");

        final GHPoint start = points.get(0);

        TourStrategy strategy = new MultiPointTour(new Random(params.seed), params.distanceInMeter, params.roundTripPointCount, params.initialHeading);
        List<Snap> snaps = new ArrayList<>(2 + strategy.getNumberOfGeneratedPoints());
        Snap startSnap = locationIndex.findClosest(start.lat, start.lon, edgeFilter);
        if (!startSnap.isValid())
            throw new PointNotFoundException("Cannot find point 0: " + start, 0);

        snaps.add(startSnap);

        GHPoint last = start;
        for (int i = 0; i < strategy.getNumberOfGeneratedPoints(); i++) {
            double heading = strategy.getHeadingForIteration(i);
            Snap result = generateValidPoint(last, strategy.getDistanceForIteration(i), heading, edgeFilter, locationIndex, params.maxRetries);
            last = result.getSnappedPoint();
            snaps.add(result);
        }

        snaps.add(startSnap);
        return snaps;
    }
@Test
    public void lookup_throwsIfNumberOfPointsNotOne() {
        assertThrows(IllegalArgumentException.class, () -> RoundTripRouting.lookup(Arrays.asList(ghPoint1, ghPoint2),
                new FiniteWeightFilter(weighting), null, new RoundTripRouting.Params()));
    }