@Test
 public void testRectangle() throws IOException {
   Shape s = read("-10 -20 10 20");
   assertEquals(ctx.makeRectangle(-10, 10, -20, 20), s);
   assertEquals(s, writeThenRead(s));
   assertTrue(s.hasArea());
 }
 @Test
 public void testCircle() throws IOException {
   Shape s = read("Circle(1.23 4.56 distance=7.89)");
   assertEquals(ctx.makeCircle(1.23, 4.56, 7.89), s);
   assertEquals(s, writeThenRead(s));
   assertEquals(s, read("CIRCLE( 4.56,1.23 d=7.89 )")); // use lat,lon and use 'd' abbreviation
   assertTrue(s.hasArea());
 }
 @Test
 public void testPoint() throws IOException {
   Shape s = read("10 20");
   assertEquals(ctx.makePoint(10, 20), s);
   assertEquals(s, writeThenRead(s));
   assertEquals(s, read("20,10")); // check comma for y,x format
   assertEquals(s, read("20, 10")); // test space
   assertFalse(s.hasArea());
 }