[jboss-svn-commits] JBL Code SVN: r30155 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/reteoo/test and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Nov 15 04:15:02 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-11-15 04:15:02 -0500 (Sun, 15 Nov 2009)
New Revision: 30155
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngine.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngineTest.java
Log:
JBRULES-2339 Rete DSL test harness
-now works with indexes
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleMemory.java 2009-11-15 07:57:44 UTC (rev 30154)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleMemory.java 2009-11-15 09:15:02 UTC (rev 30155)
@@ -7,6 +7,8 @@
public Iterator iterator();
public LeftTuple getFirst(RightTuple rightTuple);
+
+ public LeftTuple getFirst(LeftTuple leftTuple);
public void add(LeftTuple tuple);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java 2009-11-15 07:57:44 UTC (rev 30154)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java 2009-11-15 09:15:02 UTC (rev 30155)
@@ -5,6 +5,8 @@
public interface RightTupleMemory {
public RightTuple getFirst(LeftTuple leftTuple);
+
+ public RightTuple getFirst(RightTuple rightTuple);
public RightTuple getLast(LeftTuple leftTuple);
@@ -17,8 +19,8 @@
public Iterator iterator();
public boolean isIndexed();
-
- public Entry[] toArray();
+ public Entry[] toArray();
+
public int size();
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngine.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngine.java 2009-11-15 07:57:44 UTC (rev 30154)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngine.java 2009-11-15 09:15:02 UTC (rev 30155)
@@ -21,6 +21,7 @@
import org.drools.base.evaluators.EvaluatorRegistry;
import org.drools.base.evaluators.Operator;
import org.drools.command.Context;
+import org.drools.common.DefaultFactHandle;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.PropagationContextImpl;
@@ -84,7 +85,6 @@
Map context = new HashMap();
RuleBaseConfiguration conf = new RuleBaseConfiguration();
- conf.setCompositeKeyDepth( 0 );
ReteooRuleBase rbase = new ReteooRuleBase( "ID",
conf );
@@ -141,8 +141,7 @@
BetaMemory memory = (BetaMemory) wm.getNodeMemory( node );
for ( String cmd : cmds ) {
- if ( cmd.trim().startsWith( "leftMemory" ) ) {
-
+ if ( cmd.trim().startsWith( "leftMemory" ) ) {
int pos = cmd.indexOf( "[" );
String nodeName = cmd.substring( 0,
pos ).trim();
@@ -156,20 +155,31 @@
vars );
LeftTupleMemory leftMemory = memory.getLeftTupleMemory();
- LeftTuple[] leftTuples = (LeftTuple[]) leftMemory.toArray();
+
+ List actualLeftTuples = null;
- List actualLeftTuples = new ArrayList( leftTuples.length );
+ // we always lookup from the first element, in case it's indexed
+ List<InternalFactHandle> first = (List<InternalFactHandle>) expectedLeftTuples.get( 0 );
+ LeftTuple firstTuple = new LeftTuple(first.get( 0 ), null, false);
+ for ( int i = 1; i < first.size(); i++ ) {
+ firstTuple = new LeftTuple(firstTuple, null, false);
+ }
+ List<LeftTuple> leftTuples = new ArrayList<LeftTuple>();
+
+ for ( LeftTuple leftTuple = memory.getLeftTupleMemory().getFirst( firstTuple ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getNext() ) {
+ leftTuples.add( leftTuple );
+ }
+ actualLeftTuples = new ArrayList( leftTuples.size() );
for ( LeftTuple leftTuple : leftTuples ) {
List<InternalFactHandle> tupleHandles = Arrays.asList( leftTuple.toFactHandles() );
actualLeftTuples.add( tupleHandles );
- }
+ }
if ( !expectedLeftTuples.equals( actualLeftTuples ) ) {
throw new AssertionError( "line " + step.getLine() + ": left Memory expected " + expectedLeftTuples + " actually " + actualLeftTuples);
}
-
-
+
} else if ( cmd.trim().startsWith( "rightMemory" ) ) {
int pos = cmd.indexOf( "[" );
String nodeName = cmd.substring( 0,
@@ -183,9 +193,14 @@
List expectedFactHandles = (List) MVEL.eval( listString,
vars );
- RightTupleMemory rightMemory = memory.getRightTupleMemory();
- List<RightTuple> actualRightTuples = Arrays.asList( ( RightTuple[] ) rightMemory.toArray() );
+ RightTupleMemory rightMemory = memory.getRightTupleMemory();
+ InternalFactHandle first = ( InternalFactHandle ) expectedFactHandles.get( 0 );
+ List<RightTuple> actualRightTuples = new ArrayList();
+ for ( RightTuple rightTuple = memory.getRightTupleMemory().getFirst( first.getFirstRightTuple() ); rightTuple != null; rightTuple = (RightTuple) rightTuple.getNext() ) {
+ actualRightTuples.add( rightTuple );
+ }
+
if ( expectedFactHandles.size() != actualRightTuples.size() ) {
throw new AssertionError( "line " + step.getLine() + ": right Memory expected " + actualRightTuples + " actually " + actualRightTuples);
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngineTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngineTest.java 2009-11-15 07:57:44 UTC (rev 30154)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/ReteDslTestEngineTest.java 2009-11-15 09:15:02 UTC (rev 30155)
@@ -298,7 +298,7 @@
str += " p1, 0, java.lang.Integer, intValue\n";
str += "JoinNode\n";
str += " join1, lian0, otn2\n";
- str += " intValue, ==, p1\n";
+ str += " intValue, !=, p1\n";
List<DslStep> steps = ReteDslTestEngine.buildDslCommands( new StringReader( str ) );
@@ -346,7 +346,7 @@
assertEquals( 2,
memory.getLeftTupleMemory().size() );
- LeftTuple leftTuple = memory.getLeftTupleMemory().getFirst( null );
+ LeftTuple leftTuple = memory.getLeftTupleMemory().getFirst( (LeftTuple) null );
assertEquals( tuple0,
leftTuple );
assertEquals( tuple1,
@@ -562,6 +562,64 @@
memory.getLeftTupleMemory().size() );
}
+ public void testBetaNodeChainedMemoryWithIndexChecks() {
+ String str = "ObjectTypeNode\n";
+ str += " otn1, java.lang.Integer\n";
+ str += "LeftInputAdapterNode\n";
+ str += " lian0, otn1\n";
+ str += "ObjectTypeNode\n";
+ str += " otn2, java.lang.Integer\n";
+ str += "ObjectTypeNode\n";
+ str += " otn3, java.lang.Integer\n";
+ str += "Binding\n";
+ str += " p1, 0, java.lang.Integer, intValue\n";
+ str += "JoinNode\n";
+ str += " join1, lian0, otn2\n";
+ str += " intValue, ==, p1\n";
+ str += "JoinNode\n";
+ str += " join2, join1, otn3\n";
+ str += " intValue, ==, p1\n";
+ str += "Facts\n";
+ str += " new Integer(0), new Integer(0), new Integer(0), 2, 4\n";
+ str += "assert\n";
+ str += " otn1 [h1, h3]\n";
+ str += " otn2 [h0, h2]\n";
+ str += " otn3 [h4]\n";
+ str += "join1\n";
+ str += " leftMemory [[h1]]\n";
+ str += " rightMemory [h0, h2]\n";
+ str += "join2\n";
+ str += " leftMemory [[h1, h0],\n";
+ str += " [h1, h2]]\n";
+ str += " rightMemory [h4]\n";
+ str += "retract\n";
+ str += " otn1 [h2]\n";
+ str += " otn2 [h3]\n";;
+ str += "join1\n";
+ str += " leftMemory [ [h1] ]\n";
+ str += " rightMemory [h0]\n";
+ str += "join2\n";
+ str += " leftMemory [[h1, h0]]\n";
+ str += " rightMemory [h4]\n";
+
+ List<DslStep> steps = ReteDslTestEngine.buildDslCommands( new StringReader( str ) );
+
+ ReteDslTestEngine tester = new ReteDslTestEngine();
+ Map<String, Object> map = tester.run( steps );
+
+ InternalWorkingMemory wm = (InternalWorkingMemory) map.get( "WorkingMemory" );
+ List<InternalFactHandle> handles = (List<InternalFactHandle>) map.get( "Handles" );
+
+ JoinNode join1 = (JoinNode) map.get( "join1" );
+
+ BetaMemory memory = (BetaMemory) wm.getNodeMemory( join1 );
+ assertEquals( 1,
+ memory.getRightTupleMemory().size() );
+
+ assertEquals( 1,
+ memory.getLeftTupleMemory().size() );
+ }
+
public void testDslEndToEnd() {
InputStream stream = getClass().getResourceAsStream( "JoinNode.data" );
assertNotNull( stream );
More information about the jboss-svn-commits
mailing list