1 /* 2 * Copyright (c) 2016 Vivid Solutions. 3 * 4 * All rights reserved. This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * and Eclipse Distribution License v. 1.0 which accompanies this distribution. 7 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v20.html 8 * and the Eclipse Distribution License is available at 9 * 10 * http://www.eclipse.org/org/documents/edl-v10.php. 11 */ 12 13 package org.locationtech.jts.geom; 14 15 import junit.framework.TestCase; 16 import junit.textui.TestRunner; 17 18 public class CoordinateTest extends TestCase 19 { CoordinateTest(String name)20 public CoordinateTest(String name) 21 { 22 super(name); 23 } 24 main(String args[])25 public static void main(String args[]) { 26 TestRunner.run(CoordinateTest.class); 27 } 28 testConstructor3D()29 public void testConstructor3D() 30 { 31 Coordinate c = new Coordinate(350.2, 4566.8, 5266.3); 32 assertEquals(c.x, 350.2); 33 assertEquals(c.y, 4566.8); 34 assertEquals(c.getZ(), 5266.3); 35 } 36 testConstructor2D()37 public void testConstructor2D() 38 { 39 Coordinate c = new Coordinate(350.2, 4566.8); 40 assertEquals(c.x, 350.2); 41 assertEquals(c.y, 4566.8); 42 assertEquals(c.getZ(), Coordinate.NULL_ORDINATE); 43 } testDefaultConstructor()44 public void testDefaultConstructor() 45 { 46 Coordinate c = new Coordinate(); 47 assertEquals(c.x, 0.0); 48 assertEquals(c.y, 0.0); 49 assertEquals(c.getZ(), Coordinate.NULL_ORDINATE); 50 } testCopyConstructor3D()51 public void testCopyConstructor3D() 52 { 53 Coordinate orig = new Coordinate(350.2, 4566.8, 5266.3); 54 Coordinate c = new Coordinate(orig); 55 assertEquals(c.x, 350.2); 56 assertEquals(c.y, 4566.8); 57 assertEquals(c.getZ(), 5266.3); 58 } testSetCoordinate()59 public void testSetCoordinate() 60 { 61 Coordinate orig = new Coordinate(350.2, 4566.8, 5266.3); 62 Coordinate c = new Coordinate(); 63 c.setCoordinate(orig); 64 assertEquals(c.x, 350.2); 65 assertEquals(c.y, 4566.8); 66 assertEquals(c.getZ(), 5266.3); 67 } testGetOrdinate()68 public void testGetOrdinate() 69 { 70 Coordinate c = new Coordinate(350.2, 4566.8, 5266.3); 71 assertEquals(c.getOrdinate(Coordinate.X), 350.2); 72 assertEquals(c.getOrdinate(Coordinate.Y), 4566.8); 73 assertEquals(c.getOrdinate(Coordinate.Z), 5266.3); 74 } testSetOrdinate()75 public void testSetOrdinate() 76 { 77 Coordinate c = new Coordinate(); 78 c.setOrdinate(Coordinate.X, 111); 79 c.setOrdinate(Coordinate.Y, 222); 80 c.setOrdinate(Coordinate.Z, 333); 81 assertEquals(c.getOrdinate(Coordinate.X), 111.0); 82 assertEquals(c.getOrdinate(Coordinate.Y), 222.0); 83 assertEquals(c.getOrdinate(Coordinate.Z), 333.0); 84 } testEquals()85 public void testEquals() 86 { 87 Coordinate c1 = new Coordinate(1,2,3); 88 String s = "Not a coordinate"; 89 assertTrue(! c1.equals(s)); 90 91 Coordinate c2 = new Coordinate(1,2,3); 92 assertTrue(c1.equals2D(c2)); 93 94 Coordinate c3 = new Coordinate(1,22,3); 95 assertTrue(! c1.equals2D(c3)); 96 } testEquals2D()97 public void testEquals2D() 98 { 99 Coordinate c1 = new Coordinate(1,2,3); 100 Coordinate c2 = new Coordinate(1,2,3); 101 assertTrue(c1.equals2D(c2)); 102 103 Coordinate c3 = new Coordinate(1,22,3); 104 assertTrue(! c1.equals2D(c3)); 105 } testEquals3D()106 public void testEquals3D() 107 { 108 Coordinate c1 = new Coordinate(1,2,3); 109 Coordinate c2 = new Coordinate(1,2,3); 110 assertTrue(c1.equals3D(c2)); 111 112 Coordinate c3 = new Coordinate(1,22,3); 113 assertTrue(! c1.equals3D(c3)); 114 } testEquals2DWithinTolerance()115 public void testEquals2DWithinTolerance() 116 { 117 Coordinate c = new Coordinate(100.0, 200.0, 50.0); 118 Coordinate aBitOff = new Coordinate(100.1, 200.1, 50.0); 119 assertTrue(c.equals2D(aBitOff, 0.2)); 120 } 121 testEqualsInZ()122 public void testEqualsInZ() { 123 124 Coordinate c = new Coordinate(100.0, 200.0, 50.0); 125 Coordinate withSameZ = new Coordinate(100.1, 200.1, 50.1); 126 assertTrue(c.equalInZ(withSameZ, 0.2)); 127 } 128 testCompareTo()129 public void testCompareTo() 130 { 131 Coordinate lowest = new Coordinate(10.0, 100.0, 50.0); 132 Coordinate highest = new Coordinate(20.0, 100.0, 50.0); 133 Coordinate equalToHighest = new Coordinate(20.0, 100.0, 50.0); 134 Coordinate higherStill = new Coordinate(20.0, 200.0, 50.0); 135 136 assertEquals(-1, lowest.compareTo(highest)); 137 assertEquals(1, highest.compareTo(lowest)); 138 assertEquals(-1, highest.compareTo(higherStill)); 139 assertEquals(0, highest.compareTo(equalToHighest)); 140 } testToString()141 public void testToString() 142 { 143 String expectedResult = "(100.0, 200.0, 50.0)"; 144 String actualResult = new Coordinate(100.0, 200.0, 50.0).toString(); 145 assertEquals(expectedResult, actualResult); 146 } 147 testClone()148 public void testClone() { 149 Coordinate c = new Coordinate(100.0, 200.0, 50.0); 150 Coordinate clone = (Coordinate) c.clone(); 151 assertTrue(c.equals3D(clone)); 152 } 153 testDistance()154 public void testDistance() { 155 Coordinate coord1 = new Coordinate(0.0, 0.0, 0.0); 156 Coordinate coord2 = new Coordinate(100.0, 200.0, 50.0); 157 double distance = coord1.distance(coord2); 158 assertEquals(distance, 223.60679774997897, 0.00001); 159 } testDistance3D()160 public void testDistance3D() { 161 Coordinate coord1 = new Coordinate(0.0, 0.0, 0.0); 162 Coordinate coord2 = new Coordinate(100.0, 200.0, 50.0); 163 double distance = coord1.distance3D(coord2); 164 assertEquals(distance, 229.128784747792, 0.000001); 165 } testCoordinateXY()166 public void testCoordinateXY() { 167 Coordinate xy = new CoordinateXY(); 168 checkZUnsupported(xy); 169 checkMUnsupported(xy); 170 171 xy = new CoordinateXY(1.0,1.0); // 2D 172 Coordinate coord = new Coordinate(xy); // copy 173 assertEquals( xy, coord ); 174 assertTrue( !xy.equalInZ(coord,0.000001) ); 175 176 coord = new Coordinate(1.0,1.0,1.0); // 2.5d 177 xy = new CoordinateXY( coord ); // copy 178 assertEquals( xy, coord ); 179 assertTrue( !xy.equalInZ(coord,0.000001) ); 180 } testCoordinateXYM()181 public void testCoordinateXYM() { 182 Coordinate xym = new CoordinateXYM(); 183 checkZUnsupported(xym); 184 185 xym.setM(1.0); 186 assertEquals( 1.0, xym.getM()); 187 188 Coordinate coord = new Coordinate(xym); // copy 189 assertEquals( xym, coord ); 190 assertTrue( !xym.equalInZ(coord,0.000001) ); 191 192 coord = new Coordinate(1.0,1.0,1.0); // 2.5d 193 xym = new CoordinateXYM( coord ); // copy 194 assertEquals( xym, coord ); 195 assertTrue( !xym.equalInZ(coord,0.000001) ); 196 } testCoordinateXYZM()197 public void testCoordinateXYZM() { 198 Coordinate xyzm = new CoordinateXYZM(); 199 xyzm.setZ(1.0); 200 assertEquals( 1.0, xyzm.getZ()); 201 xyzm.setM(1.0); 202 assertEquals( 1.0, xyzm.getM()); 203 204 Coordinate coord = new Coordinate(xyzm); // copy 205 assertEquals( xyzm, coord ); 206 assertTrue( xyzm.equalInZ(coord,0.000001) ); 207 assertTrue( Double.isNaN(coord.getM())); 208 209 coord = new Coordinate(1.0,1.0,1.0); // 2.5d 210 xyzm = new CoordinateXYZM( coord ); // copy 211 assertEquals( xyzm, coord ); 212 assertTrue( xyzm.equalInZ(coord,0.000001) ); 213 } 214 testCoordinateHash()215 public void testCoordinateHash() { 216 doTestCoordinateHash(true, new Coordinate(1, 2), new Coordinate(1, 2)); 217 doTestCoordinateHash(false, new Coordinate(1, 2), new Coordinate(3, 4)); 218 doTestCoordinateHash(false, new Coordinate(1, 2), new Coordinate(1, 4)); 219 doTestCoordinateHash(false, new Coordinate(1, 2), new Coordinate(3, 2)); 220 doTestCoordinateHash(false, new Coordinate(1, 2), new Coordinate(2, 1)); 221 } 222 doTestCoordinateHash(boolean equal, Coordinate a, Coordinate b)223 private void doTestCoordinateHash(boolean equal, Coordinate a, Coordinate b) { 224 assertEquals(equal, a.equals(b)); 225 assertEquals(equal, a.hashCode() == b.hashCode()); 226 } 227 228 /** 229 * Confirm the z field is not supported by getZ and setZ. 230 */ checkZUnsupported(Coordinate coord )231 private void checkZUnsupported(Coordinate coord ) 232 { 233 try { 234 coord.setZ(0.0); 235 fail(coord.getClass().getSimpleName() + " does not support Z"); 236 } 237 catch(IllegalArgumentException expected) { 238 } 239 assertTrue( Double.isNaN(coord.z)); 240 coord.z = 0.0; // field still public 241 assertTrue( "z field not used", Double.isNaN(coord.getZ())); // but not used 242 } 243 /** 244 * Confirm the z field is not supported by getZ and setZ. 245 */ checkMUnsupported(Coordinate coord )246 private void checkMUnsupported(Coordinate coord ) 247 { 248 try { 249 coord.setM(0.0); 250 fail(coord.getClass().getSimpleName() + " does not support M"); 251 } 252 catch(IllegalArgumentException expected) { 253 } 254 assertTrue( Double.isNaN(coord.getM())); 255 } 256 257 } 258