I didn't forget, precisely.  I used git commit -a and it didn't pick up the
file (for some reason as yet undetermined) and I didn't catch it.  Fixed
now (via explicit git add).

Karl


On Mon, Sep 11, 2017 at 9:40 AM, Adrien Grand <[email protected]> wrote:

> Karl, did you forget to git add RandomGeo3dShapeGenerator?
>
> Le lun. 11 sept. 2017 à 15:01, <[email protected]> a écrit :
>
>> Repository: lucene-solr
>> Updated Branches:
>>   refs/heads/master 64d142858 -> cd425d609
>>
>>
>> LUCENE-7906: Add new shapes to testing paradigm.  Committed on behalf of
>> Ignacio Vera.
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/
>> cd425d60
>> Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/cd425d60
>> Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/cd425d60
>>
>> Branch: refs/heads/master
>> Commit: cd425d609cee8bcea6dbfeab8b3d42b1ce48eb40
>> Parents: 64d1428
>> Author: Karl Wright <[email protected]>
>> Authored: Mon Sep 11 09:00:47 2017 -0400
>> Committer: Karl Wright <[email protected]>
>> Committed: Mon Sep 11 09:00:47 2017 -0400
>>
>> ----------------------------------------------------------------------
>>  .../spatial3d/geom/RandomBinaryCodecTest.java   |  10 +-
>>  .../spatial3d/geom/RandomGeoShapeGenerator.java | 944
>> -------------------
>>  .../geom/RandomGeoShapeRelationshipTest.java    |  65 +-
>>  3 files changed, 53 insertions(+), 966 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/
>> cd425d60/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/
>> RandomBinaryCodecTest.java
>> ----------------------------------------------------------------------
>> diff --git a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/
>> geom/RandomBinaryCodecTest.java b/lucene/spatial3d/src/test/
>> org/apache/lucene/spatial3d/geom/RandomBinaryCodecTest.java
>> index ba9ee6e..250b652 100644
>> --- a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/
>> geom/RandomBinaryCodecTest.java
>> +++ b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/
>> geom/RandomBinaryCodecTest.java
>> @@ -27,18 +27,18 @@ import org.junit.Test;
>>  /**
>>   * Test to check Serialization
>>   */
>> -public class RandomBinaryCodecTest extends RandomGeoShapeGenerator{
>> +public class RandomBinaryCodecTest extends RandomGeo3dShapeGenerator {
>>
>>    @Test
>>    @Repeat(iterations = 10)
>>    public void testRandomPointCodec() throws IOException{
>>      PlanetModel planetModel = randomPlanetModel();
>> -    GeoPoint shape = randomGeoPoint(planetModel, getEmptyConstraint());
>> +    GeoPoint shape = randomGeoPoint(planetModel);
>>      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
>>      SerializableObject.writeObject(outputStream, shape);
>>      ByteArrayInputStream inputStream = new ByteArrayInputStream(
>> outputStream.toByteArray());
>>      SerializableObject shapeCopy = 
>> SerializableObject.readObject(planetModel,
>> inputStream);
>> -    assertEquals(shape, shapeCopy);
>> +    assertEquals(shape.toString(), shape, shapeCopy);
>>    }
>>
>>    @Test
>> @@ -51,7 +51,7 @@ public class RandomBinaryCodecTest extends
>> RandomGeoShapeGenerator{
>>      SerializableObject.writePlanetObject(outputStream, shape);
>>      ByteArrayInputStream inputStream = new ByteArrayInputStream(
>> outputStream.toByteArray());
>>      SerializableObject shapeCopy = SerializableObject.
>> readPlanetObject(inputStream);
>> -    assertEquals(shape, shapeCopy);
>> +    assertEquals(shape.toString(), shape, shapeCopy);
>>    }
>>
>>    @Test
>> @@ -64,6 +64,6 @@ public class RandomBinaryCodecTest extends
>> RandomGeoShapeGenerator{
>>      SerializableObject.writeObject(outputStream, shape);
>>      ByteArrayInputStream inputStream = new ByteArrayInputStream(
>> outputStream.toByteArray());
>>      SerializableObject shapeCopy = 
>> SerializableObject.readObject(planetModel,
>> inputStream);
>> -    assertEquals(shape, shapeCopy);
>> +    assertEquals(shape.toString(), shape, shapeCopy);
>>    }
>>  }
>>
>> http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/
>> cd425d60/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/
>> RandomGeoShapeGenerator.java
>> ----------------------------------------------------------------------
>> diff --git a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/
>> geom/RandomGeoShapeGenerator.java b/lucene/spatial3d/src/test/
>> org/apache/lucene/spatial3d/geom/RandomGeoShapeGenerator.java
>> deleted file mode 100644
>> index ca7aecd..0000000
>> --- a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/
>> geom/RandomGeoShapeGenerator.java
>> +++ /dev/null
>> @@ -1,944 +0,0 @@
>> -/*
>> -* Licensed to the Apache Software Foundation (ASF) under one or more
>> -* contributor license agreements.  See the NOTICE file distributed with
>> -* this work for additional information regarding copyright ownership.
>> -* The ASF licenses this file to You under the Apache License, Version 2.0
>> -* (the "License"); you may not use this file except in compliance with
>> -* the License.  You may obtain a copy of the License at
>> -*
>> -*     http://www.apache.org/licenses/LICENSE-2.0
>> -*
>> -* Unless required by applicable law or agreed to in writing, software
>> -* distributed under the License is distributed on an "AS IS" BASIS,
>> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> -* See the License for the specific language governing permissions and
>> -* limitations under the License.
>> -*/
>> -
>> -package org.apache.lucene.spatial3d.geom;
>> -
>> -import java.util.ArrayList;
>> -import java.util.Collections;
>> -import java.util.Comparator;
>> -import java.util.HashMap;
>> -import java.util.List;
>> -
>> -import org.apache.lucene.util.LuceneTestCase;
>> -
>> -import static com.carrotsearch.randomizedtesting.
>> RandomizedTest.randomDouble;
>> -
>> -/**
>> - * Class for generating random Geo3dShapes. They can be generated under
>> - * given constraints which are expressed as a shape and a relationship.
>> - *
>> - * note that convexity for polygons is defined as polygons that contains
>> - * antipodal points, otherwise they are convex. Internally they can be
>> - * created using GeoConvexPolygons and GeoConcavePolygons.
>> - *
>> - */
>> -public class RandomGeoShapeGenerator extends LuceneTestCase {
>> -
>> -  /* Max num of iterations to find right shape under given constrains */
>> -  final private static int MAX_SHAPE_ITERATIONS = 50;
>> -  /* Max num of iterations to find right point under given constrains */
>> -  final private static int MAX_POINT_ITERATIONS = 1000;
>> -
>> -  /* Supported shapes */
>> -  final protected static int CONVEX_POLYGON = 0;
>> -  final protected static int CONVEX_POLYGON_WITH_HOLES = 1;
>> -  final protected static int CONCAVE_POLYGON = 2;
>> -  final protected static int CONCAVE_POLYGON_WITH_HOLES = 3;
>> -  final protected static int COMPLEX_POLYGON = 4;
>> -  final protected static int CIRCLE = 5;
>> -  final protected static int RECTANGLE = 6;
>> -  final protected static int PATH = 7;
>> -  final protected static int COLLECTION = 8;
>> -
>> -  /* Helper shapes for generating constraints whch are just three sided
>> polygons */
>> -  final protected static int CONVEX_SIMPLE_POLYGON = 500;
>> -  final protected static int CONCAVE_SIMPLE_POLYGON = 501;
>> -
>> -
>> -  /**
>> -   * Method that returns empty Constraints object..
>> -   *
>> -   * @return an empty Constraints object
>> -   */
>> -  public Constraints getEmptyConstraint(){
>> -    return new Constraints();
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a random Shape code from all
>> -   * supported shapes.
>> -   *
>> -   * @return a random generated shape code
>> -   */
>> -  public int randomShapeType(){
>> -    return random().nextInt(9);
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a random Shape code from all
>> -   * convex supported shapes.
>> -   *
>> -   * @return a random generated convex shape code
>> -   */
>> -  public int randomConvexShapeType(){
>> -    int shapeType = randomShapeType();
>> -    while (isConcave(shapeType)){
>> -      shapeType = randomShapeType();
>> -    }
>> -    return shapeType;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a random Shape code from all
>> -   * concave supported shapes.
>> -   *
>> -   * @return a random generated concave shape code
>> -   */
>> -  public int randomConcaveShapeType(){
>> -    int shapeType = randomShapeType();
>> -    while (!isConcave(shapeType)){
>> -      shapeType = randomShapeType();
>> -    }
>> -    return shapeType;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated GeoAreaShape code from all
>> -   * supported GeoAreaShapes.
>> -   *
>> -   * We are removing Collections because it is difficult to create shapes
>> -   * with properties in some cases.
>> -   *
>> -   * @return a random generated polygon code
>> -   */
>> -  public int randomGeoAreaShapeType(){
>> -    return random().nextInt(8);
>> -  }
>> -
>> -  /**
>> -   * Check if a shape code represents a concave shape
>> -   *
>> -   * @return true if the shape represented by the code is concave
>> -   */
>> -  public boolean isConcave(int shapeType){
>> -    return (shapeType == CONCAVE_POLYGON);
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated Planet model from the
>> supported
>> -   * Planet models. currently SPHERE and WGS84
>> -   *
>> -   * @return a random generated Planet model
>> -   */
>> -  public PlanetModel randomPlanetModel() {
>> -    final int shapeType = random().nextInt(2);
>> -    switch (shapeType) {
>> -      case 0: {
>> -        return PlanetModel.SPHERE;
>> -      }
>> -      case 1: {
>> -        return PlanetModel.WGS84;
>> -      }
>> -      default:
>> -        throw new IllegalStateException("Unexpected planet model");
>> -    }
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated GeoPoint under given
>> constraints. Returns
>> -   * NULL if it cannot find a point under the given constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPoint.
>> -   */
>> -  public GeoPoint randomGeoPoint(PlanetModel planetModel, Constraints
>> constraints) {
>> -    int iterations = 0;
>> -    while (iterations < MAX_POINT_ITERATIONS) {
>> -      double lat = randomDouble();
>> -      if (Math.PI/2 - Math.abs(lat)  <0){
>> -        continue;
>> -      }
>> -      double lon =  randomDouble();
>> -      if (Math.PI - Math.abs(lat)   <0){
>> -        continue;
>> -      }
>> -      iterations++;
>> -      GeoPoint point = new GeoPoint(planetModel, lat, lon);
>> -      if (constraints.isWithin(point)) {
>> -        return point;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated GeoAreaShape.
>> -   *
>> -   * @param shapeType The GeoAreaShape code.
>> -   * @param planetModel The planet model.
>> -   * @return The random generated GeoAreaShape.
>> -   */
>> -  public GeoAreaShape randomGeoAreaShape(int shapeType, PlanetModel
>> planetModel){
>> -    GeoAreaShape geoAreaShape = null;
>> -    while (geoAreaShape == null){
>> -      geoAreaShape = randomGeoAreaShape(shapeType,planetModel,new
>> Constraints());
>> -    }
>> -    return geoAreaShape;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated GeoAreaShape under given
>> constraints. Returns
>> -   * NULL if it cannot build the GeoAreaShape under the given
>> constraints.
>> -   *
>> -   * @param shapeType The GeoAreaShape code.
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoAreaShape.
>> -   */
>> -  public GeoAreaShape randomGeoAreaShape(int shapeType, PlanetModel
>> planetModel, Constraints constraints){
>> -    return (GeoAreaShape)randomGeoShape(shapeType, planetModel,
>> constraints);
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated GeoShape.
>> -   *
>> -   * @param shapeType The shape code.
>> -   * @param planetModel The planet model.
>> -   * @return The random generated GeoShape.
>> -   */
>> -  public GeoShape randomGeoShape(int shapeType, PlanetModel planetModel){
>> -    GeoShape geoShape = null;
>> -    while (geoShape == null){
>> -      geoShape = randomGeoShape(shapeType,planetModel,new
>> Constraints());
>> -    }
>> -    return geoShape;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated GeoShape under given
>> constraints. Returns
>> -   * NULL if it cannot build the GeoShape under the given constraints.
>> -   *
>> -   * @param shapeType The polygon code.
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoShape.
>> -   */
>> -  public GeoShape randomGeoShape(int shapeType, PlanetModel planetModel,
>> Constraints constraints){
>> -    switch (shapeType) {
>> -      case CONVEX_POLYGON: {
>> -        return convexPolygon(planetModel, constraints);
>> -      }
>> -      case CONVEX_POLYGON_WITH_HOLES: {
>> -        return convexPolygonWithHoles(planetModel, constraints);
>> -      }
>> -      case CONCAVE_POLYGON: {
>> -        return concavePolygon(planetModel, constraints);
>> -      }
>> -      case CONCAVE_POLYGON_WITH_HOLES: {
>> -        return concavePolygonWithHoles(planetModel, constraints);
>> -      }
>> -      case COMPLEX_POLYGON: {
>> -        return complexPolygon(planetModel, constraints);
>> -      }
>> -      case CIRCLE: {
>> -        return circle(planetModel, constraints);
>> -      }
>> -      case RECTANGLE: {
>> -        return rectangle(planetModel, constraints);
>> -      }
>> -      case PATH: {
>> -        return path(planetModel, constraints);
>> -      }
>> -      case COLLECTION: {
>> -        return collection(planetModel, constraints);
>> -      }
>> -      case CONVEX_SIMPLE_POLYGON: {
>> -        return simpleConvexPolygon(planetModel, constraints);
>> -      }
>> -      case CONCAVE_SIMPLE_POLYGON: {
>> -        return concaveSimplePolygon(planetModel, constraints);
>> -      }
>> -      default:
>> -        throw new IllegalStateException("Unexpected shape type");
>> -    }
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a GeoCircle under given
>> constraints. Returns
>> -   * NULL if it cannot build the GeoCircle under the given constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoCircle.
>> -   */
>> -  private GeoCircle circle(PlanetModel planetModel , Constraints
>> constraints) {
>> -    int iterations=0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      final GeoPoint center = randomGeoPoint(planetModel, constraints);
>> -      if (center == null){
>> -        continue;
>> -      }
>> -      final double radius = randomCutoffAngle();
>> -      try {
>> -
>> -        GeoCircle circle = GeoCircleFactory.makeGeoCircle(planetModel,
>> center.getLatitude(), center.getLongitude(), radius);
>> -        if (!constraints.valid(circle)) {
>> -          continue;
>> -        }
>> -        return circle;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a GeoBBox under given
>> constraints. Returns
>> -   * NULL if it cannot build the GeoBBox under the given constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoBBox.
>> -   */
>> -  private GeoBBox rectangle(PlanetModel planetModel, Constraints
>> constraints) {
>> -
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      final GeoPoint point1 = randomGeoPoint(planetModel, constraints);
>> -      if (point1 == null){
>> -        continue;
>> -      }
>> -      final GeoPoint point2 = randomGeoPoint(planetModel, constraints);
>> -      if (point2 == null){
>> -        continue;
>> -      }
>> -
>> -      double minLat = Math.min(point1.getLatitude(),
>> point2.getLatitude());
>> -      double maxLat = Math.max(point1.getLatitude(),
>> point2.getLatitude());
>> -      double minLon = Math.min(point1.getLongitude(),
>> point2.getLongitude());
>> -      double maxLon = Math.max(point1.getLongitude(),
>> point2.getLongitude());
>> -
>> -      try {
>> -        GeoBBox bbox = GeoBBoxFactory.makeGeoBBox(planetModel, maxLat,
>> minLat, minLon, maxLon);
>> -        if (!constraints.valid(bbox)) {
>> -          continue;
>> -        }
>> -        return bbox;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a GeoPath under given
>> constraints. Returns
>> -   * NULL if it cannot build the GeoPath under the given constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPath.
>> -   */
>> -  private GeoPath path(PlanetModel planetModel, Constraints constraints)
>> {
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      int vertexCount =  random().nextInt(2) + 2;
>> -      List<GeoPoint> geoPoints = points(vertexCount, planetModel,
>> constraints);
>> -      double width =randomCutoffAngle();
>> -      try {
>> -        GeoPath path = GeoPathFactory.makeGeoPath(planetModel, width,
>> geoPoints.toArray(new GeoPoint[geoPoints.size()]));
>> -        if (!constraints.valid(path)) {
>> -          continue;
>> -        }
>> -        return path;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a
>> GeoCompositeMembershipShape under given constraints. Returns
>> -   * NULL if it cannot build the GGeoCompositeMembershipShape under the
>> given constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoCompositeMembershipShape.
>> -   */
>> -  private GeoCompositeAreaShape collection(PlanetModel planetModel,
>> Constraints constraints) {
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      int numberShapes =  random().nextInt(3) + 2;
>> -      GeoCompositeAreaShape collection = new GeoCompositeAreaShape(
>> planetModel);
>> -      for(int i=0; i<numberShapes;i++){
>> -        GeoPolygon member = convexPolygon(planetModel, constraints);
>> -        if (member != null){
>> -          collection.addShape(member);
>> -        }
>> -      }
>> -      if (collection.shapes.size() ==0){
>> -        continue;
>> -      }
>> -      return collection;
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a convex GeoPolygon under
>> given constraints. Returns
>> -   * NULL if it cannot build the GePolygon under the given constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private GeoPolygon convexPolygon(PlanetModel planetModel, Constraints
>> constraints) {
>> -    int vertexCount = random().nextInt(4) + 3;
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      List<GeoPoint> geoPoints = points(vertexCount,planetModel,
>> constraints);
>> -      List<GeoPoint> orderedGeoPoints = orderPoints(geoPoints);
>> -      try {
>> -        GeoPolygon polygon = GeoPolygonFactory.makeGeoPolygon(planetModel,
>> orderedGeoPoints);
>> -        if (!constraints.valid(polygon) || isConcave(planetModel,
>> polygon)) {
>> -          continue;
>> -        }
>> -        return polygon;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a convex GeoPolygon with
>> holes under given constraints. Returns
>> -   * NULL if it cannot build the GeoPolygon with holes under the given
>> constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private GeoPolygon convexPolygonWithHoles(PlanetModel planetModel,
>> Constraints constraints) {
>> -    int vertexCount = random().nextInt(4) + 3;
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      List<GeoPoint> geoPoints = points(vertexCount,planetModel,
>> constraints);
>> -      List<GeoPoint> orderedGeoPoints = orderPoints(geoPoints);
>> -      try {
>> -        GeoPolygon polygon = GeoPolygonFactory.makeGeoPolygon(planetModel,
>> orderedGeoPoints);
>> -        //polygon should comply with all constraints except disjoint as
>> we have holes
>> -        Constraints polygonConstraints = new Constraints();
>> -        polygonConstraints.putAll(constraints.getContains());
>> -        polygonConstraints.putAll(constraints.getWithin());
>> -        polygonConstraints.putAll(constraints.getDisjoint());
>> -        if (!polygonConstraints.valid(polygon) ||
>> isConcave(planetModel, polygon)){
>> -          continue;
>> -        }
>> -        //hole must overlap with polygon and comply with any CONTAINS
>> constraint.
>> -        Constraints holeConstraints = new Constraints();
>> -        holeConstraints.putAll(constraints.getContains());
>> -        holeConstraints.put(polygon,GeoArea.OVERLAPS);
>> -        //Points must be with in the polygon and must comply
>> -        // CONTAINS and DISJOINT constraints
>> -        Constraints pointsConstraints = new Constraints();
>> -        pointsConstraints.put(polygon,GeoArea.WITHIN);
>> -        pointsConstraints.putAll(constraints.getContains());
>> -        pointsConstraints.putAll(constraints.getDisjoint());
>> -        List<GeoPolygon> holes = concavePolygonHoles(planetModel,
>> holeConstraints, pointsConstraints);
>> -        //we should have at least one hole
>> -        if (holes.size() == 0){
>> -          continue;
>> -        }
>> -        polygon = GeoPolygonFactory.makeGeoPolygon(planetModel,
>> orderedGeoPoints,holes);
>> -        if (!constraints.valid(polygon) || isConcave(planetModel,
>> polygon)){
>> -          continue;
>> -        }
>> -        return polygon;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random list if concave GeoPolygons under
>> given constraints. Method
>> -   * use to generate convex holes. Note that constraints for points and
>> holes are different,
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param holeConstraints The given constraints that a hole must
>> comply.
>> -   * @param pointConstraints The given constraints that a point must
>> comply.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private List<GeoPolygon> concavePolygonHoles(PlanetModel planetModel,
>> -                                               Constraints
>> holeConstraints,
>> -                                               Constraints
>> pointConstraints) {
>> -    int iterations =0;
>> -    int holesCount = random().nextInt(3) + 1;
>> -    List<GeoPolygon> holes = new ArrayList<>();
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      int vertexCount = random().nextInt(3) + 3;
>> -      List<GeoPoint> geoPoints = points(vertexCount, planetModel,
>> pointConstraints);
>> -      geoPoints = orderPoints(geoPoints);
>> -      Collections.reverse(geoPoints);
>> -      try {
>> -        GeoPolygon hole = GeoPolygonFactory.makeGeoPolygon(planetModel,
>> geoPoints);
>> -        if (!holeConstraints.valid(hole) || isConvex(planetModel, hole))
>> {
>> -          continue;
>> -        }
>> -        holes.add(hole);
>> -        if (holes.size() == holesCount){
>> -          return holes;
>> -        }
>> -        pointConstraints.put(hole, GeoArea.DISJOINT);
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return holes;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a concave GeoPolygon under
>> given constraints. Returns
>> -   * NULL if it cannot build the concave GeoPolygon under the given
>> constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private GeoPolygon concavePolygon(PlanetModel planetModel, Constraints
>> constraints) {
>> -
>> -    int vertexCount = random().nextInt(4) + 3;
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      List<GeoPoint> geoPoints = points(vertexCount,planetModel,
>> constraints);
>> -      List<GeoPoint> orderedGeoPoints = orderPoints(geoPoints);
>> -      Collections.reverse(orderedGeoPoints);
>> -      try {
>> -        GeoPolygon polygon = GeoPolygonFactory.makeGeoPolygon(planetModel,
>> orderedGeoPoints);
>> -        if (!constraints.valid(polygon) || isConvex(planetModel,
>> polygon)) {
>> -          continue;
>> -        }
>> -        return polygon;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a concave GeoPolygon with
>> holes under given constraints. Returns
>> -   * NULL if it cannot build the GeoPolygon under the given constraints.
>> Note that the final GeoPolygon is
>> -   * convex as the hole wraps the convex GeoPolygon.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private GeoPolygon concavePolygonWithHoles(PlanetModel planetModel,
>> Constraints constraints) {
>> -    int vertexCount = random().nextInt(4) + 3;
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      //we first build the hole. We consider all constraints except
>> -      // disjoint as we have a hole
>> -      Constraints holeConstraints = new Constraints();
>> -      holeConstraints.putAll(constraints.getContains());
>> -      holeConstraints.putAll(constraints.getWithin());
>> -      holeConstraints.putAll(constraints.getOverlaps());
>> -      GeoPolygon hole = convexPolygon(planetModel, holeConstraints);
>> -      if (hole == null){
>> -        continue;
>> -      }
>> -      // Now we get points for polygon. Must we with in the hole
>> -      // and we add contain constraints
>> -      Constraints pointConstraints = new Constraints();
>> -      pointConstraints.put(hole, GeoArea.WITHIN);
>> -      pointConstraints.putAll(constraints.getContains());
>> -      List<GeoPoint> geoPoints = points(vertexCount,planetModel,
>> pointConstraints);
>> -      List<GeoPoint> orderedGeoPoints = orderPoints(geoPoints);
>> -      Collections.reverse(orderedGeoPoints);
>> -      try {
>> -        GeoPolygon polygon = GeoPolygonFactory.makeGeoPolygon(planetModel,
>> orderedGeoPoints, Collections.singletonList(hole));
>> -        //final polygon must be convex
>> -        if (!constraints.valid(polygon) || isConcave(planetModel,polygon))
>> {
>> -          continue;
>> -        }
>> -        return polygon;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated complex GeoPolygon under
>> given constraints. Returns
>> -   * NULL if it cannot build the complex GeoPolygon under the given
>> constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private GeoPolygon complexPolygon(PlanetModel planetModel, Constraints
>> constraints) {
>> -    int polygonsCount =random().nextInt(2) + 1;
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      List<GeoPolygonFactory.PolygonDescription> polDescription = new
>> ArrayList<>();
>> -      while(polDescription.size() < polygonsCount){
>> -        int vertexCount = random().nextInt(14) + 3;
>> -        List<GeoPoint> geoPoints = points(vertexCount,planetModel,
>> constraints);
>> -        orderPoints(geoPoints);
>> -        polDescription.add(new GeoPolygonFactory.
>> PolygonDescription(geoPoints));
>> -      }
>> -      try {
>> -        GeoPolygon polygon = GeoPolygonFactory.makeLargeGeoPolygon(
>> planetModel,polDescription);
>> -        if (!constraints.valid(polygon)) {
>> -          continue;
>> -        }
>> -        return polygon;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a concave square GeoPolygon
>> under given constraints. Returns
>> -   * NULL if it cannot build the concave GeoPolygon under the given
>> constraints. This shape is an utility
>> -   * to build constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private GeoPolygon simpleConvexPolygon(PlanetModel planetModel,
>> Constraints constraints) {
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      List<GeoPoint> points = points(3,planetModel,constraints);
>> -      points = orderPoints(points);
>> -      try {
>> -        GeoPolygon polygon =  
>> GeoPolygonFactory.makeGeoConvexPolygon(planetModel,
>> points);
>> -        if(!constraints.valid(polygon) || isConcave(planetModel,polygon)
>> ){
>> -          continue;
>> -        }
>> -        return polygon;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random generated a convex square GeoPolygon
>> under given constraints. Returns
>> -   * NULL if it cannot build the convex GeoPolygon under the given
>> constraints. This shape is an utility
>> -   * to build constraints.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated GeoPolygon.
>> -   */
>> -  private GeoPolygon concaveSimplePolygon(PlanetModel planetModel,
>> Constraints constraints) {
>> -    int iterations = 0;
>> -    while (iterations < MAX_SHAPE_ITERATIONS) {
>> -      iterations++;
>> -      List<GeoPoint> points = points(3, planetModel, constraints);
>> -      points = orderPoints(points);
>> -      Collections.reverse(points);
>> -      try {
>> -        GeoPolygon polygon =  
>> GeoPolygonFactory.makeGeoConcavePolygon(planetModel,
>> points);
>> -        if(!constraints.valid(polygon) || isConvex(planetModel,
>> polygon)){
>> -          continue;
>> -        }
>> -        return polygon;
>> -      } catch (IllegalArgumentException e) {
>> -        continue;
>> -      }
>> -    }
>> -    return null;
>> -  }
>> -
>> -  /**
>> -   * Method that returns a random list of generated GeoPoints under
>> given constraints. If it cannot
>> -   * find a point it will add a point that might not comply with the
>> constraints.
>> -   *
>> -   * @param count The number of points
>> -   * @param planetModel The planet model.
>> -   * @param constraints The given constraints.
>> -   * @return The random generated List of GeoPoints.
>> -   */
>> -  private List<GeoPoint> points(int count, PlanetModel planetModel,
>> Constraints constraints){
>> -    List<GeoPoint> geoPoints = new ArrayList<>(count);
>> -    for(int i= 0; i< count; i++) {
>> -      GeoPoint point = randomGeoPoint(planetModel, constraints);
>> -      if (point == null){
>> -        point = randomGeoPoint(planetModel, new Constraints());
>> -      }
>> -      geoPoints.add(point);
>> -    }
>> -    return  geoPoints;
>> -  }
>> -
>> -  /**
>> -   * Check if a GeoPolygon is pure concave. Note that our definition for
>> concavity is that the polygon
>> -   * contains antipodal points.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param shape The polygon to check.
>> -   * @return True if the polygon contains antipodal points.
>> -   */
>> -  private boolean isConcave(PlanetModel planetModel, GeoPolygon shape){
>> -    return (shape.isWithin(planetModel.NORTH_POLE) &&
>> shape.isWithin(planetModel.SOUTH_POLE))||
>> -        (shape.isWithin(planetModel.MAX_X_POLE) &&
>> shape.isWithin(planetModel.MIN_X_POLE)) ||
>> -        (shape.isWithin(planetModel.MAX_Y_POLE) &&
>> shape.isWithin(planetModel.MIN_Y_POLE));
>> -  }
>> -
>> -  /**
>> -   * Check if a GeoPolygon is pure convex. Note that our definition for
>> convexity is that the polygon
>> -   * does not contain antipodal points.
>> -   *
>> -   * @param planetModel The planet model.
>> -   * @param shape The polygon to check.
>> -   * @return True if the polygon dies not contains antipodal points.
>> -   */
>> -  private boolean isConvex(PlanetModel planetModel, GeoPolygon shape){
>> -    return !isConcave(planetModel,shape);
>> -  }
>> -
>> -  /**
>> -   * Generates a random number between 0 and PI.
>> -   *
>> -   * @return the cutoff angle.
>> -   */
>> -  private double randomCutoffAngle() {
>> -    while(true) {
>> -      double radius = randomDouble();
>> -      if (radius <0 || radius > Math.PI){
>> -        continue;
>> -      }
>> -      return radius;
>> -    }
>> -  }
>> -
>> -  /**
>> -   * Method that orders a lit of points anti-clock-wise to prevent
>> crossing edges.
>> -   *
>> -   * @param originalPoints The points to order.
>> -   * @return The list of ordered points anti-clockwise.
>> -   */
>> -  private List<GeoPoint> orderPoints(List<GeoPoint> originalPoints){
>> -    List<GeoPoint> points = new ArrayList<>(originalPoints.size());
>> -    points.addAll(originalPoints); //make a copy
>> -    GeoPoint lPoint = getPointLefLon(points);
>> -    points.remove(lPoint);
>> -    GeoPoint rPoint = getPointRigthLon(points);
>> -    points.remove(rPoint);
>> -    List<GeoPoint> APoints = getPointsBelowAndSort(points, lPoint);
>> -    List<GeoPoint> BPoints = getPointsAboveAndsort(points, lPoint);
>> -    List<GeoPoint> result = new ArrayList<>();
>> -    result.add(lPoint);
>> -    result.addAll(APoints);
>> -    result.add(rPoint);
>> -    result.addAll(BPoints);
>> -    return result;
>> -  }
>> -
>> -  private List<GeoPoint> getPointsAboveAndsort(List<GeoPoint>
>> points,GeoPoint lPoint) {
>> -    List<GeoPoint> BPoints = new ArrayList<>();
>> -    for (GeoPoint point : points){
>> -      if(point.getLatitude() > lPoint.getLatitude()){
>> -        BPoints.add(point);
>> -      }
>> -    }
>> -    Collections.sort(BPoints, new Comparator<GeoPoint>() {
>> -      public int compare(GeoPoint idx1, GeoPoint idx2) {
>> -        return Double.compare(idx1.getLongitude(), idx2.getLongitude());
>> -      }
>> -    });
>> -    return BPoints;
>> -  }
>> -
>> -  private List<GeoPoint> getPointsBelowAndSort(List<GeoPoint>
>> points,GeoPoint lPoint) {
>> -    List<GeoPoint> APoints = new ArrayList<>();
>> -    for (GeoPoint point : points){
>> -      if(point.getLatitude() < lPoint.getLatitude()){
>> -        APoints.add(point);
>> -      }
>> -    }
>> -    Collections.sort(APoints, new Comparator<GeoPoint>() {
>> -      public int compare(GeoPoint idx1, GeoPoint idx2) {
>> -        return Double.compare(idx1.getLongitude(), idx2.getLongitude());
>> -      }
>> -    });
>> -    return APoints;
>> -  }
>> -
>> -  private GeoPoint getPointLefLon(List<GeoPoint> points)  {
>> -    GeoPoint lPoint = null;
>> -    for (GeoPoint point : points){
>> -      if(lPoint == null ){
>> -        lPoint = point;
>> -      }
>> -      else{
>> -        if (lPoint.getLongitude() > point.getLongitude()){
>> -          lPoint = point;
>> -        }
>> -      }
>> -    }
>> -    return lPoint;
>> -  }
>> -
>> -  private GeoPoint getPointRigthLon(List<GeoPoint> points) {
>> -    GeoPoint rPoint = null;
>> -    for (GeoPoint point : points){
>> -      if(rPoint == null ){
>> -        rPoint = point;
>> -      }
>> -      else{
>> -        if (rPoint.getLongitude() < point.getLongitude()){
>> -          rPoint = point;
>> -        }
>> -      }
>> -    }
>> -    return rPoint;
>> -  }
>> -
>> -  /**
>> -   * Class that holds the constraints that are given to
>> -   * build shapes. It consists in a list of GeoAreaShapes
>> -   * and relationships the new shape needs to satisfy.
>> -   */
>> -  class Constraints extends HashMap<GeoAreaShape, Integer>{
>> -
>> -    /**
>> -     * Check if the shape is valid under the constraints.
>> -     *
>> -     * @param shape The shape to check
>> -     * @return true if the shape satisfy the constraints, else false.
>> -     */
>> -    public boolean valid(GeoShape shape) {
>> -      if (shape == null){
>> -        return false;
>> -      }
>> -      for (GeoAreaShape constraint : keySet()) {
>> -        if (constraint.getRelationship(shape) != get(constraint)) {
>> -          return false;
>> -        }
>> -      }
>> -      return true;
>> -    }
>> -
>> -    /**
>> -     * Check if a point is Within the constraints.
>> -     *
>> -     * @param point The point to check
>> -     * @return true if the point satisfy the constraints, else false.
>> -     */
>> -    public boolean isWithin(GeoPoint point) {
>> -      for (GeoShape constraint : keySet()) {
>> -        if (!(validPoint(point, constraint, get(constraint)))) {
>> -          return false;
>> -        }
>> -      }
>> -      return true;
>> -    }
>> -
>> -    /**
>> -     * Check if a point is Within one constraint given by a shape and a
>> relationship.
>> -     *
>> -     * @param point The point to check
>> -     * @param shape The shape of the constraint
>> -     * @param relationship The relationship of the constraint.
>> -     * @return true if the point satisfy the constraint, else false.
>> -     */
>> -    private boolean validPoint(GeoPoint point, GeoShape shape, int
>> relationship) {
>> -      //For GeoCompositeMembershipShape we only consider the first shape
>> to help
>> -      // converging
>> -      if (relationship == GeoArea.WITHIN && shape instanceof
>> GeoCompositeMembershipShape) {
>> -        shape = (((GeoCompositeMembershipShape) shape).shapes.get(0));
>> -      }
>> -      switch (relationship) {
>> -        case GeoArea.DISJOINT:
>> -          return !shape.isWithin(point);
>> -        case GeoArea.OVERLAPS:
>> -          return true;
>> -        case GeoArea.CONTAINS:
>> -          return !shape.isWithin(point);
>> -        case GeoArea.WITHIN:
>> -          return shape.isWithin(point);
>> -        default:
>> -          return true;
>> -      }
>> -    }
>> -
>> -    /**
>> -     * Collect the CONTAINS constraints in the object
>> -     *
>> -     * @return the CONTAINS constraints.
>> -     */
>> -    public Constraints getContains(){
>> -      return getConstraintsOfType(GeoArea.CONTAINS);
>> -    }
>> -
>> -    /**
>> -     * Collect the WITHIN constraints in the object
>> -     *
>> -     * @return the WITHIN constraints.
>> -     */
>> -    public Constraints getWithin(){
>> -      return getConstraintsOfType(GeoArea.WITHIN);
>> -    }
>> -
>> -    /**
>> -     * Collect the OVERLAPS constraints in the object
>> -     *
>> -     * @return the OVERLAPS constraints.
>> -     */
>> -    public Constraints getOverlaps(){
>> -      return getConstraintsOfType(GeoArea.OVERLAPS);
>> -    }
>> -
>> -    /**
>> -     * Collect the DISJOINT constraints in the object
>> -     *
>> -     * @return the DISJOINT constraints.
>> -     */
>> -    public Constraints getDisjoint(){
>> -      return getConstraintsOfType(GeoArea.DISJOINT);
>> -    }
>> -
>> -    private Constraints getConstraintsOfType(int type){
>> -      Constraints constraints = new Constraints();
>> -      for (GeoAreaShape constraint : keySet()) {
>> -        if (type == get(constraint)) {
>> -          constraints.put(constraint, type);
>> -        }
>> -      }
>> -      return constraints;
>> -    }
>> -  }
>> -}
>> -
>> -
>> -
>>
>> http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/
>> cd425d60/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/
>> RandomGeoShapeRelationshipTest.java
>> ----------------------------------------------------------------------
>> diff --git a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/
>> RandomGeoShapeRelationshipTest.java b/lucene/spatial3d/src/test/
>> org/apache/lucene/spatial3d/geom/RandomGeoShapeRelationshipTest.java
>> index 75a8c28..9c791b7 100644
>> --- a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/
>> RandomGeoShapeRelationshipTest.java
>> +++ b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/
>> RandomGeoShapeRelationshipTest.java
>> @@ -23,8 +23,7 @@ import org.junit.Test;
>>  /**
>>   * Random test to check relationship between GeoAreaShapes and GeoShapes.
>>   */
>> -public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>> -
>> +public class RandomGeoShapeRelationshipTest extends
>> RandomGeo3dShapeGenerator {
>>
>>    /**
>>     * Test for WITHIN points. We build a WITHIN shape with respect the
>> geoAreaShape
>> @@ -38,6 +37,9 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>      int referenceShapeType = CONVEX_POLYGON;
>>      PlanetModel planetModel = randomPlanetModel();
>>      int shapeType = randomShapeType();
>> +    while (shapeType == POINT || shapeType == LINE) {
>> +      shapeType = randomShapeType();
>> +    }
>>      GeoAreaShape shape = null;
>>      GeoPoint point = null;
>>      while (point == null) {
>> @@ -51,7 +53,10 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>          point = randomGeoPoint(planetModel, constraints);
>>        }
>>      }
>> -    assertTrue(shape.isWithin(point));
>> +    StringBuilder b = new StringBuilder();
>> +    b.append("shape: " + shape + "\n");
>> +    b.append("point: " + point);
>> +    assertTrue(b.toString(), shape.isWithin(point));
>>    }
>>
>>    /**
>> @@ -78,7 +83,10 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>          point = randomGeoPoint(planetModel, constraints);
>>        }
>>      }
>> -    assertFalse(shape.isWithin(point));
>> +    StringBuilder b = new StringBuilder();
>> +    b.append("shape: " + shape + "\n");
>> +    b.append("point: " + point);
>> +    assertFalse(b.toString(), shape.isWithin(point));
>>    }
>>
>>    /**
>> @@ -94,7 +102,7 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>      int referenceShapeType = CONVEX_SIMPLE_POLYGON;
>>      PlanetModel planetModel = randomPlanetModel();
>>      int geoAreaShapeType = randomGeoAreaShapeType();
>> -    int shapeType =randomConvexShapeType();
>> +    int shapeType = randomConvexShapeType();
>>
>>      GeoShape shape = null;
>>      GeoAreaShape geoAreaShape = null;
>> @@ -109,11 +117,14 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>          shape = randomGeoShape(shapeType, planetModel, constraints);
>>        }
>>      }
>> +    StringBuilder b = new StringBuilder();
>> +    b.append("geoAreaShape: " + geoAreaShape + "\n");
>> +    b.append("shape: " + shape);
>>      int rel = geoAreaShape.getRelationship(shape);
>> -    assertEquals(GeoArea.DISJOINT, rel);
>> +    assertEquals(b.toString(), GeoArea.DISJOINT, rel);
>>      if (shape instanceof GeoArea) {
>>        rel = ((GeoArea)shape).getRelationship(geoAreaShape);
>> -      assertEquals(GeoArea.DISJOINT, rel);
>> +      assertEquals(b.toString(), GeoArea.DISJOINT, rel);
>>      }
>>    }
>>
>> @@ -129,7 +140,11 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>    public void testRandomWithIn() {
>>      PlanetModel planetModel = randomPlanetModel();
>>      int geoAreaShapeType = randomGeoAreaShapeType();
>> -    int shapeType =randomShapeType();
>> +    //shapes cannot be point or line -- no area!
>> +    while(geoAreaShapeType == POINT || geoAreaShapeType == LINE) {
>> +      geoAreaShapeType = randomGeoAreaShapeType();
>> +    }
>> +    int shapeType = LINE;//randomShapeType();
>>      int referenceShapeType = CONVEX_SIMPLE_POLYGON;
>>      if (!isConcave(geoAreaShapeType)){
>>        shapeType =randomConvexShapeType();
>> @@ -150,11 +165,14 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>          shape = randomGeoShape(shapeType, planetModel, constraints);
>>        }
>>      }
>> +    StringBuilder b = new StringBuilder();
>> +    b.append("geoAreaShape: " + geoAreaShape + "\n");
>> +    b.append("shape: " + shape);
>>      int rel = geoAreaShape.getRelationship(shape);
>> -    assertEquals(GeoArea.WITHIN, rel);
>> +    assertEquals(b.toString(), GeoArea.WITHIN, rel);
>>      if (shape instanceof GeoArea) {
>>        rel = ((GeoArea)shape).getRelationship(geoAreaShape);
>> -      assertEquals(GeoArea.CONTAINS, rel);
>> +      assertEquals(b.toString(), GeoArea.CONTAINS, rel);
>>      }
>>    }
>>
>> @@ -174,10 +192,13 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>      int referenceShapeType = CONVEX_SIMPLE_POLYGON;
>>      PlanetModel planetModel = randomPlanetModel();
>>      int geoAreaShapeType = randomGeoAreaShapeType();
>> -    while (geoAreaShapeType == COLLECTION){
>> +    while (geoAreaShapeType == COLLECTION ){
>>        geoAreaShapeType = randomGeoAreaShapeType();
>>      }
>>      int shapeType = randomShapeType();
>> +    while (shapeType == POINT || shapeType == LINE) {
>> +      shapeType = randomShapeType();
>> +    }
>>      if (isConcave(geoAreaShapeType)){
>>        shapeType = randomConcaveShapeType();
>>      }
>> @@ -197,11 +218,14 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>          shape = randomGeoShape(shapeType, planetModel, constraints);
>>        }
>>      }
>> +    StringBuilder b = new StringBuilder();
>> +    b.append("geoAreaShape: " + geoAreaShape + "\n");
>> +    b.append("shape: " + shape);
>>      int rel = geoAreaShape.getRelationship(shape);
>> -    assertEquals(GeoArea.CONTAINS, rel);
>> +    assertEquals(b.toString(), GeoArea.CONTAINS, rel);
>>      if (shape instanceof GeoArea) {
>>        rel = ((GeoArea)shape).getRelationship(geoAreaShape);
>> -      assertEquals(GeoArea.WITHIN, rel);
>> +      assertEquals(b.toString(), GeoArea.WITHIN, rel);
>>      }
>>    }
>>
>> @@ -216,8 +240,13 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>    public void testRandomOverlaps() {
>>      PlanetModel planetModel = randomPlanetModel();
>>      int geoAreaShapeType = randomGeoAreaShapeType();
>> +    while (geoAreaShapeType == POINT || geoAreaShapeType == LINE) {
>> +      geoAreaShapeType = randomGeoAreaShapeType();
>> +    }
>>      int shapeType = randomShapeType();
>> -
>> +    while (shapeType == POINT || shapeType == LINE) {
>> +      shapeType = randomShapeType();
>> +    }
>>      GeoShape shape = null;
>>      GeoAreaShape geoAreaShape = null;
>>      while (shape == null) {
>> @@ -246,12 +275,14 @@ public class RandomGeoShapeRelationshipTest extends
>> RandomGeoShapeGenerator {
>>          shape = randomGeoShape(shapeType, planetModel, constraints);
>>        }
>>      }
>> +    StringBuilder b = new StringBuilder();
>> +    b.append("geoAreaShape: " + geoAreaShape + "\n");
>> +    b.append("shape: " + shape);
>>      int rel = geoAreaShape.getRelationship(shape);
>> -    assertEquals(GeoArea.OVERLAPS, rel);
>> +    assertEquals(b.toString(), GeoArea.OVERLAPS, rel);
>>      if (shape instanceof GeoArea) {
>>        rel = ((GeoArea)shape).getRelationship(geoAreaShape);
>> -      assertEquals(GeoArea.OVERLAPS, rel);
>> +      assertEquals(b.toString(), GeoArea.OVERLAPS, rel);
>>      }
>>    }
>>  }
>> -
>>
>>

Reply via email to