[jboss-svn-commits] JBL Code SVN: r14397 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/common and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 20 22:14:52 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-08-20 22:14:51 -0400 (Mon, 20 Aug 2007)
New Revision: 14397

Added:
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/BaseBetaConstraintsTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DoubleBetaConstraintsTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/SingleBetaConstraintsTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/TripleBetaConstraintsTest.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DefaultBetaConstraintsTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java
Log:
JBRULES-1102 Bug in DefaultBetaConstraint class indexing to never turn on
-Updated the comprehensive unit test to do all BetaConstraints

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -24,6 +24,8 @@
     public LinkedList getConstraints();
 
     public boolean isIndexed();
+    
+    public int getIndexCount();
 
     public boolean isEmpty();
 

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-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -30,9 +30,11 @@
 import org.drools.rule.VariableConstraint;
 import org.drools.spi.BetaNodeFieldConstraint;
 import org.drools.spi.Constraint;
+import org.drools.util.Entry;
 import org.drools.util.FactHashTable;
 import org.drools.util.FactHandleIndexHashTable;
 import org.drools.util.FactList;
+import org.drools.util.Iterator;
 import org.drools.util.LinkedList;
 import org.drools.util.LinkedListEntry;
 import org.drools.util.TupleHashTable;
@@ -194,8 +196,8 @@
     }
     
     public int getIndexCount() {
-        return this.indexed;
-    }
+        return this.indexed+1;
+    }   
 
     public boolean isEmpty() {
         return false;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -115,7 +115,7 @@
         } else {
             return false;
         }
