[jboss-svn-commits] JBL Code SVN: r6634 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/reteoo main/java/org/drools/util test/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Oct 5 19:36:24 EDT 2006
Author: mark.proctor at jboss.com
Date: 2006-10-05 19:36:19 -0400 (Thu, 05 Oct 2006)
New Revision: 6634
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/TupleSourceTest.java
Log:
JBRULES-498 Optimised HashMap implementations
-Fixed unit tests for ObjectSource and TupleSource
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java 2006-10-05 23:01:04 UTC (rev 6633)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectHashTable.java 2006-10-05 23:36:19 UTC (rev 6634)
@@ -14,6 +14,8 @@
public boolean remove(InternalFactHandle handle);
public boolean contains(InternalFactHandle handle);
+ public boolean isIndexed();
+
public int size();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2006-10-05 23:01:04 UTC (rev 6633)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2006-10-05 23:36:19 UTC (rev 6634)
@@ -107,10 +107,12 @@
* The <code>ObjectSink</code> to remove
*/
protected void removeObjectSink(final ObjectSink objectSink) {
+ assert this.sink == null : "Cannot remove a sink, when the list of sinks is null";
+
if ( this.sink.getClass() == SingleObjectSinkAdapter.class ) {
this.sink = null;
} else {
- CompositeObjectSinkAdapter sinkAdapter = ( CompositeObjectSinkAdapter ) objectSink;
+ CompositeObjectSinkAdapter sinkAdapter = ( CompositeObjectSinkAdapter ) this.sink;
sinkAdapter.removeObjectSink( objectSink );
if ( sinkAdapter.size() == 1 ) {
this.sink = new SingleObjectSinkAdapter( sinkAdapter.getSinks()[0] );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java 2006-10-05 23:01:04 UTC (rev 6633)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHashTable.java 2006-10-05 23:36:19 UTC (rev 6634)
@@ -119,4 +119,8 @@
int dataSize) {
return hashCode & (dataSize - 1);
}
+
+ public boolean isIndexed() {
+ return false;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java 2006-10-05 23:01:04 UTC (rev 6633)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FieldIndexHashTable.java 2006-10-05 23:36:19 UTC (rev 6634)
@@ -70,6 +70,10 @@
this.hashCodeValueIterator.reset( hashCode );
return this.iterator();
}
+
+ public boolean isIndexed() {
+ return true;
+ }
/**
* Fast re-usable iterator
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java 2006-10-05 23:01:04 UTC (rev 6633)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java 2006-10-05 23:36:19 UTC (rev 6634)
@@ -28,7 +28,6 @@
ObjectSinkNode {
private final List asserted = new ArrayList();
private final List retracted = new ArrayList();
- private final List modified = new ArrayList();
private ObjectSinkNode previousObjectSinkNode;
private ObjectSinkNode nextObjectSinkNode;
@@ -45,13 +44,6 @@
this.retracted.add( new Object[]{handle, context, workingMemory} );
}
- public void modifyObject(final InternalFactHandle handle,
- final PropagationContext context,
- final InternalWorkingMemory workingMemory) {
- this.modified.add( new Object[]{handle, context, workingMemory} );
-
- }
-
public List getAsserted() {
return this.asserted;
}
@@ -60,10 +52,6 @@
return this.retracted;
}
- public List getModified() {
- return this.modified;
- }
-
/**
* Returns the next node
* @return
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java 2006-10-05 23:01:04 UTC (rev 6633)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java 2006-10-05 23:36:19 UTC (rev 6634)
@@ -16,6 +16,8 @@
* limitations under the License.
*/
+import java.lang.reflect.Field;
+
import org.drools.DroolsTestCase;
import org.drools.FactHandle;
import org.drools.RuleBaseFactory;
@@ -38,160 +40,45 @@
source.getAttached() );
}
- public void testAddObjectSink() {
+ public void testAddObjectSink() throws Exception {
final MockObjectSource source = new MockObjectSource( 15 );
- assertLength( 0,
- source.getObjectSinksAsList() );
+
+ // We need to re-assign this var each time the sink changes references
+ Field field = ObjectSource.class.getDeclaredField( "sink" );
+ field.setAccessible( true );
+ ObjectSinkPropagator sink = ( ObjectSinkPropagator ) field.get( source );
+
+ assertNull( sink );
- source.addObjectSink( new MockObjectSink() );
- assertLength( 1,
- source.getObjectSinksAsList() );
+ MockObjectSink sink1 = new MockObjectSink();
+ source.addObjectSink( sink1 );
+ sink = ( ObjectSinkPropagator ) field.get( source );
+ assertSame( SingleObjectSinkAdapter.class, sink.getClass() );
+ assertEquals( 1,
+ sink.getSinks().length );
- source.addObjectSink( new MockObjectSink() );
- assertLength( 2,
- source.getObjectSinksAsList() );
- }
-
- public void testPropagateAssertObject() throws Exception {
- final Rule rule = new Rule( "test-rule" );
- final PropagationContext context = new PropagationContextImpl( 0,
- PropagationContext.ASSERTION,
- null,
- null );
- final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
- (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
-
- final MockObjectSource source = new MockObjectSource( 15 );
- final MockObjectSink sink1 = new MockObjectSink();
- source.addObjectSink( sink1 );
- assertLength( 0,
- sink1.getAsserted() );
-
- final DefaultFactHandle f1 = (DefaultFactHandle) workingMemory.assertObject( new Integer( 1 ) );
- source.propagateAssertObject( f1,
- context,
- workingMemory );
-
- assertLength( 1,
- sink1.getAsserted() );
-
- Object[] list = (Object[]) sink1.getAsserted().get( 0 );
- assertEquals( new Integer( 1 ),
- workingMemory.getObject( (DefaultFactHandle) list[0] ) );
-
- final MockObjectSink sink2 = new MockObjectSink();
+ MockObjectSink sink2 = new MockObjectSink();
source.addObjectSink( sink2 );
-
- final DefaultFactHandle f2 = (DefaultFactHandle) workingMemory.assertObject( new Integer( 2 ) );
- source.propagateAssertObject( f2,
- context,
- workingMemory );
-
- assertLength( 2,
- sink1.getAsserted() );
-
- assertLength( 1,
- sink2.getAsserted() );
-
- list = (Object[]) sink1.getAsserted().get( 0 );
- assertEquals( new Integer( 1 ),
- workingMemory.getObject( (FactHandle) list[0] ) );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- list = (Object[]) sink1.getAsserted().get( 1 );
- assertEquals( new Integer( 2 ),
- workingMemory.getObject( (FactHandle) list[0] ) );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- list = (Object[]) sink2.getAsserted().get( 0 );
- assertEquals( new Integer( 2 ),
- workingMemory.getObject( (FactHandle) list[0] ) );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
+ sink = ( ObjectSinkPropagator ) field.get( source );
+ assertSame( CompositeObjectSinkAdapter.class, sink.getClass() );
+ assertEquals( 2,
+ sink.getSinks().length );
+
+ MockObjectSink sink3 = new MockObjectSink();
+ source.addObjectSink( sink3 );
+ assertSame( CompositeObjectSinkAdapter.class, sink.getClass() );
+ assertEquals( 3,
+ sink.getSinks().length );
+
+ source.removeObjectSink( sink2 );
+ assertSame( CompositeObjectSinkAdapter.class, sink.getClass() );
+ assertEquals( 2,
+ sink.getSinks().length );
+
+ source.removeObjectSink( sink1 );
+ sink = ( ObjectSinkPropagator ) field.get( source );
+ assertSame( SingleObjectSinkAdapter.class, sink.getClass() );
+ assertEquals( 1,
+ sink.getSinks().length );
}
-
- public void testPropagateRetractObject() throws Exception {
- final Rule rule = new Rule( "test-rule" );
- final PropagationContext context = new PropagationContextImpl( 0,
- PropagationContext.RETRACTION,
- null,
- null );
- final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
- (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
-
- final MockObjectSource source = new MockObjectSource( 15 );
-
- // Test propagation with one ObjectSink
- final MockObjectSink sink1 = new MockObjectSink();
- source.addObjectSink( sink1 );
- assertLength( 0,
- sink1.getRetracted() );
-
- source.propagateRetractObject( new DefaultFactHandle( 2,
- "cheese" ),
- context,
- workingMemory );
-
- assertLength( 1,
- sink1.getRetracted() );
-
- Object[] list = (Object[]) sink1.getRetracted().get( 0 );
- assertEquals( new DefaultFactHandle( 2,
- "cheese" ),
- list[0] );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- // Test propagation with two ObjectSinks
- final MockObjectSink sink2 = new MockObjectSink();
- source.addObjectSink( sink2 );
-
- source.propagateRetractObject( new DefaultFactHandle( 3,
- "cheese" ),
- context,
- workingMemory );
-
- assertLength( 2,
- sink1.getRetracted() );
-
- assertLength( 1,
- sink2.getRetracted() );
-
- list = (Object[]) sink1.getRetracted().get( 0 );
- assertEquals( new DefaultFactHandle( 2,
- "cheese" ),
- list[0] );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- list = (Object[]) sink1.getRetracted().get( 1 );
- assertEquals( new DefaultFactHandle( 3,
- "cheese" ),
- list[0] );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- list = (Object[]) sink2.getRetracted().get( 0 );
- assertEquals( new DefaultFactHandle( 3,
- "cheese" ),
- list[0] );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
- }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/TupleSourceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/TupleSourceTest.java 2006-10-05 23:01:04 UTC (rev 6633)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/TupleSourceTest.java 2006-10-05 23:36:19 UTC (rev 6634)
@@ -16,6 +16,8 @@
* limitations under the License.
*/
+import java.lang.reflect.Field;
+
import org.drools.DroolsTestCase;
import org.drools.RuleBaseFactory;
import org.drools.common.DefaultFactHandle;
@@ -38,143 +40,46 @@
source.getAttached() );
}
- public void testAddTupleSink() {
+ public void testAddTupleSink() throws Exception {
final MockTupleSource source = new MockTupleSource( 15 );
- assertLength( 0,
- source.getTupleSinks() );
+
+ // We need to re-assign this var each time the sink changes references
+ Field field = TupleSource.class.getDeclaredField( "sink" );
+ field.setAccessible( true );
+ TupleSinkPropagator sink = ( TupleSinkPropagator ) field.get( source );
+
+ assertNull( sink );
- source.addTupleSink( new MockTupleSink() );
- assertLength( 1,
- source.getTupleSinks() );
+ MockTupleSink sink1 = new MockTupleSink();
+ source.addTupleSink( sink1 );
+ sink = ( TupleSinkPropagator ) field.get( source );
+ assertSame( SingleTupleSinkAdapter.class, sink.getClass() );
+ assertEquals( 1,
+ sink.getSinks().length );
- source.addTupleSink( new MockTupleSink() );
- assertLength( 2,
- source.getTupleSinks() );
- }
-
- public void testPropagateAssertTuple() throws Exception {
- final Rule rule = new Rule( "test-rule" );
- final PropagationContext context = new PropagationContextImpl( 0,
- PropagationContext.RETRACTION,
- null,
- null );
- final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
- (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
-
- final MockTupleSource source = new MockTupleSource( 15 );
- final MockTupleSink sink1 = new MockTupleSink();
-
- source.addTupleSink( sink1 );
- assertLength( 0,
- sink1.getAsserted() );
-
- final Tuple tuple1 = new ReteTuple( new DefaultFactHandle( 1,
- "cheese" ) );
-
- source.propagateAssertTuple( tuple1,
- context,
- workingMemory );
-
- assertLength( 1,
- sink1.getAsserted() );
-
- Object[] list = (Object[]) sink1.getAsserted().get( 0 );
- assertEquals( tuple1,
- list[0] );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- final Tuple tuple2 = new ReteTuple( new DefaultFactHandle( 1,
- "cheese" ) );
-
- final MockTupleSink sink2 = new MockTupleSink();
+ MockTupleSink sink2 = new MockTupleSink();
source.addTupleSink( sink2 );
- // source.ruleAttached();
-
- source.propagateAssertTuple( tuple2,
- context,
- workingMemory );
-
- assertLength( 2,
- sink1.getAsserted() );
-
- assertLength( 1,
- sink2.getAsserted() );
-
- list = (Object[]) sink1.getAsserted().get( 0 );
- assertEquals( tuple1,
- list[0] );
- assertTrue( tuple2.equals( list[0] ) );
-
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- list = (Object[]) sink1.getAsserted().get( 1 );
- assertEquals( tuple2,
- list[0] );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
-
- list = (Object[]) sink2.getAsserted().get( 0 );
- assertEquals( tuple2,
- list[0] );
- assertSame( context,
- list[1] );
- assertSame( workingMemory,
- list[2] );
+ sink = ( TupleSinkPropagator ) field.get( source );
+ assertSame( CompositeTupleSinkAdapter.class, sink.getClass() );
+ assertEquals( 2,
+ sink.getSinks().length );
+
+ MockTupleSink sink3 = new MockTupleSink();
+ source.addTupleSink( sink3 );
+ assertSame( CompositeTupleSinkAdapter.class, sink.getClass() );
+ assertEquals( 3,
+ sink.getSinks().length );
+
+ source.removeTupleSink( sink2 );
+ assertSame( CompositeTupleSinkAdapter.class, sink.getClass() );
+ assertEquals( 2,
+ sink.getSinks().length );
+
+ source.removeTupleSink( sink1 );
+ sink = ( TupleSinkPropagator ) field.get( source );
+ assertSame( SingleTupleSinkAdapter.class, sink.getClass() );
+ assertEquals( 1,
+ sink.getSinks().length );
}
-
- // public void testAttachNewNode() {
- // PropagationContext context = new PropagationContextImpl( 0,
- // PropagationContext.ASSERTION,
- // null,
- // null );
- // WorkingMemoryImpl workingMemory = new WorkingMemoryImpl( new RuleBaseImpl() );
- //
- // MockTupleSource source = new MockTupleSource( 15 );
- //
- // // Add two Tuple Sinks
- // MockTupleSink sink1 = new MockTupleSink();
- // source.addTupleSink( sink1 );
- //
- // MockTupleSink sink2 = new MockTupleSink();
- // source.addTupleSink( sink2 );
- //
- // // Only the last added TupleSink should receive facts
- // source.attachingNewNode = true;
- //
- // ReteTuple tuple1 = new ReteTuple( new FactHandleImpl( 2 ) );
- //
- // source.propagateAssertTuple( tuple1,
- // context,
- // workingMemory );
- //
- // assertLength( 0,
- // sink1.getAsserted() );
- // assertLength( 1,
- // sink2.getAsserted() );
- //
- // // Now all sinks should receive values
- // source.attachingNewNode = false;
- //
- // ReteTuple tuple2 = new ReteTuple( new FactHandleImpl( 3 ) );
- //
- // source.propagateAssertTuple( tuple2,
- // context,
- // workingMemory );
- //
- // /* Both sinks receive one object */
- // assertLength( 1,
- // sink1.getAsserted() );
- // assertLength( 2,
- // sink2.getAsserted() );
- //
- // }
-
+
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list