@Test public void testPathMemorySizeAfterSegmentMergeNonInitialized() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) B(1;)\n" ); kbase1.addPackages( buildKnowledgePackage("r2", " A(1;)\n") ); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase1.newKieSession()); RuleTerminalNode rtn1 = getRtn( "org.kie.r1", kbase1 ); RuleTerminalNode rtn2 = getRtn( "org.kie.r2", kbase1 ); assertEquals( 2, wm.getNodeMemory(rtn1).getSegmentMemories().length ); assertEquals( 2, wm.getNodeMemory(rtn2).getSegmentMemories().length ); kbase1.removeRule("org.kie", "r2"); assertEquals( 1, wm.getNodeMemory(rtn1).getSegmentMemories().length ); }
private void initPathMemories() { pathMemories = new PathMemory[3]; NamedEntryPoint ep = (NamedEntryPoint)epManipulators[8].getEntryPoiny(); InternalWorkingMemory wm = ((NamedEntryPoint)ep).getInternalWorkingMemory(); ObjectTypeNode otn = ((NamedEntryPoint)ep).getEntryPointNode().getObjectTypeNodes().values().iterator().next(); AlphaNode alpha = (AlphaNode)otn.getObjectSinkPropagator().getSinks()[0]; ObjectSink[] sinks = alpha.getObjectSinkPropagator().getSinks(); for (int i = 0; i < sinks.length; i++) { BetaNode beta = (BetaNode)sinks[i]; RuleTerminalNode rtn = (RuleTerminalNode)beta.getSinkPropagator().getSinks()[0]; pathMemories[i] = ( PathMemory ) wm.getNodeMemory(rtn); } } }
@Test public void testSingleEmptyLhs() throws Exception { KieBase kbase = buildKnowledgeBase(" "); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode aotn = getObjectTypeNode(kbase, InitialFactImpl.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtn = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[0]; wm.insert( new LinkingTest.A() ); wm.flushPropagations(); // LiaNode and Rule are in same segment LiaNodeMemory liaMem = ( LiaNodeMemory ) wm.getNodeMemory( liaNode ); SegmentMemory smem = liaMem.getSegmentMemory(); assertEquals( liaNode, smem.getRootNode() ); assertEquals( rtn, smem.getTipNode() ); assertNull( smem.getNext() ); assertNull( smem.getFirst() ); }
@Test public void testSinglePattern() throws Exception { KieBase kbase = buildKnowledgeBase(" A() \n"); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode aotn = getObjectTypeNode(kbase, LinkingTest.A.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtn = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[0]; wm.insert(new LinkingTest.A()); wm.flushPropagations(); // LiaNode and Rule are in same segment LiaNodeMemory liaMem = ( LiaNodeMemory ) wm.getNodeMemory( liaNode ); SegmentMemory smem = liaMem.getSegmentMemory(); assertEquals( liaNode, smem.getRootNode() ); assertEquals( rtn, smem.getTipNode() ); assertNull( smem.getNext() ); assertNull( smem.getFirst() ); }
@Test public void testPathMemorySizeAfterSegmentMerge() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) B(1;)\n" ); kbase1.addPackages( buildKnowledgePackage("r2", " A(1;)\n") ); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase1.newKieSession()); List list = new ArrayList(); wm.setGlobal("list", list); // trigger segment initialization wm.insert(new A(1)); wm.insert(new B(1)); wm.fireAllRules(); RuleTerminalNode rtn1 = getRtn( "org.kie.r1", kbase1 ); RuleTerminalNode rtn2 = getRtn( "org.kie.r2", kbase1 ); assertEquals( 2, wm.getNodeMemory(rtn1).getSegmentMemories().length ); assertEquals( 2, wm.getNodeMemory(rtn2).getSegmentMemories().length ); kbase1.removeRule("org.kie", "r2"); assertEquals( 1, wm.getNodeMemory(rtn1).getSegmentMemories().length ); }
AlphaNode alpha = (AlphaNode)otn.getObjectSinkPropagator().getSinks()[0]; BetaNode beta = (BetaNode)alpha.getObjectSinkPropagator().getSinks()[0]; BetaMemory memory = (BetaMemory) wm.getNodeMemory(beta); memory.getSegmentMemory();
@Test public void testReactiveDeleteOnLia() { final String drl = final LeftInputAdapterNode lian = (LeftInputAdapterNode)otn.getObjectSinkPropagator().getSinks()[0]; final ReactiveFromNode from1 = (ReactiveFromNode)lian.getSinkPropagator().getSinks()[0]; final ReactiveFromNode from2 = (ReactiveFromNode)from1.getSinkPropagator().getSinks()[0]; final ReactiveFromNode from3 = (ReactiveFromNode)from2.getSinkPropagator().getSinks()[0]; final BetaMemory betaMemory = ( (InternalWorkingMemory) ksession ).getNodeMemory(from3).getBetaMemory();
@Test public void testPopulatedSharedToRtn() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A() B() C() D() E()\n"); PathMemory pmem1 = ( PathMemory ) wm.getNodeMemory(rtn1); PathMemory pmem2 = ( PathMemory ) wm.getNodeMemory(rtn2); assertSame( eNode1, eNode2 ); pmem1 = ( PathMemory ) wm.getNodeMemory(rtn1); kbase1.removeRule("org.kie", "r2"); System.out.println( "---" ); assertNull( sm.getFirst() ); pmem1 = ( PathMemory ) wm.getNodeMemory(rtn1); smems1 = pmem1.getSegmentMemories(); assertEquals(1, smems1.length );
@Test public void testNotNodeDoesNotUnlinksWithConstriants() { String str = ""; wm.setGlobal( "list", list ); LeftInputAdapterNode aNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; NotNode bNode = ( NotNode) aNode.getSinkPropagator().getSinks()[0]; JoinNode cNode = ( JoinNode) bNode.getSinkPropagator().getSinks()[0]; LiaNodeMemory amem = ( LiaNodeMemory ) wm.getNodeMemory( aNode );
@Test public void testSplitTwoBeforeCreatedSegment() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(2;) E(1;) E(2;)\n" ); RuleTerminalNode rtn4 = getRtn( "org.kie.r4", kbase1 ); PathMemory pm1 = (PathMemory) wm.getNodeMemory(rtn1); SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); PathMemory pm5 = (PathMemory) wm.getNodeMemory(rtn5); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length);
@Test public void testPopulatedSingleRuleNoSharing() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; LiaNodeMemory lm = ( LiaNodeMemory ) wm.getNodeMemory(liaNode); SegmentMemory sm = lm.getSegmentMemory(); assertNotNull(sm.getStagedLeftTuples().getInsertFirst());
@Test public void testSplitTwoBeforeCreatedSegment() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(2;) E(1;) E(2;)\n" ); RuleTerminalNode rtn4 = getRtn( "org.kie.r4", kbase1 ); PathMemory pm1 = (PathMemory) wm.getNodeMemory(rtn1); SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); PathMemory pm5 = (PathMemory) wm.getNodeMemory(rtn5); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length);
@Test public void testNonReactiveSubNetworkInShareMasks() throws Exception { String str = ""; InternalWorkingMemory wm = ((StatefulKnowledgeSessionImpl)kbase.newKieSession()); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) node.getObjectSinkPropagator().getSinks()[0]; assertEquals( 2, liaNode.getSinkPropagator().size() ); PathMemory pmem = ( PathMemory ) wm.getNodeMemory(rtn); assertEquals( 3, pmem.getSegmentMemories().length ); assertEquals( 7, pmem.getAllLinkedMaskTest() ); // D is in the exists segment BetaMemory bm = ( BetaMemory ) wm.getNodeMemory(dNode);
@Test public void testSplitOneBeforeCreatedSegment() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(2;) E(1;) E(2;)\n" ); RuleTerminalNode rtn4 = getRtn( "org.kie.r4", kbase1 ); PathMemory pm1 = (PathMemory) wm.getNodeMemory(rtn1); SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertEquals( 2, pm1.getLinkedSegmentMask() ); PathMemory pm3 = (PathMemory) wm.getNodeMemory(rtn3); SegmentMemory[] smemsP3 = pm3.getSegmentMemories(); assertEquals(3, smemsP3.length); PathMemory pm5 = (PathMemory) wm.getNodeMemory(rtn5); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length);
@Test public void testPopulatedSharedLiaNode() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A() B(1;) C() D() E()\n"); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; JoinNode b1Node = (JoinNode) liaNode.getSinkPropagator().getFirstLeftTupleSink(); JoinNode b2Node = (JoinNode) liaNode.getSinkPropagator().getLastLeftTupleSink(); JoinNode c1Node = (JoinNode) b1Node.getSinkPropagator().getLastLeftTupleSink(); LiaNodeMemory lm = ( LiaNodeMemory ) wm.getNodeMemory(liaNode); SegmentMemory sm = lm.getSegmentMemory(); BetaMemory b1Mem = ( BetaMemory ) wm.getNodeMemory(b1Node); assertSame( sm.getFirst(), b1Mem.getSegmentMemory()); assertEquals( 3, b1Mem.getLeftTupleMemory().size() ); assertEquals( 1, b1Mem.getRightTupleMemory().size() ); BetaMemory b2Mem = ( BetaMemory ) wm.getNodeMemory(b2Node); SegmentMemory b2Smem = sm.getFirst().getNext(); assertSame( b2Smem, b2Mem.getSegmentMemory()); assertEquals(6, list.size() ); BetaMemory c1Mem = ( BetaMemory ) wm.getNodeMemory(c1Node); assertSame( b1Mem.getSegmentMemory(), c1Mem.getSegmentMemory() ); assertNotSame(b1Mem.getSegmentMemory(), b2Mem.getSegmentMemory());
@Test public void testSplitOnCreatedSegment() throws Exception { PathMemory pm1 = (PathMemory) wm.getNodeMemory(rtn1); assertEquals( 2, pm1.getLinkedSegmentMask() ); SegmentMemory[] smems = pm1.getSegmentMemories(); PathMemory pm5 = (PathMemory) wm.getNodeMemory(rtn5); assertEquals( 6, pm5.getLinkedSegmentMask() );
@Test public void testPopulatedRuleMidwayShare() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A() B() C(1;) D() E()\n"); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; JoinNode bNode = (JoinNode) liaNode.getSinkPropagator().getFirstLeftTupleSink(); JoinNode c2Node = (JoinNode) bNode.getSinkPropagator().getLastLeftTupleSink(); LiaNodeMemory lm = ( LiaNodeMemory ) wm.getNodeMemory(liaNode); SegmentMemory sm = lm.getSegmentMemory(); BetaMemory c1Mem = ( BetaMemory ) wm.getNodeMemory(c1Node); assertSame( sm.getFirst(), c1Mem.getSegmentMemory()); assertEquals( 3, c1Mem.getLeftTupleMemory().size() ); assertEquals( 1, c1Mem.getRightTupleMemory().size() ); BetaMemory c2Mem = ( BetaMemory ) wm.getNodeMemory(c2Node); SegmentMemory c2Smem = sm.getFirst().getNext(); assertSame( c2Smem, c2Mem.getSegmentMemory());
@Test public void testNonReactiveSubNetworkOwnSegmentMasks() throws Exception { String str = ""; InternalWorkingMemory wm = ((StatefulKnowledgeSessionImpl)kbase.newKieSession()); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) node.getObjectSinkPropagator().getSinks()[0]; assertEquals( 2, liaNode.getSinkPropagator().size() ); PathMemory pmem = ( PathMemory ) wm.getNodeMemory(rtn); assertEquals( 4, pmem.getSegmentMemories().length ); assertEquals( 11, pmem.getAllLinkedMaskTest() ); // the exists eval segment does not need to be linked in RightInputAdapterNode.RiaNodeMemory riaMem = (RightInputAdapterNode.RiaNodeMemory) wm.getNodeMemory((MemoryFactory) exists1n.getRightInput()); assertEquals( 2, riaMem.getRiaPathMemory().getAllLinkedMaskTest() ); // second segment must be linked in assertEquals( 2, riaMem.getRiaPathMemory().getSegmentMemories().length ); riaMem = (RightInputAdapterNode.RiaNodeMemory) wm.getNodeMemory((MemoryFactory) exists2n.getRightInput()); assertEquals( 0, riaMem.getRiaPathMemory().getAllLinkedMaskTest() ); // no segments to be linked in
@Test public void testNotNodeUnlinksWithNoConstriants() { String str = ""; wm.setGlobal( "list", list ); LeftInputAdapterNode aNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; NotNode bNode = ( NotNode) aNode.getSinkPropagator().getSinks()[0]; JoinNode cNode = ( JoinNode) bNode.getSinkPropagator().getSinks()[0]; LiaNodeMemory amem = ( LiaNodeMemory ) wm.getNodeMemory( aNode );
@Test public void testPopulatedSingleRuleNoSharing() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); wm.insert(new A(1)); wm.insert(new B(1)); wm.insert(new C(1)); wm.insert(new C(2)); wm.insert(new D(1)); wm.insert(new E(1)); wm.fireAllRules(); kbase.addPackages( buildKnowledgePackage("r1", " A() B() C(object == 2) D() E()\n") ); List list = new ArrayList(); wm.setGlobal("list", list); ObjectTypeNode aotn = getObjectTypeNode(kbase, A.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; LiaNodeMemory lm = ( LiaNodeMemory ) wm.getNodeMemory(liaNode); SegmentMemory sm = lm.getSegmentMemory(); assertNotNull(sm.getStagedLeftTuples().getInsertFirst()); wm.fireAllRules(); assertNull(sm.getStagedLeftTuples().getInsertFirst()); assertEquals(1, list.size() ); assertEquals( "r1", ((Match)list.get(0)).getRule().getName() ); }