[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