}
@Test
public void testPopulatedSharedToRtn() throws Exception {
KnowledgeBase kbase1 = buildKnowledgeBase("r1", " A() B() C() D() E()\n");
ReteooWorkingMemoryInterface wm = ((StatefulKnowledgeSessionImpl)kbase1.newStatefulKnowledgeSession()).session;
List list = new ArrayList();
wm.setGlobal("list", list);
wm.insert(new A(1));
wm.insert(new A(2));
wm.insert(new B(1));
wm.insert(new C(1));
wm.insert(new D(1));
wm.insert(new E(1));
wm.fireAllRules();
assertEquals( 2, list.size() );
assertEquals( 12, countNodeMemories(wm.getNodeMemories()));
kbase1.addKnowledgePackages( buildKnowledgePackage("r2", " A() B() C() D() E()\n") );
wm.fireAllRules();
assertEquals( 13, countNodeMemories(wm.getNodeMemories()));
assertEquals(4, list.size() );
RuleTerminalNode rtn1 = getRtn("r1", kbase1);
RuleTerminalNode rtn2 = getRtn("r2", kbase1);
PathMemory pmem1 = ( PathMemory ) wm.getNodeMemory(rtn1);
PathMemory pmem2 = ( PathMemory ) wm.getNodeMemory(rtn2);
SegmentMemory[] smems1 = pmem1.getSegmentMemories();
SegmentMemory[] smems2 = pmem2.getSegmentMemories();
assertEquals(2, smems1.length );
assertEquals(2, smems2.length );
assertSame( smems1[0], smems2[0] );
assertNotSame( smems1[1], smems2[1] );
SegmentMemory sm = smems1[0];
assertEquals( smems1[1], sm.getFirst() );
JoinNode eNode1 = ( JoinNode ) rtn1.getLeftTupleSource();
JoinNode eNode2 = ( JoinNode ) rtn2.getLeftTupleSource();
assertSame( eNode1, eNode2 );
pmem1 = ( PathMemory ) wm.getNodeMemory(rtn1);
kbase1.removeRule("org.kie", "r2");
System.out.println( "---" );
assertEquals( 12, countNodeMemories(wm.getNodeMemories()));
assertNull( sm.getFirst() );
pmem1 = ( PathMemory ) wm.getNodeMemory(rtn1);
smems1 = pmem1.getSegmentMemories();
assertEquals(1, smems1.length );
assertSame( sm, smems1[0]);
wm.insert(new A(1));
wm.fireAllRules();
assertEquals( "r1", ((Match)list.get(4)).getRule().getName() );
assertEquals(5, list.size() ); // only one more added, as second rule as removed
}