[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