GeoHash { public static String encodeHash(double latitude, double longitude) { return encodeHash(latitude, longitude, MAX_HASH_LENGTH); } private  GeoHash(); static String adjacentHash(String hash, Direction direction); static String right(String hash); static String left(String hash); static String top(String hash); static String bottom(String hash); static String adjacentHash(String hash, Direction direction, int steps); static List<String> neighbours(String hash); static String encodeHash(double latitude, double longitude); static String encodeHash(LatLong p, int length); static String encodeHash(LatLong p); static String encodeHash(double latitude, double longitude, int length); static LatLong decodeHash(String geohash); static int hashLengthToCoverBoundingBox(double topLeftLat, double topLeftLon,
            double bottomRightLat, double bottomRightLon); static boolean hashContains(String hash, double lat, double lon); static Coverage coverBoundingBox(double topLeftLat, final double topLeftLon,
            final double bottomRightLat, final double bottomRightLon); static Coverage coverBoundingBoxMaxHashes(double topLeftLat, final double topLeftLon,
            final double bottomRightLat, final double bottomRightLon, int maxHashes); static Coverage coverBoundingBox(double topLeftLat, final double topLeftLon,
            final double bottomRightLat, final double bottomRightLon, final int length); static double heightDegrees(int n); static double widthDegrees(int n); static String gridAsString(String hash, int size, Set<String> highlightThese); static String gridAsString(String hash, int fromRight, int fromBottom, int toRight,
            int toBottom); static String gridAsString(String hash, int fromRight, int fromBottom, int toRight,
            int toBottom, Set<String> highlightThese); static final int MAX_HASH_LENGTH; static final int DEFAULT_MAX_HASHES; }
@Test public void testHashOfLength12() { assertEquals("6gkzwgjzn820", encodeHash(-25.382708, -49.265506, 12)); }
@Test(expected = IllegalArgumentException.class) public void testHashOfLength13() { encodeHash(-25.382708, -49.265506, 13); }
@Test(expected = IllegalArgumentException.class) public void testHashOfLength20() { encodeHash(-25.382708, -49.265506, 20); }
@Test(expected = IllegalArgumentException.class) public void testHashEncodeGivenNonPositiveLength() { encodeHash(-25.382708, -49.265506, 0); }
@Test public void testAnother() { assertEquals("sew1c2vs2q5r", encodeHash(20, 31)); }
@Test(expected = IllegalArgumentException.class) public void testEncodeHashWithLatTooBig() { encodeHash(1000, 100, 4); }
@Test(expected = IllegalArgumentException.class) public void testEncodeHashWithLatTooSmall() { encodeHash(-1000, 100, 4); }
@Test public void testWhiteHouseHashEncode() { assertEquals("dqcjqcp84c6e", encodeHash(38.89710201881826, -77.03669792041183)); }
@Test public void testWhiteHouseHashEncodeUsingLatLongObject() { assertEquals("dqcjqcp84c6e", encodeHash(new LatLong(38.89710201881826, -77.03669792041183))); }
@Test public void testFromGeoHashDotOrg() { assertEquals("6gkzwgjzn820", encodeHash(-25.382708, -49.265506)); }
@Test public void testHashOfNonDefaultLength() { assertEquals("6gkzwg", encodeHash(-25.382708, -49.265506, 6)); }