@@ -316,6 +316,66 @@ public void testRectangle() {
316316 assertEquals (fields .size (), 4 );
317317 }
318318
319+ public void testDegeneratedRectangles () {
320+ Rectangle indexed = new Rectangle (-179 , -179 , 10 , -10 );
321+ Geometry processed = indexer .prepareForIndexing (indexed );
322+ assertEquals (indexed , processed );
323+
324+ // Rectangle is a line
325+ List <IndexableField > fields = indexer .indexShape (null , indexed );
326+ assertEquals (fields .size (), 1 );
327+
328+ indexed = new Rectangle (-179 , -178 , 10 , 10 );
329+ processed = indexer .prepareForIndexing (indexed );
330+ assertEquals (indexed , processed );
331+
332+ // Rectangle is a line
333+ fields = indexer .indexShape (null , indexed );
334+ assertEquals (fields .size (), 1 );
335+
336+ indexed = new Rectangle (-179 , -179 , 10 , 10 );
337+ processed = indexer .prepareForIndexing (indexed );
338+ assertEquals (indexed , processed );
339+
340+ // Rectangle is a point
341+ fields = indexer .indexShape (null , indexed );
342+ assertEquals (fields .size (), 1 );
343+
344+ indexed = new Rectangle (180 , -179 , 10 , -10 );
345+ processed = indexer .prepareForIndexing (indexed );
346+ assertEquals (indexed , processed );
347+
348+ // Rectangle crossing the dateline, one side is a line
349+ fields = indexer .indexShape (null , indexed );
350+ assertEquals (fields .size (), 3 );
351+
352+ indexed = new Rectangle (180 , -179 , 10 , 10 );
353+ processed = indexer .prepareForIndexing (indexed );
354+ assertEquals (indexed , processed );
355+
356+ // Rectangle crossing the dateline, one side is a point,
357+ // other side a line
358+ fields = indexer .indexShape (null , indexed );
359+ assertEquals (fields .size (), 2 );
360+
361+ indexed = new Rectangle (-178 , -180 , 10 , -10 );
362+ processed = indexer .prepareForIndexing (indexed );
363+ assertEquals (indexed , processed );
364+
365+ // Rectangle crossing the dateline, one side is a line
366+ fields = indexer .indexShape (null , indexed );
367+ assertEquals (fields .size (), 3 );
368+
369+ indexed = new Rectangle (-178 , -180 , 10 , 10 );
370+ processed = indexer .prepareForIndexing (indexed );
371+ assertEquals (indexed , processed );
372+
373+ // Rectangle crossing the dateline, one side is a point,
374+ // other side a line
375+ fields = indexer .indexShape (null , indexed );
376+ assertEquals (fields .size (), 2 );
377+ }
378+
319379 public void testPolygon () {
320380 Polygon polygon = new Polygon (new LinearRing (new double []{160 , 200 , 200 , 160 , 160 }, new double []{10 , 10 , 20 , 20 , 10 }));
321381 Geometry indexed = new MultiPolygon (Arrays .asList (
0 commit comments