Author: mbenson
Date: Wed Jul 11 09:44:01 2007
New Revision: 555334
URL: http://svn.apache.org/viewvc?view=rev&rev=555334
Log:
[JXPATH-95] fix NaN comparisons
Modified:
jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/CoreOperationRelationalExpression.java
jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/CoreOperationTest.java
Modified:
jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/CoreOperationRelationalExpression.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/CoreOperationRelationalExpression.java?view=diff&rev=555334&r1=555333&r2=555334
==============================================================================
---
jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/CoreOperationRelationalExpression.java
(original)
+++
jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/CoreOperationRelationalExpression.java
Wed Jul 11 09:44:01 2007
@@ -72,7 +72,15 @@
if (right instanceof Iterator) {
return containsMatch((Iterator) right, left);
}
- return evaluateCompare(compare(left, right));
+ double ld = InfoSetUtil.doubleValue(left);
+ if (Double.isNaN(ld)) {
+ return false;
+ }
+ double rd = InfoSetUtil.doubleValue(right);
+ if (Double.isNaN(rd)) {
+ return false;
+ }
+ return evaluateCompare(ld == rd ? 0 : ld < rd ? -1 : 1);
}
private Object reduce(Object o) {
@@ -88,7 +96,7 @@
private boolean containsMatch(Iterator it, Object value) {
while (it.hasNext()) {
Object element = it.next();
- if (evaluateCompare(compare(element, value))) {
+ if (compute(element, value)) {
return true;
}
}
@@ -106,12 +114,6 @@
}
}
return false;
- }
-
- private int compare(Object l, Object r) {
- double ld = InfoSetUtil.doubleValue(l);
- double rd = InfoSetUtil.doubleValue(r);
- return ld == rd ? 0 : ld < rd ? -1 : 1;
}
}
Modified:
jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/CoreOperationTest.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/CoreOperationTest.java?view=diff&rev=555334&r1=555333&r2=555334
==============================================================================
---
jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/CoreOperationTest.java
(original)
+++
jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/CoreOperationTest.java
Wed Jul 11 09:44:01 2007
@@ -46,6 +46,7 @@
Variables vars = context.getVariables();
vars.declareVariable("integer", new Integer(1));
vars.declareVariable("array", new double[] { 0.25, 0.5, 0.75 });
+ vars.declareVariable("nan", new Double(Double.NaN));
}
}
@@ -109,5 +110,17 @@
assertXPathValue(context, "$array = 1", Boolean.FALSE, Boolean.class);
assertXPathValue(context, "$array > 1", Boolean.FALSE, Boolean.class);
assertXPathValue(context, "$array < 0", Boolean.FALSE, Boolean.class);
+ }
+
+ public void testNan() {
+ assertXPathValue(context, "$nan > $nan", Boolean.FALSE, Boolean.class);
+ assertXPathValue(context, "$nan < $nan", Boolean.FALSE, Boolean.class);
+ assertXPathValue(context, "$nan = $nan", Boolean.TRUE, Boolean.class);
+ assertXPathValue(context, "$nan > 0", Boolean.FALSE, Boolean.class);
+ assertXPathValue(context, "$nan < 0", Boolean.FALSE, Boolean.class);
+ assertXPathValue(context, "$nan = 0", Boolean.FALSE, Boolean.class);
+ assertXPathValue(context, "$nan > 1", Boolean.FALSE, Boolean.class);
+ assertXPathValue(context, "$nan < 1", Boolean.FALSE, Boolean.class);
+ assertXPathValue(context, "$nan = 1", Boolean.FALSE, Boolean.class);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]