Blame | Last modification | View Log | RSS feed
package org.hibernatespatial.jts.geom;import com.vividsolutions.jts.geom.Coordinate;import com.vividsolutions.jts.geom.CoordinateSequence;import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;import org.hibernatespatial.jts.geom.MeasuredCoordinate;import org.hibernatespatial.jts.geom.MeasuredCoordinateArraySequence;import org.hibernatespatial.jts.geom.MeasuredCoordinateSequence;import org.hibernatespatial.jts.geom.MeasuredCoordinateSequenceFactory;import org.junit.Test;import static org.junit.Assert.*;/*** @author Karel Maesen, Geovise BVBA* creation-date: Nov 22, 2010*/public class TestMeasuredCoordinateSequence {private MeasuredCoordinateSequence seq;@Testpublic void test_constructor_size() {MeasuredCoordinateSequenceFactory mcsf = new MeasuredCoordinateSequenceFactory();seq = mcsf.create(2, 4);Coordinate c0 = new Coordinate(1, 2, 3);seq.setMeasuredCoordinate(0, new MeasuredCoordinate(c0, 4));Coordinate c1 = new Coordinate(5, 6, 7);seq.setMeasuredCoordinate(1, new MeasuredCoordinate(c1, 8));assertEquals(c0, seq.getCoordinate(0));assertEquals(4d, seq.getM(0), Math.ulp(4d));assertEquals(c1, seq.getCoordinate(1));assertEquals(8d, seq.getM(1), Math.ulp(8d));try {seq.setMeasuredCoordinate(2, new MeasuredCoordinate(c1, 8));fail();} catch (ArrayIndexOutOfBoundsException e) {}}@Testpublic void test_constructor_coordinate_array() {Coordinate[] coordinates = new Coordinate[]{new Coordinate(1, 1),new Coordinate(2, 3),new Coordinate(4, 5)};seq = new MeasuredCoordinateArraySequence(coordinates);assertEquals(coordinates.length, seq.size());assertEquals(4, seq.getDimension());assertEquals(4, seq.getOrdinate(2, CoordinateSequence.X), Math.ulp(4f));assertEquals(5, seq.getOrdinate(2, CoordinateSequence.Y), Math.ulp(5f));assertEquals(Double.NaN, seq.getOrdinate(2, CoordinateSequence.M), 0.1f);//test null parameterseq = new MeasuredCoordinateArraySequence((Coordinate[])null);assertEquals(0, seq.size());}@Testpublic void test_constructor_coordinateseq() {CoordinateSequence s = new CoordinateArraySequence(10);seq = new MeasuredCoordinateArraySequence(s);assertEquals(10, seq.size());MeasuredCoordinateSequence ms = new MeasuredCoordinateArraySequence(3);ms.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(1, 2, 1));ms.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(3, 4, 2));ms.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(5, 6, 3));seq = new MeasuredCoordinateArraySequence((CoordinateSequence) ms);assertEquals(1, seq.getOrdinate(0, CoordinateSequence.X), Math.ulp(10));assertEquals(2, seq.getOrdinate(0, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(0, CoordinateSequence.Z)));assertEquals(1, seq.getOrdinate(0, CoordinateSequence.M), Math.ulp(10));assertEquals(3, seq.getOrdinate(1, CoordinateSequence.X), Math.ulp(10));assertEquals(4, seq.getOrdinate(1, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(1, CoordinateSequence.Z)));assertEquals(2, seq.getOrdinate(1, CoordinateSequence.M), Math.ulp(10));assertEquals(5, seq.getOrdinate(2, CoordinateSequence.X), Math.ulp(10));assertEquals(6, seq.getOrdinate(2, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(2, CoordinateSequence.Z)));assertEquals(3, seq.getOrdinate(2, CoordinateSequence.M), Math.ulp(10));//test null paramaterseq = new MeasuredCoordinateArraySequence((CoordinateSequence)null);assertEquals(0, seq.size());}@Testpublic void test_constructor_coordinateseq_doubles() {CoordinateSequence s = new CoordinateArraySequence(10);double[] measures = new double[10];seq = new MeasuredCoordinateArraySequence(s, measures);assertEquals(10, seq.size());try {double[] m2 = new double[8];seq = new MeasuredCoordinateArraySequence(s, m2);fail();} catch (IllegalArgumentException e) {}seq = new MeasuredCoordinateArraySequence((CoordinateSequence) null, null);assertEquals(0, seq.size());//test null paramaterseq = new MeasuredCoordinateArraySequence((CoordinateSequence)null, null);assertEquals(0, seq.size());}@Testpublic void test_constructor_coordinates_doubles() {Coordinate[] s = new Coordinate[10];double[] measures = new double[10];seq = new MeasuredCoordinateArraySequence(s, measures);assertEquals(10, seq.size());try {double[] m2 = new double[8];seq = new MeasuredCoordinateArraySequence(s, m2);fail();} catch (IllegalArgumentException e) {}seq = new MeasuredCoordinateArraySequence((Coordinate[]) null, null);assertEquals(0, seq.size());}@Testpublic void test_constructor_measurecoordinateseq() {MeasuredCoordinateSequence ms = new MeasuredCoordinateArraySequence(3);ms.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(1, 2, 1));ms.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(3, 4, 2));ms.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(5, 6, 3));seq = new MeasuredCoordinateArraySequence(ms);assertEquals(1, seq.getOrdinate(0, CoordinateSequence.X), Math.ulp(10));assertEquals(2, seq.getOrdinate(0, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(0, CoordinateSequence.Z)));assertEquals(1, seq.getOrdinate(0, CoordinateSequence.M), Math.ulp(10));assertEquals(3, seq.getOrdinate(1, CoordinateSequence.X), Math.ulp(10));assertEquals(4, seq.getOrdinate(1, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(1, CoordinateSequence.Z)));assertEquals(2, seq.getOrdinate(1, CoordinateSequence.M), Math.ulp(10));assertEquals(5, seq.getOrdinate(2, CoordinateSequence.X), Math.ulp(10));assertEquals(6, seq.getOrdinate(2, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(2, CoordinateSequence.Z)));assertEquals(3, seq.getOrdinate(2, CoordinateSequence.M), Math.ulp(10));seq = new MeasuredCoordinateArraySequence((MeasuredCoordinateSequence) null);assertEquals(0, seq.size());}@Testpublic void test_constructor_measurecoordinates() {MeasuredCoordinate[] ms = new MeasuredCoordinate[3];ms[0] = MeasuredCoordinate.to2DM(1, 2, 1);ms[1] = MeasuredCoordinate.to2DM(3, 4, 2);ms[2] = MeasuredCoordinate.to2DM(5, 6, 3);seq = new MeasuredCoordinateArraySequence(ms);assertEquals(1, seq.getOrdinate(0, CoordinateSequence.X), Math.ulp(10));assertEquals(2, seq.getOrdinate(0, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(0, CoordinateSequence.Z)));assertEquals(1, seq.getOrdinate(0, CoordinateSequence.M), Math.ulp(10));assertEquals(3, seq.getOrdinate(1, CoordinateSequence.X), Math.ulp(10));assertEquals(4, seq.getOrdinate(1, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(1, CoordinateSequence.Z)));assertEquals(2, seq.getOrdinate(1, CoordinateSequence.M), Math.ulp(10));assertEquals(5, seq.getOrdinate(2, CoordinateSequence.X), Math.ulp(10));assertEquals(6, seq.getOrdinate(2, CoordinateSequence.Y), Math.ulp(10));assertTrue(Double.isNaN(seq.getOrdinate(2, CoordinateSequence.Z)));assertEquals(3, seq.getOrdinate(2, CoordinateSequence.M), Math.ulp(10));seq = new MeasuredCoordinateArraySequence((MeasuredCoordinate[]) null);assertEquals(0, seq.size());}@Testpublic void test_can_set_m_ordinates() {seq = new MeasuredCoordinateArraySequence(2);seq.setOrdinate(0, CoordinateSequence.X, 0);seq.setOrdinate(0, CoordinateSequence.Y, 1);seq.setOrdinate(0, CoordinateSequence.Z, 2);seq.setOrdinate(0, CoordinateSequence.M, 3);for (int i = 0; i < seq.getDimension(); i++) {assertEquals(i, seq.getOrdinate(0, i), Math.ulp(10));}}@Testpublic void test_if_on_create_m_ordinates_are_NaN() {seq = new MeasuredCoordinateArraySequence(2);seq.setOrdinate(0, CoordinateSequence.X, 0);seq.setOrdinate(0, CoordinateSequence.Y, 1);seq.setOrdinate(0, CoordinateSequence.Z, 2);assertTrue(Double.isNaN(seq.getOrdinate(0, CoordinateSequence.M)));assertTrue(Double.isNaN(seq.getM(0)));}@Testpublic void test_get_m() {seq = new MeasuredCoordinateArraySequence(2);seq.setOrdinate(0, CoordinateSequence.X, 0);seq.setOrdinate(0, CoordinateSequence.Y, 1);seq.setOrdinate(0, CoordinateSequence.Z, 2);seq.setOrdinate(0, CoordinateSequence.M, 3);assertEquals(0, seq.getX(0), Math.ulp(10d));assertEquals(1, seq.getY(0), Math.ulp(10d));assertEquals(2, seq.getZ(0), Math.ulp(10d));assertEquals(3, seq.getM(0), Math.ulp(10d));}@Testpublic void test_setCoordinateAndM() {seq = new MeasuredCoordinateArraySequence(2);seq.setMeasuredCoordinate(0, MeasuredCoordinate.to3DM(0, 1, 2, 3));for (int i = 0; i < seq.getDimension(); i++) {assertEquals(i, seq.getOrdinate(0, i), Math.ulp(10d));}}@Testpublic void test_test_copy_measured_coordinate_index_coordinate(){seq = new MeasuredCoordinateArraySequence(4);seq.setMeasuredCoordinate(2, MeasuredCoordinate.to3DM(0, 1, 2, 3));MeasuredCoordinate mCoordinate = new MeasuredCoordinate();seq.getMeasuredCoordinate(0, mCoordinate);assertEquals(0, mCoordinate.getX(), Math.ulp(10d));assertEquals(0, mCoordinate.getY(), Math.ulp(10d));assertEquals(Double.NaN, mCoordinate.getZ(), Math.ulp(10d));assertEquals(Double.NaN, mCoordinate.getM(), Math.ulp(10d));seq.getMeasuredCoordinate(2, mCoordinate);assertEquals(0, mCoordinate.getX(), Math.ulp(10d));assertEquals(1, mCoordinate.getY(), Math.ulp(10d));assertEquals(2, mCoordinate.getZ(), Math.ulp(10d));assertEquals(3, mCoordinate.getM(), Math.ulp(10d));seq.setMeasuredCoordinate(1, MeasuredCoordinate.to2D(0, 1));seq.getMeasuredCoordinate(1, mCoordinate);assertEquals(0, mCoordinate.getX(), Math.ulp(10d));assertEquals(1, mCoordinate.getY(), Math.ulp(10d));assertEquals(Double.NaN, mCoordinate.getZ(), Math.ulp(10d));assertEquals(Double.NaN, mCoordinate.getM(), Math.ulp(10d));seq.setMeasuredCoordinate(3, MeasuredCoordinate.to2DM(0, 1, 2));seq.getMeasuredCoordinate(3, mCoordinate);assertEquals(0, mCoordinate.getX(), Math.ulp(10d));assertEquals(1, mCoordinate.getY(), Math.ulp(10d));assertEquals(Double.NaN, mCoordinate.getZ(), Math.ulp(10d));assertEquals(2, mCoordinate.getM(), Math.ulp(10d));}@Testpublic void test_clone() {seq = new MeasuredCoordinateArraySequence(2);MeasuredCoordinate mc0 = MeasuredCoordinate.to3DM(0, 1, 2, 3);MeasuredCoordinate mc1 = MeasuredCoordinate.to3DM(4, 5, 6, 7);seq.setMeasuredCoordinate(0, mc0);seq.setMeasuredCoordinate(1, mc1);MeasuredCoordinateArraySequence cloned = (MeasuredCoordinateArraySequence) seq.clone();//check that clone has same values as originalassertTrue(mc0.equals3DWithMeasure(cloned.getMeasuredCoordinate(0)));assertTrue(mc1.equals3DWithMeasure(cloned.getMeasuredCoordinate(1)));//check independencecloned.setOrdinate(0, CoordinateSequence.M, 10);cloned.setOrdinate(1, CoordinateSequence.M, 11);//check that clone has same values as originalassertEquals(3, seq.getOrdinate(0, CoordinateSequence.M), Math.ulp(10d));assertEquals(7, seq.getOrdinate(1, CoordinateSequence.M), Math.ulp(10d));assertFalse(mc0.equals3DWithMeasure(cloned.getMeasuredCoordinate(0)));assertFalse(mc1.equals3DWithMeasure(cloned.getMeasuredCoordinate(1)));}}