[jboss-svn-commits] JBL Code SVN: r24122 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/base and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Nov 27 10:24:11 EST 2008
Author: tirelli
Date: 2008-11-27 10:24:11 -0500 (Thu, 27 Nov 2008)
New Revision: 24122
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
Log:
JBRULES-1873: fixing 'after' evaluator and improving javadocs
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java 2008-11-27 15:05:10 UTC (rev 24121)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/AfterEvaluatorDefinition.java 2008-11-27 15:24:11 UTC (rev 24122)
@@ -58,17 +58,26 @@
*
* <ul><li>If two values are defined (like in the example bellow), the interval starts on the
* first value and finishes on the second.</li>
- * <li>If only one value is defined, it is assumed that it is the finish value and the default
- * initial value is 1ms.</li>
+ * <li>If only one value is defined, we have two cases. If the value is negative, then the interval
+ * starts on the value and finishes on -1ms. If the value is positive, then the interval starts on
+ * +1ms and finishes on the value.</li>
* <li>If no value is defined, it is assumed that the initial value is 1ms and the final value
* is the positive infinity.</li></ul>
*
- * <p><b>NOTE:</b> it is allowed to define negative distances for this operator. The only
- * requirement is that the initial distance in the interval must always be lower than the
- * final distance. Example:</p>
+ * <p><b>NOTE:</b> it is allowed to define negative distances for this operator. Example:</p>
*
* <pre>$eventA : EventA( this after[ -3m30s, -2m ] $eventB )</pre>
*
+ * <p><b>NOTE:</b> if the initial value is greater than the finish value, the engine automatically
+ * reverse them, as there is no reason to have the initial value greater than the finish value. Example:
+ * the following two patterns are considered to have the same semantics:</p>
+ *
+ * <pre>
+ * $eventA : EventA( this after[ -3m30s, -2m ] $eventB )
+ * $eventA : EventA( this after[ -2m, -3m30s ] $eventB )
+ * </pre>
+ *
+ *
* @author etirelli
*/
public class AfterEvaluatorDefinition
@@ -323,12 +332,23 @@
this.finalRange = Long.MAX_VALUE;
return;
} else if( parameters.length == 1 ) {
- // up to that value
- this.initRange = 1;
- this.finalRange = parameters[0].longValue();
+ if( parameters[0].longValue() >= 0 ) {
+ // up to that value
+ this.initRange = 1;
+ this.finalRange = parameters[0].longValue();
+ } else {
+ // from that value up to now
+ this.initRange = parameters[0].longValue();
+ this.finalRange = -1;
+ }
} else if( parameters.length == 2 ) {
- this.initRange = parameters[0].longValue();
- this.finalRange = parameters[1].longValue();
+ if( parameters[0].longValue() <= parameters[1].longValue() ) {
+ this.initRange = parameters[0].longValue();
+ this.finalRange = parameters[1].longValue();
+ } else {
+ this.initRange = parameters[1].longValue();
+ this.finalRange = parameters[0].longValue();
+ }
} else {
throw new RuntimeDroolsException( "[After Evaluator]: Not possible to have more than 2 parameters: '" + paramText + "'" );
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java 2008-11-27 15:05:10 UTC (rev 24121)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java 2008-11-27 15:24:11 UTC (rev 24122)
@@ -67,18 +67,66 @@
5,
2 );
- final Object[][] data = {{drool, "after", foo, Boolean.TRUE}, {drool, "after", bar, Boolean.FALSE}, {bar, "after", foo, Boolean.TRUE}, {bar, "after", drool, Boolean.FALSE}, {foo, "after", drool, Boolean.FALSE},
- {foo, "after", bar, Boolean.FALSE}, {foo, "not after", bar, Boolean.TRUE}, {foo, "not after", drool, Boolean.TRUE}, {bar, "not after", drool, Boolean.TRUE}, {bar, "not after", foo, Boolean.FALSE},
- {drool, "not after", foo, Boolean.FALSE}, {drool, "not after", bar, Boolean.TRUE}, {bar, "after[1]", foo, Boolean.TRUE}, {bar, "after[0]", foo, Boolean.FALSE}, {bar, "after[-3]", drool, Boolean.TRUE},
- {bar, "after[-4]", drool, Boolean.FALSE}, {drool, "after[2]", foo, Boolean.TRUE}, {drool, "after[1]", foo, Boolean.FALSE}, {drool, "after[-2]", bar, Boolean.TRUE}, {drool, "after[-3]", bar, Boolean.FALSE},
- {foo, "after[-6]", drool, Boolean.TRUE}, {foo, "after[-7]", drool, Boolean.FALSE}, {foo, "after[-6]", bar, Boolean.TRUE}, {foo, "after[-7]", bar, Boolean.FALSE}, {bar, "not after[1]", foo, Boolean.FALSE},
- {bar, "not after[0]", foo, Boolean.TRUE}, {bar, "not after[-3]", drool, Boolean.FALSE}, {bar, "not after[-4]", drool, Boolean.TRUE}, {drool, "not after[2]", foo, Boolean.FALSE}, {drool, "not after[1]", foo, Boolean.TRUE},
- {drool, "not after[-2]", bar, Boolean.FALSE}, {drool, "not after[-3]", bar, Boolean.TRUE}, {foo, "not after[-6]", drool, Boolean.FALSE}, {foo, "not after[-7]", drool, Boolean.TRUE}, {foo, "not after[-6]", bar, Boolean.FALSE},
- {foo, "not after[-7]", bar, Boolean.TRUE}, {drool, "after[1,4]", foo, Boolean.TRUE}, {drool, "after[3,6]", foo, Boolean.FALSE}, {drool, "after[-3,1]", bar, Boolean.TRUE}, {drool, "after[-1,3]", bar, Boolean.FALSE},
- {bar, "after[1,5]", foo, Boolean.TRUE}, {bar, "after[2,5]", foo, Boolean.FALSE}, {bar, "after[-3,0]", drool, Boolean.TRUE}, {bar, "after[-2,1]", drool, Boolean.FALSE}, {foo, "after[-7,-3]", bar, Boolean.TRUE},
- {foo, "after[-5,-1]", bar, Boolean.FALSE}, {foo, "after[-6,-5]", drool, Boolean.TRUE}, {foo, "after[-5,-4]", drool, Boolean.FALSE}, {drool, "not after[1,4]", foo, Boolean.FALSE}, {drool, "not after[3,6]", foo, Boolean.TRUE},
- {drool, "not after[-3,1]", bar, Boolean.FALSE}, {drool, "not after[-1,3]", bar, Boolean.TRUE}, {bar, "not after[1,5]", foo, Boolean.FALSE}, {bar, "not after[2,5]", foo, Boolean.TRUE}, {bar, "not after[-3,0]", drool, Boolean.FALSE},
- {bar, "not after[-2,1]", drool, Boolean.TRUE}, {foo, "not after[-7,-3]", bar, Boolean.FALSE}, {foo, "not after[-5,-1]", bar, Boolean.TRUE}, {foo, "not after[-6,-5]", drool, Boolean.FALSE},
+ final Object[][] data = {
+ {drool, "after", foo, Boolean.TRUE},
+ {drool, "after", bar, Boolean.FALSE},
+ {bar, "after", foo, Boolean.TRUE},
+ {bar, "after", drool, Boolean.FALSE},
+ {foo, "after", drool, Boolean.FALSE},
+ {foo, "after", bar, Boolean.FALSE},
+ {foo, "not after", bar, Boolean.TRUE},
+ {foo, "not after", drool, Boolean.TRUE},
+ {bar, "not after", drool, Boolean.TRUE},
+ {bar, "not after", foo, Boolean.FALSE},
+ {drool, "not after", foo, Boolean.FALSE},
+ {drool, "not after", bar, Boolean.TRUE},
+ {bar, "after[1]", foo, Boolean.TRUE},
+ {bar, "after[0]", foo, Boolean.FALSE},
+ {bar, "after[-3]", drool, Boolean.TRUE},
+ {bar, "after[-4]", drool, Boolean.TRUE},
+ {drool, "after[2]", foo, Boolean.TRUE},
+ {drool, "after[1]", foo, Boolean.FALSE},
+ {drool, "after[-2]", bar, Boolean.TRUE},
+ {drool, "after[-3]", bar, Boolean.TRUE},
+ {foo, "after[-6]", drool, Boolean.TRUE},
+ {foo, "after[-7]", drool, Boolean.TRUE},
+ {foo, "after[-6]", bar, Boolean.TRUE},
+ {foo, "after[-7]", bar, Boolean.TRUE},
+ {bar, "not after[1]", foo, Boolean.FALSE},
+ {bar, "not after[0]", foo, Boolean.TRUE},
+ {bar, "not after[-3]", drool, Boolean.FALSE},
+ {bar, "not after[-4]", drool, Boolean.FALSE},
+ {drool, "not after[2]", foo, Boolean.FALSE},
+ {drool, "not after[1]", foo, Boolean.TRUE},
+ {drool, "not after[-2]", bar, Boolean.FALSE},
+ {drool, "not after[-3]", bar, Boolean.FALSE},
+ {foo, "not after[-6]", drool, Boolean.FALSE},
+ {foo, "not after[-7]", drool, Boolean.FALSE},
+ {foo, "not after[-6]", bar, Boolean.FALSE},
+ {foo, "not after[-7]", bar, Boolean.FALSE},
+ {drool, "after[1,4]", foo, Boolean.TRUE},
+ {drool, "after[3,6]", foo, Boolean.FALSE},
+ {drool, "after[-3,1]", bar, Boolean.TRUE},
+ {drool, "after[-1,3]", bar, Boolean.FALSE},
+ {bar, "after[1,5]", foo, Boolean.TRUE},
+ {bar, "after[2,5]", foo, Boolean.FALSE},
+ {bar, "after[-3,0]", drool, Boolean.TRUE},
+ {bar, "after[-2,1]", drool, Boolean.FALSE},
+ {foo, "after[-7,-3]", bar, Boolean.TRUE},
+ {foo, "after[-5,-1]", bar, Boolean.FALSE},
+ {foo, "after[-6,-5]", drool, Boolean.TRUE},
+ {foo, "after[-5,-4]", drool, Boolean.FALSE},
+ {drool, "not after[1,4]", foo, Boolean.FALSE},
+ {drool, "not after[3,6]", foo, Boolean.TRUE},
+ {drool, "not after[-3,1]", bar, Boolean.FALSE},
+ {drool, "not after[-1,3]", bar, Boolean.TRUE},
+ {bar, "not after[1,5]", foo, Boolean.FALSE},
+ {bar, "not after[2,5]", foo, Boolean.TRUE},
+ {bar, "not after[-3,0]", drool, Boolean.FALSE},
+ {bar, "not after[-2,1]", drool, Boolean.TRUE},
+ {foo, "not after[-7,-3]", bar, Boolean.FALSE},
+ {foo, "not after[-5,-1]", bar, Boolean.TRUE},
+ {foo, "not after[-6,-5]", drool, Boolean.FALSE},
{foo, "not after[-5,-4]", drool, Boolean.TRUE},};
runEvaluatorTest( data,
More information about the jboss-svn-commits
mailing list