AMBARI-5922. Predicates don't work on fields with float values. (swagle)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9099842a Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9099842a Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9099842a Branch: refs/heads/trunk Commit: 9099842a0e010402d07f542cf5b964d364d7ae85 Parents: ebe04d4 Author: Siddharth Wagle <[email protected]> Authored: Wed May 28 17:59:00 2014 -0700 Committer: Siddharth Wagle <[email protected]> Committed: Wed May 28 18:46:25 2014 -0700 ---------------------------------------------------------------------- .../controller/predicate/ComparisonPredicate.java | 6 +++--- .../controller/predicate/GreaterPredicateTest.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/9099842a/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java index e8102d6..de429e8 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/ComparisonPredicate.java +++ b/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); http://git-wip-us.apache.org/repos/asf/ambari/blob/9099842a/ambari-server/src/test/java/org/apache/ambari/server/controller/predicate/GreaterPredicateTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/predicate/GreaterPredicateTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/predicate/GreaterPredicateTest.java index af79eff..47fcaae 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/predicate/GreaterPredicateTest.java +++ b/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)); + } }
