@Test
 public void testEmptyFeatureVector() {
   Config config = ConfigFactory.parseString(makeConfig());
   Transform transform = TransformFactory.createTransform(config, "test_cut");
   FeatureVector featureVector = new FeatureVector();
   transform.doTransform(featureVector);
   assertTrue(featureVector.getStringFeatures() == null);
 }
 @Override
 public void configure(Config config, String key) {
   transforms = new ArrayList<>();
   List<String> transformKeys = config.getStringList(key + ".transforms");
   for (String transformKey : transformKeys) {
     Transform tmpTransform = TransformFactory.createTransform(config, transformKey);
     if (tmpTransform != null) {
       transforms.add(tmpTransform);
     }
   }
 }
  @Test
  public void testTransformLowerBoundOnly() {
    Config config = ConfigFactory.parseString(makeConfigWithLowerBoundOnly());
    Transform transform = TransformFactory.createTransform(config, "test_cut");
    FeatureVector featureVector = TransformTestingHelper.makeFeatureVector();
    transform.doTransform(featureVector);
    Map<String, Set<String>> stringFeatures = featureVector.getStringFeatures();
    assertTrue(stringFeatures.size() == 1);

    Map<String, Double> feat1 = featureVector.getFloatFeatures().get("loc");

    assertEquals(2, feat1.size());
    assertEquals(37.7, feat1.get("lat"), 0.1);
    assertEquals(40.0, feat1.get("long"), 0.1);
    assertNull(feat1.get("z"));
  }
  @Test
  public void testTransformWithNewOutput() {
    Config config = ConfigFactory.parseString(makeConfigWithOutput());
    Transform transform = TransformFactory.createTransform(config, "test_cut");
    FeatureVector featureVector = TransformTestingHelper.makeFeatureVector();
    transform.doTransform(featureVector);
    Map<String, Set<String>> stringFeatures = featureVector.getStringFeatures();
    assertTrue(stringFeatures.size() == 1);
    // original feature should not change
    Map<String, Double> feat1 = featureVector.getFloatFeatures().get("loc");
    assertEquals(3, feat1.size());
    assertEquals(37.7, feat1.get("lat"), 0.1);
    assertEquals(40.0, feat1.get("long"), 0.1);
    assertEquals(-20, feat1.get("z"), 0.1);

    // capped features are in a new feature family
    assertTrue(featureVector.getFloatFeatures().containsKey("new_output"));
    Map<String, Double> feat2 = featureVector.getFloatFeatures().get("new_output");
    assertEquals(1, feat2.size());
    assertEquals(37.7, feat2.get("lat"), 0.1);
    assertNull(feat2.get("long"));
    assertNull(feat2.get("z"));
  }