[jboss-svn-commits] JBL Code SVN: r5998 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools drools-compiler/src/test/java/org/drools/integrationtests drools-compiler/src/test/resources/org/drools/integrationtests drools-core/src/main/java/org/drools/reteoo drools-core/src/main/java/org/drools/reteoo/beta

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Aug 29 08:33:02 EDT 2006


Author: tirelli
Date: 2006-08-29 08:32:46 -0400 (Tue, 29 Aug 2006)
New Revision: 5998

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Approach.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Close.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Target.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_JoinNodeModifyTuple.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java
Log:
JBRULES-455:

  * Fixing a bug in JoinNode.modifyTuple()
  * Adding integration test for it



Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Approach.java (from rev 5997, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/Approach.java)

Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Close.java (from rev 5997, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/Close.java)

Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Target.java (from rev 5997, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/Target.java)

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2006-08-29 12:26:37 UTC (rev 5997)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2006-08-29 12:32:46 UTC (rev 5998)
@@ -2866,8 +2866,116 @@
         cheeseList = workingMemory.getObjects( String.class );
         assertEquals( 2,
                       cheeseList.size() );
+    }
+    
+    public void testLLR() throws Exception {
+
+        //read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_JoinNodeModifyTuple.drl" ) );
+        final DrlParser parser = new DrlParser();
+        final PackageDescr packageDescr = parser.parse( reader );
+
+        //pre build the package
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackage( packageDescr );
+        final Package pkg = builder.getPackage();
+
+        //add the package to a rulebase
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        //load up the rulebase
+
+        final WorkingMemory wm = ruleBase.newWorkingMemory();
         
+        try {
+            // 1st time           
+            org.drools.Target tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Anna" );
+            tgt.setLat( new Float( 60.26544f ) );
+            tgt.setLon( new Float( 28.952137f ) );
+            tgt.setCourse( new Float( 145.0f ) );
+            tgt.setSpeed( new Float( 12.0f ) );
+            tgt.setTime( new Float( 1.8666667f ) );
+            wm.assertObject( tgt );
+            
+            tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Maria" );
+            tgt.setLat( new Float( 60.236874f ) );
+            tgt.setLon( new Float( 28.992579f ) );
+            tgt.setCourse( new Float( 325.0f ) );
+            tgt.setSpeed( new Float( 8.0f ) );
+            tgt.setTime( new Float( 1.8666667f ) );
+            wm.assertObject( tgt );
+            
+            wm.fireAllRules();
+
+            // 2nd time
+            tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Anna" );
+            tgt.setLat( new Float( 60.265343f ) );
+            tgt.setLon( new Float( 28.952267f ) );
+            tgt.setCourse( new Float( 145.0f ) );
+            tgt.setSpeed( new Float( 12.0f ) );
+            tgt.setTime( new Float( 1.9f ) );
+            wm.assertObject( tgt );
+            
+            tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Maria" );
+            tgt.setLat( new Float( 60.236935f ) );
+            tgt.setLon( new Float( 28.992493f ) );
+            tgt.setCourse( new Float( 325.0f ) );
+            tgt.setSpeed( new Float( 8.0f ) );
+            tgt.setTime( new Float( 1.9f ) );
+            wm.assertObject( tgt );
+            
+            wm.fireAllRules();
+
+            // 3d time
+            tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Anna" );
+            tgt.setLat( new Float( 60.26525f ) );
+            tgt.setLon( new Float( 28.952396f ) );
+            tgt.setCourse( new Float( 145.0f ) );
+            tgt.setSpeed( new Float( 12.0f ) );
+            tgt.setTime( new Float( 1.9333333f ) );
+            wm.assertObject( tgt );
+            
+            tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Maria" );
+            tgt.setLat( new Float( 60.236996f ) );
+            tgt.setLon( new Float( 28.992405f ) );
+            tgt.setCourse( new Float( 325.0f ) );
+            tgt.setSpeed( new Float( 8.0f ) );
+            tgt.setTime( new Float( 1.9333333f ) );
+            wm.assertObject( tgt );
+            
+            wm.fireAllRules();
+
+            // 4th time
+            tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Anna" );
+            tgt.setLat( new Float( 60.265163f ) );
+            tgt.setLon( new Float( 28.952526f ) );
+            tgt.setCourse( new Float( 145.0f ) );
+            tgt.setSpeed( new Float( 12.0f ) );
+            tgt.setTime( new Float( 1.9666667f ) );
+            wm.assertObject( tgt );
+            
+            tgt = new org.drools.Target();
+            tgt.setLabel( "Santa-Maria" );
+            tgt.setLat( new Float( 60.237057f ) );
+            tgt.setLon( new Float( 28.99232f ) );
+            tgt.setCourse( new Float( 325.0f ) );
+            tgt.setSpeed( new Float( 8.0f ) );
+            tgt.setTime( new Float( 1.9666667f ) );
+            wm.assertObject( tgt );
+            
+            wm.fireAllRules();
+        } catch ( RuntimeException e ) {
+            Assert.fail("Test is not supposed to throw any exception");
+        }
         
     }
+    
 
 }

Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_JoinNodeModifyTuple.drl (from rev 5997, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_JoinNodeModifyTuple.drl)

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-08-29 12:26:37 UTC (rev 5997)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-08-29 12:32:46 UTC (rev 5998)
@@ -109,7 +109,7 @@
                             final PropagationContext context,
                             final ReteooWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-
+        
         memory.add( workingMemory,
                     leftTuple );
 
@@ -193,7 +193,7 @@
                               final PropagationContext context,
                               final ReteooWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-
+        
         // Remove the FactHandle from memory
         final ObjectMatches objectMatches = memory.remove( workingMemory,
                                                            handle );
@@ -263,6 +263,7 @@
             // indexing is enabled, the loop over right objects may skip some of the
             // previously matched objects
             final Map oldMatches = new HashMap(matches);
+            leftTuple.getTupleMatches().clear();
             
             // ensure the tuple is at the top of the memory
             memory.add( workingMemory,
@@ -282,6 +283,7 @@
                         // ensures tupleMatch will be in the appropriate order
                         objectMatches.remove( tupleMatch );
                         objectMatches.add( tupleMatch );
+                        leftTuple.addTupleMatch( handle, tupleMatch );
                         
                         propagateModifyTuple( tupleMatch,
                                               context,
@@ -316,6 +318,9 @@
                 for(Iterator it = oldMatches.values().iterator(); it.hasNext(); ) {
                     final TupleMatch tupleMatch = (TupleMatch) it.next();
                     tupleMatch.getObjectMatches().remove( tupleMatch );
+                    propagateRetractTuple( tupleMatch,
+                                           context,
+                                           workingMemory );
                 }
             }
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java	2006-08-29 12:26:37 UTC (rev 5997)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java	2006-08-29 12:32:46 UTC (rev 5998)
@@ -64,6 +64,7 @@
     public final void remove(final WorkingMemory workingMemory,
                              final ObjectMatches matches) {
         matches.getOuterList().remove( matches );
+        matches.setOuterList( null );
     }
 
     /**
@@ -86,6 +87,7 @@
     public final void remove(final WorkingMemory workingMemory,
                              final MultiLinkedListNodeWrapper wrapper) {
         wrapper.getOuterList().remove( wrapper );
+        wrapper.setOuterList( null );
     }
 
     /**




More information about the jboss-svn-commits mailing list