Skip to content

Commit

Permalink
[DROOLS-594] fix path mask initialization when a segment as an accumu…
Browse files Browse the repository at this point in the history
…late as last node
  • Loading branch information
mariofusco committed Sep 9, 2014
1 parent 9d00a9c commit e1c0efa
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 22 deletions.
@@ -1,25 +1,5 @@
package org.drools.compiler.integrationtests;

import static org.hamcrest.CoreMatchers.is;
import static org.mockito.Mockito.*;
import static org.junit.Assert.assertThat;

import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.drools.compiler.Cheese;
import org.drools.compiler.Cheesery;
import org.drools.compiler.CommonTestMethodBase;
Expand Down Expand Up @@ -59,9 +39,30 @@
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;
import org.kie.internal.utils.KieHelper;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;

import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import static org.hamcrest.CoreMatchers.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class AccumulateTest extends CommonTestMethodBase {

@Test (timeout = 10000)
Expand Down Expand Up @@ -2613,6 +2614,42 @@ public boolean supportsReverse() {
public Class<?> getResultType() {
return Number.class;
}
}
}

@Test
public void testAccumulateWithSharedNode() throws Exception {
// DROOLS-594
String drl =
"rule A when" +
" Double() " +
"then " +
"end " +
"rule B " +
"when " +
" Double() " +
" String() " +
" $list : java.util.List( this not contains \"XX\" ) " +
" $sum : Double( ) from accumulate ( $i : Integer(), " +
" sum( $i ) ) " +
"then " +
" $list.add( \"XX\" );\n" +
" update( $list );\n" +
" System.out.println(\"FIRED\");\n" +
"end ";

KieHelper helper = new KieHelper();
helper.addContent( drl, ResourceType.DRL );
KieSession ksession = helper.build().newKieSession();

List<String> list = new java.util.ArrayList();
ksession.insert(list);

ksession.insert(42.0);
ksession.insert(9000);
ksession.insert("a");
ksession.insert("b");
ksession.fireAllRules();

assertEquals(1, list.size());
}
}
Expand Up @@ -149,9 +149,9 @@ public static void initPathMemory(PathMemory pmem, LeftTupleSource tupleSource,
}

if ( updateAllLinkedTest && updateBitInNewSegment && NodeTypeEnums.isBetaNode( tupleSource )) {
updateBitInNewSegment = false;
BetaNode bn = ( BetaNode) tupleSource;
if ( bn.isRightInputIsRiaNode() ) {
updateBitInNewSegment = false;
// only ria's without reactive subnetworks can be disabled and thus need checking
// The getNodeMemory will7 call this method recursive for sub networks it reaches
RiaNodeMemory rnmem = ( RiaNodeMemory ) wm.getNodeMemory((MemoryFactory) bn.getRightInput());
Expand All @@ -160,6 +160,7 @@ public static void initPathMemory(PathMemory pmem, LeftTupleSource tupleSource,
}
} else if ( ( !(NodeTypeEnums.NotNode == bn.getType() && !((NotNode)bn).isEmptyBetaConstraints()) &&
NodeTypeEnums.AccumulateNode != bn.getType()) ) {
updateBitInNewSegment = false;
// non empty not nodes and accumulates can never be disabled and thus don't need checking
allLinkedTestMask = allLinkedTestMask | 1;
}
Expand Down

0 comments on commit e1c0efa

Please sign in to comment.