: 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).

"-a" is not designed/intended to pick up new files -- as documented...

  -a, --all
      Tell the command to automatically stage files that have been 
      modified and deleted, but new files you have not told Git about
      are not affected.



: On Mon, Sep 11, 2017 at 9:40 AM, Adrien Grand <jpou...@gmail.com> wrote:
: 
: > Karl, did you forget to git add RandomGeo3dShapeGenerator?
: >
: > Le lun. 11 sept. 2017 à 15:01, <kwri...@apache.org> 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 <daddy...@gmail.com>
: >> Authored: Mon Sep 11 09:00:47 2017 -0400
: >> Committer: Karl Wright <daddy...@gmail.com>
: >> 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);
: >>      }
: >>    }
: >>  }
: >> -
: >>
: >>
: 

-Hoss
http://www.lucidworks.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to