Bläddra i källkod

AMBARI-5922. Predicates don't work on fields with float values. (swagle)

Siddharth Wagle 11 år sedan
förälder
incheckning
9099842a0e

+ 3 - 3
ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java

@@ -77,10 +77,10 @@ public abstract class ComparisonPredicate<T> extends PropertyPredicate implement
   }
 
   protected int compareValueTo(Object propertyValue) throws ClassCastException{
-
     if (doubleValue != null) {
-      if (propertyValue instanceof Number ) {
-        return (int) (doubleValue - ((Number) propertyValue).doubleValue());
+      if (propertyValue instanceof Number) {
+
+        return doubleValue.compareTo(((Number) propertyValue).doubleValue());
       }
       else if (propertyValue instanceof String) {
         Double doubleFromString = stringToDouble((String) propertyValue);

+ 16 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/predicate/GreaterPredicateTest.java

@@ -67,4 +67,20 @@ public class GreaterPredicateTest {
     Assert.assertEquals(1, ids.size());
     Assert.assertTrue(ids.contains(propertyId));
   }
+
+  @Test
+  public void testApplyWithSmallFloats() {
+    Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+    String propertyId = PropertyHelper.getPropertyId("category1", "foo");
+    Predicate predicate = new GreaterPredicate<Double>(propertyId, 0.1);
+
+    resource.setProperty(propertyId, 1.3);
+    Assert.assertTrue(predicate.evaluate(resource));
+
+    resource.setProperty(propertyId, 0.06);
+    Assert.assertFalse(predicate.evaluate(resource));
+
+    resource.setProperty(propertyId, 100.3);
+    Assert.assertTrue(predicate.evaluate(resource));
+  }
 }