@Override
    public boolean test(Pair<Point, Point> pair) {
        return testVertical(pair) && testHorizontal(pair);
    }
@Test
    public void testHorizontalSeparation() {

        Point p1 = (new PointBuilder()).time(EPOCH).latLong(0.0, 0.0).altitude(Distance.ofFeet(1000.0)).build();
        Point p2 = (new PointBuilder()).time(EPOCH).latLong(0.0, 0.0).altitude(Distance.ofFeet(1000.0)).build();
        Point p3 = (new PointBuilder()).time(EPOCH).latLong(0.0, 1.0).altitude(Distance.ofFeet(1000.0)).build();

        double MAX_HORIZ_SEPARATION_IN_FT = 1000;
        double MAX_VERT_SEPARATION = 500;

        CylindricalFilter filter = new CylindricalFilter(MAX_HORIZ_SEPARATION_IN_FT, MAX_VERT_SEPARATION);

        assertTrue(filter.test(Pair.of(p1, p1)), "A point is in the same cylindar with itself");
        assertTrue(filter.test(Pair.of(p1, p2)), "A point is in the same cylindar with itself");

        //manually compute distance
        double distanceInNM = Spherical.distanceInNM(
            0.0, 0.0,
            0.0, 1.0
        );

        assertTrue(distanceInNM * feetPerNM() > MAX_HORIZ_SEPARATION_IN_FT, "confirm distance is big");
        assertFalse(filter.test(Pair.of(p1, p3)), "confirm filter rejects points that are far apart");
    }