You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by di...@apache.org on 2006/03/21 08:34:40 UTC
svn commit: r387452 - in /jakarta/commons/proper/jexl/trunk:
src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java
src/test/org/apache/commons/jexl/BitwiseOperatorTest.java xdocs/changes.xml
Author: dion
Date: Mon Mar 20 23:34:40 2006
New Revision: 387452
URL: http://svn.apache.org/viewcvs?rev=387452&view=rev
Log:
Basic Implementation of bitwise xor
Modified:
jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java
jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java
jakarta/commons/proper/jexl/trunk/xdocs/changes.xml
Modified: jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java?rev=387452&r1=387451&r2=387452&view=diff
==============================================================================
--- jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java (original)
+++ jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java Mon Mar 20 23:34:40 2006
@@ -2,6 +2,16 @@
package org.apache.commons.jexl.parser;
+import org.apache.commons.jexl.JexlContext;
+import org.apache.commons.jexl.util.Coercion;
+
+/**
+ * Bitwise Or. Syntax:
+ * a ^ b
+ * Result is a Long
+ * @author Dion Gillard
+ * @since 1.0.1
+ */
public class ASTBitwiseXorNode extends SimpleNode {
public ASTBitwiseXorNode(int id) {
super(id);
@@ -15,5 +25,17 @@
/** Accept the visitor. **/
public Object jjtAccept(ParserVisitor visitor, Object data) {
return visitor.visit(this, data);
+ }
+ /**
+ * @return a {@link Long} which is the bitwise xor of the two operands.
+ */
+ public Object value(JexlContext context) throws Exception
+ {
+ Object left = ((SimpleNode) jjtGetChild(0)).value(context);
+ Object right = ((SimpleNode) jjtGetChild(1)).value(context);
+
+ Long l = left == null ? new Long(0) : Coercion.coerceLong(left);
+ Long r = right == null ? new Long(0) : Coercion.coerceLong(right);
+ return new Long(l.longValue() ^ r.longValue());
}
}
Modified: jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java?rev=387452&r1=387451&r2=387452&view=diff
==============================================================================
--- jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java (original)
+++ jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java Mon Mar 20 23:34:40 2006
@@ -155,4 +155,49 @@
assertEquals("Result is wrong", new Long(15), o);
}
+ public void testXorWithTwoNulls() throws Exception {
+ Expression e = ExpressionFactory.createExpression("null ^ null");
+ JexlContext jc = JexlHelper.createContext();
+ Object o = e.evaluate(jc);
+ assertEquals("Result is wrong", new Long(0), o);
+ }
+
+ public void testXorWithLeftNull() throws Exception {
+ Expression e = ExpressionFactory.createExpression("null ^ 1");
+ JexlContext jc = JexlHelper.createContext();
+ Object o = e.evaluate(jc);
+ assertEquals("Result is wrong", new Long(1), o);
+ }
+
+ public void testXorWithRightNull() throws Exception {
+ Expression e = ExpressionFactory.createExpression("1 ^ null");
+ JexlContext jc = JexlHelper.createContext();
+ Object o = e.evaluate(jc);
+ assertEquals("Result is wrong", new Long(1), o);
+ }
+
+ public void testXorSimple() throws Exception {
+ Expression e = ExpressionFactory.createExpression("1 ^ 3");
+ JexlContext jc = JexlHelper.createContext();
+ Object o = e.evaluate(jc);
+ assertEquals("Result is wrong", new Long(2), o);
+ }
+
+ public void testXorVariableNumberCoercion() throws Exception {
+ Expression e = ExpressionFactory.createExpression("x ^ y");
+ JexlContext jc = JexlHelper.createContext();
+ jc.getVars().put("x", new Integer(1));
+ jc.getVars().put("y", new Short((short)3));
+ Object o = e.evaluate(jc);
+ assertEquals("Result is wrong", new Long(2), o);
+ }
+
+ public void testXorVariableStringCoercion() throws Exception {
+ Expression e = ExpressionFactory.createExpression("x ^ y");
+ JexlContext jc = JexlHelper.createContext();
+ jc.getVars().put("x", new Integer(1));
+ jc.getVars().put("y", "3");
+ Object o = e.evaluate(jc);
+ assertEquals("Result is wrong", new Long(2), o);
+ }
}
Modified: jakarta/commons/proper/jexl/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/xdocs/changes.xml?rev=387452&r1=387451&r2=387452&view=diff
==============================================================================
--- jakarta/commons/proper/jexl/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/jexl/trunk/xdocs/changes.xml Mon Mar 20 23:34:40 2006
@@ -25,7 +25,7 @@
</properties>
<body>
<release version="1.0.1-SNAPSHOT" date="in SVN">
- <action dev="dion" type="add">Added implementation for bitwise operators: and, complement, or.</action>
+ <action dev="dion" type="add">Added implementation for bitwise operators: and, complement, or, xor.</action>
<action dev="dion" type="add">Added implementation for the foreach statement.</action>
<action dev="dion" type="add">Added implementation for the while statement.</action>
<action dev="dion" type="add">Added implementation for block statements, e.g. curly braces containing multiple statements.</action>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org