@Override
    public boolean test(Track<T> track) {
        if (track.size() < trackSizeReq) {
            return false;
        }

        Set<Pair<Integer, Integer>> positions = track.points()
            .stream()
            .map(x -> getRoundedPositionValue(x))
            .collect(Collectors.toSet());

        //values as double, not ints
        double numUniquePositions = positions.size();
        double numPoints = track.size();
        double ratio = numUniquePositions / numPoints;

        return ratio <= fracUniqueLocations;
    }
@Test
    public void testReducingTrackLocationVarianceTriggersFilter() {

        HasLowVariability<String> filter = new HasLowVariability<>(300, 0.2, 1e5);

        double higherDistFromCenterStdDev = 20.0 / feetPerNM();
        Track<String> highVarienceTrack = createTestTrack(1000, higherDistFromCenterStdDev);

        double lowerDistFromCenterStdDev = 10 / feetPerNM();
        Track <String>lowVarienceTrack = createTestTrack(1000, lowerDistFromCenterStdDev);

        assertFalse(
            filter.test(highVarienceTrack),
            "A Track with high location variance should not be filtered"
        );

        assertTrue(
            filter.test(lowVarienceTrack),
            "A Track with low location variance should get filtered"
        );
    }