-    }
+    }   
 
     /* (non-Javadoc)
      * @see org.drools.common.BetaNodeConstraints#updateFromTuple(org.drools.reteoo.ReteTuple)
@@ -160,6 +160,17 @@
     public boolean isIndexed() {
         return this.indexed0;
     }
+    
+    public int getIndexCount() {
+        int count = 0;
+        if ( this.indexed0 ) {
+            count++;
+        }
+        if ( this.indexed1 ) {
+            count++;
+        }    
+        return count;    
+    }    
 
     public boolean isEmpty() {
         return false;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -77,6 +77,10 @@
     public boolean isIndexed() {
         return false;
     }
+    
+    public int getIndexCount() {
+        return 0;
+    }
 
     public boolean isEmpty() {
         return true;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -232,6 +232,23 @@
     public boolean isIndexed() {
         return this.indexed0;
     }
+    
+    public int getIndexCount() {
+        int count = 0;
+        if ( this.indexed0 ) {
+            count++;
+        }
+        if ( this.indexed1 ) {
+            count++;
+        }
+        if ( this.indexed2 ) {
+            count++;
+        }
+        if ( this.indexed3 ) {
+            count++;
+        }        
+        return count;    
+    }     
 
     public boolean isEmpty() {
         return false;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -52,6 +52,13 @@
     private boolean                       indexed;
 
     private RuleBaseConfiguration         conf;
+    
+    public SingleBetaConstraints(final BetaNodeFieldConstraint[] constraint,
+                                 final RuleBaseConfiguration conf) {
+        this( constraint[0],
+              conf,
+              false );
+    }    
 
     public SingleBetaConstraints(final BetaNodeFieldConstraint constraint,
                                  final RuleBaseConfiguration conf) {
@@ -122,6 +129,10 @@
     public boolean isIndexed() {
         return this.indexed;
     }
+    
+    public int getIndexCount() {
+        return ( this.indexed ? 1 : 0 );
+    }
 
     public boolean isEmpty() {
         return false;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -194,6 +194,20 @@
     public boolean isIndexed() {
         return this.indexed0;
     }
+    
+    public int getIndexCount() {
+        int count = 0;
+        if ( this.indexed0 ) {
+            count++;
+        }
+        if ( this.indexed1 ) {
+            count++;
+        }
+        if ( this.indexed2 ) {
+            count++;
+        }   
+        return count;    
+    }  
 
     public boolean isEmpty() {
         return false;

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/BaseBetaConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/BaseBetaConstraintsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/BaseBetaConstraintsTest.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -0,0 +1,124 @@
+package org.drools.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.RuleBaseConfiguration;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.ClassObjectType;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.evaluators.StringFactory;
+import org.drools.reteoo.BetaMemory;
+import org.drools.rule.Declaration;
+import org.drools.rule.Pattern;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldExtractor;
+import org.drools.util.FactHandleIndexHashTable;
+import org.drools.util.FactHashTable;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.TupleHashTable;
+import org.drools.util.TupleIndexHashTable;
+import org.drools.util.AbstractHashTable.FieldIndex;
+import org.drools.util.AbstractHashTable.Index;
+
+import junit.framework.TestCase;
+
+public abstract class BaseBetaConstraintsTest extends TestCase {
+
+    protected BetaNodeFieldConstraint getConstraint(String identifier,
+                                                  Operator operator,
+                                                  String fieldName,
+                                                  Class clazz) {
+        FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
+                                                                          fieldName,
+                                                                          getClass().getClassLoader() );
+        Declaration declaration = new Declaration( identifier,
+                                                   extractor,
+                                                   new Pattern( 0,
+                                                                new ClassObjectType( clazz ) ) );
+        Evaluator evaluator = StringFactory.getInstance().getEvaluator( operator );
+        return new VariableConstraint( extractor,
+                                       declaration,
+                                       evaluator );
+    }    
+    
+    
+    protected void checkBetaConstraints(VariableConstraint[] constraints, Class cls) {
+        RuleBaseConfiguration config = new RuleBaseConfiguration();
+        int depth = config.getCompositeKeyDepth();
+        
+        BetaConstraints betaConstraints = null;
+        
+        try {
+            betaConstraints = ( BetaConstraints ) cls.getConstructor( new Class[] { BetaNodeFieldConstraint[].class, RuleBaseConfiguration.class } ).newInstance( new Object[] { constraints, config } );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "could not invoke constructor for " + cls.getName() );
+        }
+        
+        //BetaConstraints betaConstraints = new DefaultBetaConstraints(constraints, config );
+        
+        constraints = convertToConstraints( betaConstraints.getConstraints() );        
+        
+        List list = new ArrayList();
+
+        // get indexed positions
+        for ( int i = 0; i < constraints.length && list.size() < depth; i++ ) {
+            if ( constraints[i].getEvaluator().getOperator() == Operator.EQUAL ) {
+                list.add( new Integer(i) );
+            }
+        }
+        
+        // convert to array
+        int[] indexedPositions = new int[ list.size() ];
+        for ( int i = 0; i < list.size(); i++ ) {
+            indexedPositions[i] = i;
+        }                              
+        
+        assertEquals( ( indexedPositions.length > 0 ), betaConstraints.isIndexed() );
+        assertEquals(indexedPositions.length,  betaConstraints.getIndexCount() );
+        BetaMemory betaMemory = betaConstraints.createBetaMemory( config );        
+        
+        if ( indexedPositions.length > 0 ) {
+            TupleIndexHashTable tupleHashTable =  ( TupleIndexHashTable ) betaMemory.getTupleMemory();
+            assertTrue( tupleHashTable.isIndexed() );
+            Index index = tupleHashTable.getIndex();
+            
+            for ( int i = 0; i < indexedPositions.length; i++ ) {
+                checkSameConstraintForIndex(  constraints[indexedPositions[i]], index.getFieldIndex(i) );
+            }
+            
+            FactHandleIndexHashTable factHashTable =  ( FactHandleIndexHashTable ) betaMemory.getFactHandleMemory();
+            assertTrue( factHashTable.isIndexed() );
+            index = factHashTable.getIndex();   
+            
+            for ( int i = 0; i < indexedPositions.length; i++ ) {
+                checkSameConstraintForIndex(  constraints[indexedPositions[i]], index.getFieldIndex(i) );
+            }           
+        } else {
+            TupleHashTable tupleHashTable =  ( TupleHashTable ) betaMemory.getTupleMemory();
+            assertFalse( tupleHashTable.isIndexed() );
+            
+            FactHashTable factHashTable =  ( FactHashTable ) betaMemory.getFactHandleMemory();
+            assertFalse( factHashTable.isIndexed() );            
+        }        
+    }
+    
+    
+    protected void  checkSameConstraintForIndex(VariableConstraint constraint, FieldIndex fieldIndex) {
+        assertSame( constraint.getRequiredDeclarations()[0], fieldIndex.getDeclaration() );
+        assertSame( constraint.getEvaluator(), fieldIndex.getEvaluator() );
+        assertSame( constraint.getFieldExtractor(), fieldIndex.getExtractor() );            
+    }     
+    
+    protected VariableConstraint[] convertToConstraints(LinkedList list) {
+        final VariableConstraint[] array = new VariableConstraint[list.size()];
+        int i = 0;
+        for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
+            array[i++] = (VariableConstraint) entry.getObject();
+        }        
+        return array;
+    }
+}

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DefaultBetaConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DefaultBetaConstraintsTest.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DefaultBetaConstraintsTest.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -1,101 +1,69 @@
 package org.drools.common;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.drools.Cheese;
-import org.drools.Person;
-import org.drools.RuleBaseConfiguration;
-import org.drools.RuleBaseFactory;
-import org.drools.base.ClassFieldExtractor;
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.base.ClassObjectType;
-import org.drools.base.FieldFactory;
-import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
-import org.drools.base.evaluators.StringFactory;
-import org.drools.reteoo.BetaMemory;
-import org.drools.reteoo.ReteooRuleBase;
-import org.drools.rule.Declaration;
-import org.drools.rule.LiteralConstraint;
-import org.drools.rule.Pattern;
 import org.drools.rule.VariableConstraint;
-import org.drools.spi.BetaNodeFieldConstraint;
-import org.drools.spi.Evaluator;
-import org.drools.spi.FieldExtractor;
-import org.drools.spi.FieldValue;
-import org.drools.util.FactHandleIndexHashTable;
-import org.drools.util.FactHashTable;
-import org.drools.util.TupleHashTable;
-import org.drools.util.TupleIndexHashTable;
-import org.drools.util.AbstractHashTable.DoubleCompositeIndex;
-import org.drools.util.AbstractHashTable.FieldIndex;
-import org.drools.util.AbstractHashTable.Index;
-import org.drools.util.AbstractHashTable.SingleIndex;
-import org.drools.util.AbstractHashTable.TripleCompositeIndex;
 
-import junit.framework.TestCase;
-
-public class DefaultBetaConstraintsTest extends TestCase {
+public class DefaultBetaConstraintsTest extends BaseBetaConstraintsTest {
     
     public void testNoIndexConstraints() {
         VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );        
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0 };        
-        checkBetaConstraints( constraints );
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );
         
         VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1 };        
-        checkBetaConstraints( constraints );        
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );        
         
         VariableConstraint constraint2 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2 };        
-        checkBetaConstraints( constraints ); 
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class ); 
         
         VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3 };
-        checkBetaConstraints( constraints ); 
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class ); 
         
         VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType4", Operator.NOT_EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 }; 
-        checkBetaConstraints( constraints ); 
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class ); 
         
         VariableConstraint constraint5 = ( VariableConstraint ) getConstraint( "cheeseType5", Operator.NOT_EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3,constraint5 };   
-        checkBetaConstraints( constraints );     
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );     
         
         VariableConstraint constraint6 = ( VariableConstraint ) getConstraint( "cheeseType6", Operator.NOT_EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4, constraint5, constraint6 };   
-        checkBetaConstraints( constraints );             
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );             
     }    
     
     public void testIndexedConstraint() {
         VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );        
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0 };        
-        checkBetaConstraints( constraints );
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );
         
         VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1 };        
-        checkBetaConstraints( constraints );        
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );        
         
         VariableConstraint constraint2 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2 };        
-        checkBetaConstraints( constraints ); 
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class ); 
         
         VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3 };
-        checkBetaConstraints( constraints ); 
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class ); 
         
         VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType4", Operator.EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 }; 
-        checkBetaConstraints( constraints ); 
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class ); 
         
         VariableConstraint constraint5 = ( VariableConstraint ) getConstraint( "cheeseType5", Operator.EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4, constraint5 };   
-        checkBetaConstraints( constraints );     
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );     
         
         VariableConstraint constraint6 = ( VariableConstraint ) getConstraint( "cheeseType6", Operator.EQUAL, "type", Cheese.class );        
         constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4, constraint5, constraint6 };   
-        checkBetaConstraints( constraints );          
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );          
     }        
     
     
@@ -107,7 +75,7 @@
         VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType5", Operator.NOT_EQUAL, "type", Cheese.class );
         
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 };
-        checkBetaConstraints( constraints );    
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );    
     }   
     
     public void testSingleIndexNotFirst() {
@@ -119,7 +87,7 @@
         
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 };
         
-        checkBetaConstraints( constraints );         
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );         
     }    
     
     public void testDoubleIndex() {
@@ -131,7 +99,7 @@
         
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 };
         
-        checkBetaConstraints( constraints );       
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );       
     }   
     
     public void testDoubleIndexNotFirst() {
@@ -143,7 +111,7 @@
         
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 };
         
-        checkBetaConstraints( constraints );       
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );       
     }       
     
     
@@ -156,7 +124,7 @@
         
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 };
         
-        checkBetaConstraints( constraints );               
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );               
     }      
     
     public void testTripleIndexNotFirst() {
@@ -168,82 +136,7 @@
         
         VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint2, constraint3, constraint4 };
         
-        checkBetaConstraints( constraints );               
+        checkBetaConstraints( constraints, DefaultBetaConstraints.class );               
     }     
 
-    private BetaNodeFieldConstraint getConstraint(String identifier,
-                                                  Operator operator,
-                                                  String fieldName,
-                                                  Class clazz) {
-        FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
-                                                                          fieldName,
-                                                                          getClass().getClassLoader() );
-        Declaration declaration = new Declaration( identifier,
-                                                   extractor,
-                                                   new Pattern( 0,
-                                                                new ClassObjectType( clazz ) ) );
-        Evaluator evaluator = StringFactory.getInstance().getEvaluator( operator );
-        return new VariableConstraint( extractor,
-                                       declaration,
-                                       evaluator );
-    }    
-    
-    
-    private void checkBetaConstraints(VariableConstraint[] constraints) {
-        RuleBaseConfiguration config = new RuleBaseConfiguration();
-        int depth = config.getCompositeKeyDepth();
-        
-        List list = new ArrayList();
-
-        // get indexed positions
-        for ( int i = 0; i < constraints.length && list.size() < depth; i++ ) {
-            if ( constraints[i].getEvaluator().getOperator() == Operator.EQUAL ) {
-                list.add( new Integer(i) );
-            }
-        }
-        
-        // convert to array
-        int[] indexedPositions = new int[ list.size() ];
-        for ( int i = 0; i < list.size(); i++ ) {
-            indexedPositions[i] = ( (Integer)list.get( i ) ).intValue(); 
-        }                      
-        
-        DefaultBetaConstraints betaConstraints = new DefaultBetaConstraints(constraints, config );
-        
-        assertEquals( ( indexedPositions.length > 0 ), betaConstraints.isIndexed() );
-        assertEquals(indexedPositions.length-1,  betaConstraints.getIndexCount() );
-        BetaMemory betaMemory = betaConstraints.createBetaMemory( config );        
-        
-        // test tuple side
-        if ( indexedPositions.length > 0 ) {
-            TupleIndexHashTable tupleHashTable =  ( TupleIndexHashTable ) betaMemory.getTupleMemory();
-            assertTrue( tupleHashTable.isIndexed() );
-            Index index = tupleHashTable.getIndex();
-            
-            for ( int i = 0; i < indexedPositions.length; i++ ) {
-                checkSameConstraintForIndex(  constraints[indexedPositions[i]], index.getFieldIndex(i) );
-            }
-            
-            FactHandleIndexHashTable factHashTable =  ( FactHandleIndexHashTable ) betaMemory.getFactHandleMemory();
-            assertTrue( factHashTable.isIndexed() );
-            index = factHashTable.getIndex();   
-            
-            for ( int i = 0; i < indexedPositions.length; i++ ) {
-                checkSameConstraintForIndex(  constraints[indexedPositions[i]], index.getFieldIndex(i) );
-            }           
-        } else {
-            TupleHashTable tupleHashTable =  ( TupleHashTable ) betaMemory.getTupleMemory();
-            assertFalse( tupleHashTable.isIndexed() );
-            
-            FactHashTable factHashTable =  ( FactHashTable ) betaMemory.getFactHandleMemory();
-            assertFalse( factHashTable.isIndexed() );            
-        }        
-    }
-    
-    
-    private void  checkSameConstraintForIndex(VariableConstraint constraint, FieldIndex fieldIndex) {
-        assertSame( constraint.getRequiredDeclarations()[0], fieldIndex.getDeclaration() );
-        assertSame( constraint.getEvaluator(), fieldIndex.getEvaluator() );
-        assertSame( constraint.getFieldExtractor(), fieldIndex.getExtractor() );            
-    }     
 }

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DoubleBetaConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DoubleBetaConstraintsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DoubleBetaConstraintsTest.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -0,0 +1,35 @@
+package org.drools.common;
+
+import org.drools.Cheese;
+import org.drools.base.evaluators.Operator;
+import org.drools.rule.VariableConstraint;
+
+public class DoubleBetaConstraintsTest extends BaseBetaConstraintsTest {
+
+    public void testAllNoneIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1 };
+        checkBetaConstraints( constraints, DoubleBetaConstraints.class );
+    }   
+    
+    public void testOneIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1 };
+        checkBetaConstraints( constraints, DoubleBetaConstraints.class );
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1 };
+        checkBetaConstraints( constraints, DoubleBetaConstraints.class );
+    }      
+    
+    public void testTwoIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1 };
+        checkBetaConstraints( constraints, DoubleBetaConstraints.class );
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java	2007-08-21 00:51:41 UTC (rev 14396)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -3,83 +3,136 @@
  */
 package org.drools.common;
 
