[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