[jboss-svn-commits] JBL Code SVN: r17337 - in labs/jbossrules/branches/4.0.x: drools-compiler/src/test/resources/org/drools/integrationtests and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Dec 20 09:58:27 EST 2007
Author: tirelli
Date: 2007-12-20 09:58:27 -0500 (Thu, 20 Dec 2007)
New Revision: 17337
Added:
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl
Modified:
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/GroupElement.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/LogicTransformer.java
Log:
JBRULES-1364: fixing bug on the logic transformation
Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-12-20 12:15:31 UTC (rev 17336)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-12-20 14:58:27 UTC (rev 17337)
@@ -4586,7 +4586,6 @@
list.size() );
}
-
// this test requires mvel 1.2.19. Leaving it commented until mvel is released.
public void FIXME_testJavaModifyBlock() throws Exception {
final PackageBuilder builder = new PackageBuilder();
@@ -4616,4 +4615,27 @@
assertEquals( 31, bob.getAge() );
}
+ public void testOrCE() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_OrCE.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "results",
+ list );
+
+ workingMemory.insert( new Cheese( "brie", 10 ) );
+ workingMemory.insert( new Person( "bob" ) );
+
+ workingMemory.fireAllRules();
+
+ assertEquals( "should have fired once",
+ 1,
+ list.size() );
+ }
+
}
Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrCE.drl 2007-12-20 14:58:27 UTC (rev 17337)
@@ -0,0 +1,20 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "test or CE"
+when
+ $c : Cheese( type == "stilton" )
+ or
+ (
+ $c2 : Cheese( type == "brie" )
+ and
+ (
+ $p : Person( likes == "stilton" )
+ or
+ $p : Person( name == "bob" )
+ )
+ )
+then
+ results.add(" OK " );
+end
\ No newline at end of file
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/GroupElement.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/GroupElement.java 2007-12-20 12:15:31 UTC (rev 17336)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/GroupElement.java 2007-12-20 14:58:27 UTC (rev 17337)
@@ -127,12 +127,13 @@
this.children.addAll( group.getChildren() );
}
}
+
}
/**
* @param parent
*/
- private void pack(final GroupElement parent) {
+ public void pack(final GroupElement parent) {
if ( this.children.size() == 0 ) {
// if there is no child, just remove this node
parent.children.remove( this );
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/LogicTransformer.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/LogicTransformer.java 2007-12-20 12:15:31 UTC (rev 17336)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/LogicTransformer.java 2007-12-20 14:58:27 UTC (rev 17337)
@@ -191,21 +191,23 @@
boolean hasChildOr = false;
- // first we eliminicate any redundancy
+ // first we elimininate any redundancy
ce.pack();
- for ( final ListIterator it = ce.getChildren().listIterator(); it.hasNext(); ) {
- final Object object = it.next();
- if ( object instanceof GroupElement ) {
- final GroupElement child = (GroupElement) object;
+ Object[] children = (Object[]) ce.getChildren().toArray();
+ for ( int i = 0; i < children.length; i++ ) {
+ if ( children[i] instanceof GroupElement ) {
+ final GroupElement child = (GroupElement) children[i];
processTree( child );
-
- if ( child.isOr() ) {
+ if( ( child.isOr() || child.isAnd() ) && child.getType() == ce.getType() ) {
+ child.pack( ce );
+ } else if ( child.isOr() ) {
hasChildOr = true;
}
}
}
+
if ( hasChildOr ) {
applyOrTransformation( ce );
}
More information about the jboss-svn-commits
mailing list