-import org.drools.Person;
-import org.drools.RuleBaseConfiguration;
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.base.ClassFieldExtractorFactory;
-import org.drools.base.ClassObjectType;
+import org.drools.Cheese;
 import org.drools.base.evaluators.Operator;
-import org.drools.base.evaluators.StringFactory;
-import org.drools.rule.Pattern;
-import org.drools.rule.Declaration;
 import org.drools.rule.VariableConstraint;
-import org.drools.spi.BetaNodeFieldConstraint;
-import org.drools.spi.Evaluator;
-import org.drools.spi.FieldExtractor;
 
-import junit.framework.TestCase;
-
 /**
  * @author etirelli
  *
  */
-public class QuadroupleBetaConstraintsTest extends TestCase {
+public class QuadroupleBetaConstraintsTest extends BaseBetaConstraintsTest {
 
-    private RuleBaseConfiguration     conf;
-    private BetaNodeFieldConstraint[] constraints;
+    public void testNoneIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4  };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );
+    }   
+    
+    public void testOneIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );          
+    }   
 
-    /* (non-Javadoc)
-     * @see junit.framework.TestCase#setUp()
-     */
-    protected void setUp() throws Exception {
-        conf = new RuleBaseConfiguration();
+    public void testTwoIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );    
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );   
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );        
+    }    
 
