@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 testTrackSizeIsConsidered() {

        HasLowVariability<String> filter = new HasLowVariability<>(20, 0.1, 1e5);

        Track<String> shortTestTrack = createTestTrack(19, 0.0);
        Track<String> longTestTrack = createTestTrack(21, 0.0);

        assertFalse(
            filter.test(shortTestTrack),
            "This Track should not be considered a low variability track because it is too short"
        );
        assertTrue(
            filter.test(longTestTrack),
            "This Track should be considedered a low variability track because it is long enough to match"
        );
    }