[jboss-svn-commits] JBL Code SVN: r13891 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 30 18:37:01 EDT 2007


Author: tirelli
Date: 2007-07-30 18:37:01 -0400 (Mon, 30 Jul 2007)
New Revision: 13891

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FirstClass.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SecondClass.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DefaultBetaConstraint.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
Log:
JBRULES-1031: fixing bug when using more than 4 indexed constraints

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FirstClass.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FirstClass.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FirstClass.java	2007-07-30 22:37:01 UTC (rev 13891)
@@ -0,0 +1,56 @@
+package org.drools;
+
+public class FirstClass {
+    private String item1;
+    private String item2;
+    private String item3;
+    private String item4;
+    private String item5;
+    
+    public FirstClass() {
+    }
+    
+    public FirstClass(String item1,
+                      String item2,
+                      String item3,
+                      String item4,
+                      String item5) {
+        super();
+        this.item1 = item1;
+        this.item2 = item2;
+        this.item3 = item3;
+        this.item4 = item4;
+        this.item5 = item5;
+    }
+    public String getItem1() {
+        return item1;
+    }
+    public void setItem1(String item1) {
+        this.item1 = item1;
+    }
+    public String getItem2() {
+        return item2;
+    }
+    public void setItem2(String item2) {
+        this.item2 = item2;
+    }
+    public String getItem3() {
+        return item3;
+    }
+    public void setItem3(String item3) {
+        this.item3 = item3;
+    }
+    public String getItem4() {
+        return item4;
+    }
+    public void setItem4(String item4) {
+        this.item4 = item4;
+    }
+    public String getItem5() {
+        return item5;
+    }
+    public void setItem5(String item5) {
+        this.item5 = item5;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SecondClass.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SecondClass.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SecondClass.java	2007-07-30 22:37:01 UTC (rev 13891)
@@ -0,0 +1,56 @@
+package org.drools;
+
+public class SecondClass {
+    private String item1;
+    private String item2;
+    private String item3;
+    private String item4;
+    private String item5;
+    
+    public SecondClass() {
+    }
+    
+    public SecondClass(String item1,
+                      String item2,
+                      String item3,
+                      String item4,
+                      String item5) {
+        super();
+        this.item1 = item1;
+        this.item2 = item2;
+        this.item3 = item3;
+        this.item4 = item4;
+        this.item5 = item5;
+    }
+    public String getItem1() {
+        return item1;
+    }
+    public void setItem1(String item1) {
+        this.item1 = item1;
+    }
+    public String getItem2() {
+        return item2;
+    }
+    public void setItem2(String item2) {
+        this.item2 = item2;
+    }
+    public String getItem3() {
+        return item3;
+    }
+    public void setItem3(String item3) {
+        this.item3 = item3;
+    }
+    public String getItem4() {
+        return item4;
+    }
+    public void setItem4(String item4) {
+        this.item4 = item4;
+    }
+    public String getItem5() {
+        return item5;
+    }
+    public void setItem5(String item5) {
+        this.item5 = item5;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-30 22:06:48 UTC (rev 13890)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-30 22:37:01 UTC (rev 13891)
@@ -43,6 +43,7 @@
 import org.drools.Cheesery;
 import org.drools.Child;
 import org.drools.FactHandle;
+import org.drools.FirstClass;
 import org.drools.FromTestClass;
 import org.drools.Guess;
 import org.drools.IndexedNumber;
@@ -58,6 +59,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
+import org.drools.SecondClass;
 import org.drools.Sensor;
 import org.drools.State;
 import org.drools.TestParam;
@@ -3412,4 +3414,50 @@
                       results.size() );
     }
 
+    public void testDefaultBetaConstrains() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DefaultBetaConstraint.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        final List results = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 results );
+        final FirstClass first = new FirstClass("1", "2", "3", "4", "5");
+        final FactHandle handle = workingMemory.insert( first );
+        workingMemory.fireAllRules();
+        assertEquals( 1,
+                      results.size() );
+        assertEquals( "NOT",
+                      results.get(0) );
+        
+        workingMemory.insert( new SecondClass() );
+        workingMemory.update( handle, first );
+        workingMemory.fireAllRules();
+        assertEquals( 2,
+                      results.size() );
+        assertEquals( "NOT",
+                      results.get(1) );
+        
+        workingMemory.update( handle, first );
+        workingMemory.insert( new SecondClass("1", "2", "3", "4", null ) );
+        workingMemory.fireAllRules();
+        assertEquals( 3,
+                      results.size() );
+        assertEquals( "NOT",
+                      results.get(2) );
+        
+        workingMemory.insert( new SecondClass("1", "2", "3", "4", "5" ) );
+        workingMemory.update( handle, first );
+        workingMemory.fireAllRules();
+        assertEquals( 4,
+                      results.size() );
+        assertEquals( "EQUALS",
+                      results.get(3) );
+        
+    }
+
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DefaultBetaConstraint.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DefaultBetaConstraint.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DefaultBetaConstraint.drl	2007-07-30 22:37:01 UTC (rev 13891)
@@ -0,0 +1,19 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "5+ constraints with not"
+	when
+		FirstClass($i1 : item1, $i2 : item2, $i3 : item3, $i4 : item4, $i5 : item5) 
+		not SecondClass( item1 == $i1, item2 == $i2, item3 == $i3, item4 == $i4, item5 == $i5 ) 
+	then
+		results.add( "NOT" );
+end
+
+rule "5+ constraints with pattern"
+	when
+		FirstClass($i1 : item1, $i2 : item2, $i3 : item3, $i4 : item4, $i5 : item5) 
+		SecondClass( item1 == $i1, item2 == $i2, item3 == $i3, item4 == $i4, item5 == $i5 ) 
+	then
+		results.add( "EQUALS" );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2007-07-30 22:06:48 UTC (rev 13890)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2007-07-30 22:37:01 UTC (rev 13891)
@@ -72,13 +72,13 @@
         // First create a LinkedList of constraints, with the indexed constraints first.
         for ( int i = 0, length = constraints.length; i < length; i++ ) {
             // Determine  if this constraint is indexable
-            if ( (!disableIndexing) && conf.isIndexLeftBetaMemory() && conf.isIndexRightBetaMemory() && isIndexable( constraints[i] ) ) {
+            if ( (!disableIndexing) && conf.isIndexLeftBetaMemory() && conf.isIndexRightBetaMemory() && isIndexable( constraints[i] ) && ( depth <= this.indexed ) ) {
                 if ( depth >= 1 && this.indexed == -1 ) {
                     // first index, so just add to the front
                     this.constraints.insertAfter( null,
                                                   new LinkedListEntry( constraints[i] ) );
                     this.indexed++;
-                } else if ( depth >= this.indexed + 1 ) { //this.indexed is zero based, so adjust
+                } else { 
                     // insert this index after  the previous index
                     this.constraints.insertAfter( findNode( this.indexed++ ),
                                                   new LinkedListEntry( constraints[i] ) );




More information about the jboss-svn-commits mailing list