package com.revolsys.geometry.test.old.perf.geom.prep; import com.revolsys.geometry.model.Geometry; import com.revolsys.geometry.model.GeometryFactory; import com.revolsys.geometry.model.Point; import com.revolsys.geometry.model.impl.PointDoubleXY; import com.revolsys.geometry.model.util.SineStarFactory; import com.revolsys.geometry.test.old.perf.ThreadTestCase; import com.revolsys.geometry.test.old.perf.ThreadTestRunner; /** * Tests for race conditons in the Geometry classes. * * @author Martin Davis * */ public class PreparedGeometryThreadSafeTest extends ThreadTestCase { public static void main(final String[] args) { ThreadTestRunner.run(new PreparedGeometryThreadSafeTest()); } GeometryFactory factory = GeometryFactory.fixed(0, 1.0); protected Geometry g; int nPts = 1000; protected Geometry pg; public PreparedGeometryThreadSafeTest() { } @Override public Runnable getRunnable(final int threadIndex) { return new Runnable() { @Override public void run() { while (true) { // System.out.println(threadIndex); PreparedGeometryThreadSafeTest.this.pg.intersects(PreparedGeometryThreadSafeTest.this.g); } } }; } Geometry newSineStar(final Point origin, final double size, final int nPts) { final SineStarFactory gsf = new SineStarFactory(this.factory); gsf.setCentre(origin); gsf.setSize(size); gsf.setNumPoints(nPts); gsf.setArmLengthRatio(0.1); gsf.setNumArms(20); final Geometry poly = gsf.newSineStar(); return poly; } @Override public void setup() { final Geometry sinePoly = newSineStar(new PointDoubleXY(0, 0), 100000.0, this.nPts); this.pg = sinePoly.prepare(); this.g = newSineStar(new PointDoubleXY(10, 10), 100000.0, 100); } }