[jboss-svn-commits] JBL Code SVN: r7104 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/reteoo test/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 25 09:54:09 EDT 2006
Author: michael.neale at jboss.com
Date: 2006-10-25 09:54:03 -0400 (Wed, 25 Oct 2006)
New Revision: 7104
Added:
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
Log:
test coverage improvements
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-25 13:45:29 UTC (rev 7103)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-25 13:54:03 UTC (rev 7104)
@@ -22,12 +22,12 @@
implements
ObjectSinkPropagator {
- private ObjectSinkNodeList otherSinks;
- private ObjectSinkNodeList hashableSinks;
+ ObjectSinkNodeList otherSinks;
+ ObjectSinkNodeList hashableSinks;
- private LinkedList hashedFieldIndexes;
+ LinkedList hashedFieldIndexes;
- private ObjectHashMap hashedSinkMap;
+ ObjectHashMap hashedSinkMap;
private HashKey hashKey;
@@ -158,6 +158,7 @@
public void unHashSinks(final FieldIndex fieldIndex) {
final int index = fieldIndex.getIndex();
+
for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
final AlphaNode alphaNode = (AlphaNode) sink;
final AlphaNodeFieldConstraint fieldConstraint = alphaNode.getConstraint();
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2006-10-25 13:45:29 UTC (rev 7103)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2006-10-25 13:54:03 UTC (rev 7104)
@@ -0,0 +1,297 @@
+package org.drools.reteoo;
+
+import java.lang.reflect.Method;
+
+import junit.framework.TestCase;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.evaluators.StringFactory;
+import org.drools.base.field.ObjectFieldImpl;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.Declaration;
+import org.drools.rule.LiteralConstraint;
+import org.drools.rule.PredicateConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.PropagationContext;
+
+public class CompositeObjectSinkAdapterTest extends TestCase {
+
+ public int la;
+ public int blah;
+ public String wah;
+
+
+
+
+ public void testBeta() {
+ CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
+ MockBetaNode beta = new MockBetaNode(0, null, null);
+ ad.addObjectSink( beta );
+ assertEquals(1, ad.getSinks().length);
+ assertEquals(beta, ad.getSinks()[0]);
+
+ assertEquals(1, ad.otherSinks.size());
+ assertEquals(beta, ad.otherSinks.getFirst());
+
+ assertNull(ad.hashableSinks);
+ assertNull(ad.hashedFieldIndexes);
+ assertNull(ad.hashedSinkMap);
+
+ ad.removeObjectSink( beta );
+ assertNull(ad.otherSinks);
+ assertEquals(0, ad.getSinks().length);
+ }
+
+
+ public void testAlphaWithPredicate() {
+ CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
+ AlphaNode al = new AlphaNode(0, new PredicateConstraint(null, (Declaration[]) null), null);
+ ad.addObjectSink( al );
+
+ assertEquals(1, ad.getSinks().length);
+ assertEquals(1, ad.otherSinks.size());
+ assertEquals(al, ad.otherSinks.getFirst());
+
+ ad.removeObjectSink( al );
+ assertEquals(0, ad.getSinks().length);
+ assertNull(ad.otherSinks);
+
+ }
+
+ public void testSingleAlpha() {
+
+ CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
+ LiteralConstraint lit = new LiteralConstraint(new MockExtractor(),
+ StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+ new ObjectFieldImpl("stilton"));
+ AlphaNode al = new AlphaNode(0, lit, new MockObjectSource(0) );
+
+ ad.addObjectSink( al );
+
+ assertNull(ad.otherSinks);
+ assertNotNull(ad.hashedFieldIndexes);
+ assertEquals(1, ad.hashableSinks.size());
+ assertEquals(al, ad.getSinks()[0]);
+
+
+ ad.removeObjectSink( al );
+ assertNull(ad.otherSinks);
+ assertNull(ad.hashableSinks);
+
+
+ }
+
+ public void testDoubleAlphaWithBeta() {
+
+ CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
+ LiteralConstraint lit = new LiteralConstraint(new MockExtractor(),
+ StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+ new ObjectFieldImpl("stilton"));
+ AlphaNode al = new AlphaNode(0, lit, new MockObjectSource(0) );
+
+ ad.addObjectSink( al );
+
+ assertNull(ad.otherSinks);
+ assertNotNull(ad.hashedFieldIndexes);
+ assertEquals(1, ad.hashableSinks.size());
+ assertEquals(al, ad.getSinks()[0]);
+
+
+ LiteralConstraint lit2 = new LiteralConstraint(new MockExtractor(),
+ StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+ new ObjectFieldImpl("cheddar"));
+ AlphaNode al2 = new AlphaNode(1, lit2, new MockObjectSource(0) );
+
+ ad.addObjectSink( al2 );
+
+ assertNull(ad.otherSinks);
+ assertEquals(2, ad.hashableSinks.size());
+ assertEquals(al, ad.getSinks()[0]);
+ assertEquals(al2, ad.getSinks()[1]);
+
+ //add a beta, just for good measure, make sure it leaves others alone
+ MockBetaNode beta = new MockBetaNode(0, null, null);
+ ad.addObjectSink( beta );
+ assertNotNull(ad.otherSinks);
+ assertEquals(2, ad.hashableSinks.size());
+
+
+ assertEquals(1, ad.otherSinks.size());
+ assertEquals(beta, ad.otherSinks.getFirst());
+
+ ad.removeObjectSink( beta );
+ assertNull(ad.otherSinks);
+ assertEquals(2, ad.hashableSinks.size());
+
+ }
+
+
+ public void testTripleAlpha() {
+ CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
+ LiteralConstraint lit = new LiteralConstraint(new MockExtractor(),
+ StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+ new ObjectFieldImpl("stilton"));
+ AlphaNode al = new AlphaNode(0, lit, new MockObjectSource(0) );
+
+ ad.addObjectSink( al );
+
+ assertNull(ad.otherSinks);
+ assertNotNull(ad.hashedFieldIndexes);
+ assertEquals(1, ad.hashableSinks.size());
+ assertEquals(al, ad.getSinks()[0]);
+
+
+ LiteralConstraint lit2 = new LiteralConstraint(new MockExtractor(),
+ StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+ new ObjectFieldImpl("cheddar"));
+ AlphaNode al2 = new AlphaNode(1, lit2, new MockObjectSource(0) );
+
+ ad.addObjectSink( al2 );
+
+ assertNull(ad.hashedSinkMap);
+ assertEquals(2, ad.hashableSinks.size());
+
+ LiteralConstraint lit3 = new LiteralConstraint(new MockExtractor(),
+ StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+ new ObjectFieldImpl("stinky"));
+ AlphaNode al3 = new AlphaNode(1, lit3, new MockObjectSource(0) );
+ ad.addObjectSink( al3 );
+
+ //this should now be nicely hashed.
+ assertNotNull( ad.hashedSinkMap );
+ assertNull(ad.hashableSinks);
+
+
+
+ //now remove one, check the hashing is undone
+ ad.removeObjectSink( al2 );
+ assertNotNull(ad.hashableSinks);
+ assertNull(ad.hashedSinkMap);
+
+
+ }
+
+
+
+
+
+ static class MockExtractor implements FieldExtractor {
+
+ public int getIndex() {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public boolean getBooleanValue(Object object) {
+ // Auto-generated method stub
+ return false;
+ }
+
+ public byte getByteValue(Object object) {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public char getCharValue(Object object) {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public double getDoubleValue(Object object) {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public Class getExtractToClass() {
+ // Auto-generated method stub
+ return null;
+ }
+
+ public float getFloatValue(Object object) {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public int getIntValue(Object object) {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public long getLongValue(Object object) {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public Method getNativeReadMethod() {
+ // Auto-generated method stub
+ return null;
+ }
+
+ public short getShortValue(Object object) {
+ // Auto-generated method stub
+ return 0;
+ }
+
+ public Object getValue(Object object) {
+ // Auto-generated method stub
+ return null;
+ }
+
+ public ValueType getValueType() {
+ // Auto-generated method stub
+ return null;
+ }
+
+ }
+
+ static class MockBetaNode extends BetaNode {
+
+
+ MockBetaNode(int id,
+ TupleSource leftInput,
+ ObjectSource rightInput) {
+ super( id,
+ leftInput,
+ rightInput );
+ // Auto-generated constructor stub
+ }
+
+ public void updateSink(TupleSink sink,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // Auto-generated method stub
+
+ }
+
+ public void assertTuple(ReteTuple tuple,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // Auto-generated method stub
+
+ }
+
+ public void retractTuple(ReteTuple tuple,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // Auto-generated method stub
+
+ }
+
+ public void assertObject(InternalFactHandle handle,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // Auto-generated method stub
+
+ }
+
+ public void retractObject(InternalFactHandle handle,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // Auto-generated method stub
+
+ }
+
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list