@Test
public void test01() {
GridFactory factory = new GridFactory(0.1,0.1);
CoordinateBounds bounds = new CoordinateBounds(5.05, 4.05, 5.15, 4.15);
factory.addBounds(bounds);
List<CoordinateBounds> grid = factory.getGrid();
assertEquals(4, grid.size());
Collections.sort(grid, BOUNDS_COMPARATOR);
checkBounds(grid.get(0), new CoordinateBounds(5.0, 4.0, 5.1, 4.1), DELTA);
checkBounds(grid.get(1), new CoordinateBounds(5.0, 4.1, 5.1, 4.2), DELTA);
checkBounds(grid.get(2), new CoordinateBounds(5.1, 4.0, 5.2, 4.1), DELTA);
checkBounds(grid.get(3), new CoordinateBounds(5.1, 4.1, 5.2, 4.2), DELTA);
List<EncodedPolygonBean> boundary = factory.getBoundary();
assertEquals(1, boundary.size());
EncodedPolygonBean polygon = boundary.get(0);
assertTrue(polygon.getInnerRings().isEmpty());
List<CoordinatePoint> points = PolylineEncoder.decode(polygon.getOuterRing());
points = shiftPoints(points);
assertEquals(8, points.size());
assertEqualsPoints(new CoordinatePoint(5.0, 4.0), points.get(0), DELTA);
assertEqualsPoints(new CoordinatePoint(5.1, 4.0), points.get(1), DELTA);
assertEqualsPoints(new CoordinatePoint(5.2, 4.0), points.get(2), DELTA);
assertEqualsPoints(new CoordinatePoint(5.2, 4.1), points.get(3), DELTA);
assertEqualsPoints(new CoordinatePoint(5.2, 4.2), points.get(4), DELTA);
assertEqualsPoints(new CoordinatePoint(5.1, 4.2), points.get(5), DELTA);
assertEqualsPoints(new CoordinatePoint(5.0, 4.2), points.get(6), DELTA);
assertEqualsPoints(new CoordinatePoint(5.0, 4.1), points.get(7), DELTA);
factory.addBounds(new CoordinateBounds(5.15, 4.05, 5.26, 4.19));
grid = factory.getGrid();
assertEquals(6, grid.size());
Collections.sort(grid, BOUNDS_COMPARATOR);
checkBounds(grid.get(0), new CoordinateBounds(5.0, 4.0, 5.1, 4.1), DELTA);
checkBounds(grid.get(1), new CoordinateBounds(5.0, 4.1, 5.1, 4.2), DELTA);
checkBounds(grid.get(2), new CoordinateBounds(5.1, 4.0, 5.2, 4.1), DELTA);
checkBounds(grid.get(3), new CoordinateBounds(5.1, 4.1, 5.2, 4.2), DELTA);
checkBounds(grid.get(4), new CoordinateBounds(5.2, 4.0, 5.3, 4.1), DELTA);
checkBounds(grid.get(5), new CoordinateBounds(5.2, 4.1, 5.3, 4.2), DELTA);
boundary = factory.getBoundary();
assertEquals(1, boundary.size());
polygon = boundary.get(0);