-        constraints = new BetaNodeFieldConstraint[4];
-        Class clazz = Person.class;
-        constraints[0] = getConstraint( "street",
-                                        clazz );
-        constraints[1] = getConstraint( "city",
-                                        clazz );
-        constraints[2] = getConstraint( "state",
-                                        clazz );
-        constraints[3] = getConstraint( "country",
-                                        clazz );
-        super.setUp();
-    }
+    public void testThreeIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );           
+    }      
+    
+    public void testFourIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint4 = ( VariableConstraint ) getConstraint( "cheeseType3", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3, constraint4 };
+        checkBetaConstraints( constraints, QuadroupleBetaConstraints.class );         
+    }     
 
-    private BetaNodeFieldConstraint getConstraint(String fieldName,
-                                                  Class clazz) {
-        FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
-                                                                          fieldName,
-                                                                          getClass().getClassLoader() );
-        Declaration declaration = new Declaration( fieldName,
-                                                   extractor,
-                                                   new Pattern( 0,
-                                                                new ClassObjectType( clazz ) ) );
-        Evaluator evaluator = StringFactory.getInstance().getEvaluator( Operator.EQUAL );
-        return new VariableConstraint( extractor,
-                                       declaration,
-                                       evaluator );
-    }
-
-    /* (non-Javadoc)
-     * @see junit.framework.TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    /**
-     * Test method for {@link org.drools.common.QuadroupleBetaConstraints#QuadroupleBetaConstraints(org.drools.spi.BetaNodeFieldConstraint[], org.drools.RuleBaseConfiguration)}.
-     */
-    public void testQuadroupleBetaConstraints() {
-        try {
-            QuadroupleBetaConstraints qbc = new QuadroupleBetaConstraints( constraints,
-                                                                           conf );
-        } catch ( Exception e ) {
-            fail( "Should not raise any exception: " + e.getMessage() );
-        }
-
-    }
-
 }

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/SingleBetaConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/SingleBetaConstraintsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/SingleBetaConstraintsTest.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -0,0 +1,21 @@
+package org.drools.common;
+
+import org.drools.Cheese;
+import org.drools.base.evaluators.Operator;
+import org.drools.rule.VariableConstraint;
+
+public class SingleBetaConstraintsTest extends BaseBetaConstraintsTest {
+    
+    public void testIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0 };
+        checkBetaConstraints( constraints, SingleBetaConstraints.class );
+    }
+
+    public void testNotIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );                
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0 };
+        checkBetaConstraints( constraints, SingleBetaConstraints.class );
+    }    
+            
+}

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/TripleBetaConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/TripleBetaConstraintsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/TripleBetaConstraintsTest.java	2007-08-21 02:14:51 UTC (rev 14397)
@@ -0,0 +1,86 @@
+package org.drools.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.Cheese;
+import org.drools.RuleBaseConfiguration;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.ClassObjectType;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.evaluators.StringFactory;
+import org.drools.reteoo.BetaMemory;
+import org.drools.rule.Declaration;
+import org.drools.rule.Pattern;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldExtractor;
+import org.drools.util.FactHandleIndexHashTable;
+import org.drools.util.FactHashTable;
+import org.drools.util.TupleHashTable;
+import org.drools.util.TupleIndexHashTable;
+import org.drools.util.AbstractHashTable.FieldIndex;
+import org.drools.util.AbstractHashTable.Index;
+
+import junit.framework.TestCase;
+
+public class TripleBetaConstraintsTest extends BaseBetaConstraintsTest {
+    
+
+    public void testNoneIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );
+    }   
+    
+    public void testOneIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );         
+    }   
+
+    public void testTwoIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.NOT_EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );  
+        
+        constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.NOT_EQUAL, "type", Cheese.class );
+        constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );               
+    }    
+    
+    public void testThreeIndxed() {
+        VariableConstraint constraint0 = ( VariableConstraint ) getConstraint( "cheeseType0", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint1 = ( VariableConstraint ) getConstraint( "cheeseType1", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint constraint3 = ( VariableConstraint ) getConstraint( "cheeseType2", Operator.EQUAL, "type", Cheese.class );
+        VariableConstraint[] constraints = new VariableConstraint[] { constraint0, constraint1, constraint3 };
+        checkBetaConstraints( constraints, TripleBetaConstraints.class );
+    }
+}




More information about the jboss-svn-commits mailing list