@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 static void checkPathMemory( PathMemory pathMemory ) { SegmentMemory[] smems = pathMemory.getSegmentMemories(); if ( !NodeTypeEnums.isLeftTupleSource( smems[0].getRootNode() ) ) { throw new RuntimeException( "The root node for path " + pathMemory + " has to be a LeftTupleSource but is a " + smems[0].getRootNode() ); } if ( !NodeTypeEnums.isTerminalNode( smems[smems.length-1].getTipNode() ) ) { throw new RuntimeException( "The tip node for path " + pathMemory + " has to be a TerminalNode but is a " + smems[smems.length-1].getTipNode() ); } for (int i = 0; i < smems.length; i++) { if (smems[i] == null) { throw new RuntimeException( "Missing segment in position " + i + " for " + pathMemory ); } if (i != smems[i].getPos()) { throw new RuntimeException( "Segment " + smems[i] + " is expected to be in position " + i + " but it is in position " + smems[i].getPos() ); } } } }
@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 ); }
PathMemory pmem2 = ( PathMemory ) wm.getNodeMemory(rtn2); SegmentMemory[] smems1 = pmem1.getSegmentMemories(); SegmentMemory[] smems2 = pmem2.getSegmentMemories(); assertEquals(2, smems1.length ); assertEquals(2, smems2.length ); smems1 = pmem1.getSegmentMemories(); assertEquals(1, smems1.length ); assertSame( sm, smems1[0]);
SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); smems = pm1.getSegmentMemories(); assertEquals(5, smems.length); assertNull( smems[0]); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length); assertNull( smems[0]);
assertEquals( 1, pmem.getSegmentMemories().length ); assertEquals( 1, pmem.getAllLinkedMaskTest() ); SegmentMemory sm = pmem.getSegmentMemories()[0]; assertEquals( 7, sm.getAllLinkedMaskTest() );
assertEquals( 1, pmem.getSegmentMemories().length ); assertEquals( 1, pmem.getAllLinkedMaskTest() ); SegmentMemory sm = pmem.getSegmentMemories()[0]; assertEquals( 5, sm.getAllLinkedMaskTest() );
assertEquals( 3, pmem.getSegmentMemories().length ); assertEquals( 7, pmem.getAllLinkedMaskTest() ); // D is in the exists segment
SegmentMemory s0 = pathMemories[0].getSegmentMemories()[0]; SegmentMemory s1 = pathMemories[0].getSegmentMemories()[1]; SegmentMemory s2 = pathMemories[1].getSegmentMemories()[1]; SegmentMemory s3 = pathMemories[1].getSegmentMemories()[2]; SegmentMemory s4 = pathMemories[2].getSegmentMemories()[2];
assertEquals( 4, pmem.getSegmentMemories().length ); assertEquals( 11, pmem.getAllLinkedMaskTest() ); // the exists eval segment does not need to be linked in
SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); smems = pm1.getSegmentMemories(); assertEquals(5, smems.length); assertNull( smems[0]); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length); assertNull( smems[0]);
SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); SegmentMemory[] smemsP3 = pm3.getSegmentMemories(); assertEquals(3, smemsP3.length); assertNull( smemsP3[0]); smems = pm1.getSegmentMemories(); assertEquals(5, smems.length); assertNull( smems[0]); assertEquals( 4, pm1.getLinkedSegmentMask() ); smems = pm3.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length); assertNull( smems[0]);
SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); smems = pm1.getSegmentMemories(); assertEquals(5, smems.length); assertNull( smems[0]); assertEquals( 6, pm5.getLinkedSegmentMask() ); smems = pm5.getSegmentMemories(); assertEquals(3, smems.length); assertNull( smems[0]);
assertEquals( 1, pmemr2.getAllLinkedMaskTest() ); assertEquals( 2, pmemr2.getLinkedSegmentMask() ); assertEquals( 3, pmemr2.getSegmentMemories().length ); assertFalse( pmemr2.isRuleLinked() ); assertEquals( 3, pmemr3.getSegmentMemories().length ); assertFalse( pmemr3.isRuleLinked() );
assertEquals( 2, rs.getSegmentMemories().length ); assertEquals( 3, rs.getAllLinkedMaskTest() ); assertEquals( 1, rs.getLinkedSegmentMask() );