[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