@Test
  public void testRequiredAndExtractedAttributeNames() {
    ContourCenterOfGravityFeatureExtractor ccogfe =
        new ContourCenterOfGravityFeatureExtractor("attr");

    assertTrue(ccogfe.getRequiredFeatures().contains("attr"));
    assertTrue(ccogfe.getExtractedFeatures().contains("cog[attr]"));
  }
  @Test
  public void testExtractFeaturesGeneratesNoFeatureWithNullFeature() {
    ContourCenterOfGravityFeatureExtractor ccogfe =
        new ContourCenterOfGravityFeatureExtractor("attr");

    List<Region> regions = new ArrayList<Region>();
    Region r = new Region(0.0, 0.0, "test");
    regions.add(r);

    try {
      ccogfe.extractFeatures(regions);
      assertFalse(r.hasAttribute("attr__cog"));
    } catch (FeatureExtractorException e) {
      fail();
    }
  }
  @Test
  public void testExtractFeaturesExtractsFeatures() {
    ContourCenterOfGravityFeatureExtractor ccogfe =
        new ContourCenterOfGravityFeatureExtractor("attr");

    List<Region> regions = new ArrayList<Region>();
    Region r = new Region(0.0, 1.0, "test");
    regions.add(r);

    r.setAttribute("attr", new Contour(0, .1, new double[] {0.0, 0.0, 1.0, 2.0}));

    try {
      ccogfe.extractFeatures(regions);
      assertTrue(r.hasAttribute("cog[attr]"));
    } catch (FeatureExtractorException e) {
      fail();
    }
  }
  @Test
  public void testExtractFeaturesCorrectlyExtractsFeatures() {
    ContourCenterOfGravityFeatureExtractor ccogfe =
        new ContourCenterOfGravityFeatureExtractor("attr");

    List<Region> regions = new ArrayList<Region>();
    Region r = new Region(0.0, 3.0, "test");
    regions.add(r);

    r.setAttribute("attr", new Contour(0, 1, new double[] {0.0, 0.0, 1.0, 2.0}));

    try {
      ccogfe.extractFeatures(regions);
      assertEquals(0.88888, (Double) r.getAttribute("cog[attr]"), 0.00001);
    } catch (FeatureExtractorException e) {
      fail();
    }
  }