@Test public void testRuleSegmentsAllLinkedTestMasks() { setUp( JOIN_NODE ); KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(kconf); StatefulKnowledgeSessionImpl wm = new StatefulKnowledgeSessionImpl( 1L, kBase ); PathMemory rs = (PathMemory) wm.getNodeMemory( rtn1 ); assertFalse( rs.isRuleLinked() ); assertEquals( 1, rs.getAllLinkedMaskTest() ); rs = (PathMemory) wm.getNodeMemory( rtn2 ); assertFalse( rs.isRuleLinked() ); assertEquals( 3, rs.getAllLinkedMaskTest() ); rs = (PathMemory) wm.getNodeMemory( rtn3 ); assertFalse( rs.isRuleLinked() ); assertEquals( 7, rs.getAllLinkedMaskTest() ); }
@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 ); }
public Memory createMemory(final RuleBaseConfiguration config, InternalWorkingMemory wm) { return new PathMemory(null, null); }
assertEquals( 1, pmemr2.getAllLinkedMaskTest() ); assertEquals( 2, pmemr2.getLinkedSegmentMask() ); assertEquals( 3, pmemr2.getSegmentMemories().length ); assertFalse( pmemr2.isRuleLinked() ); assertEquals( 1, pmemr3.getAllLinkedMaskTest() ); // notice only the first segment links assertEquals( 3, pmemr3.getSegmentMemories().length ); assertFalse( pmemr3.isRuleLinked() ); wm.flushPropagations(); assertTrue( pmemr2.isRuleLinked() ); assertTrue( pmemr3.isRuleLinked() ); assertEquals( 3, pmemr2.getLinkedSegmentMask() ); // b segment never unlinks, as it has no impact on path unlinking anyway assertTrue( pmemr2.isRuleLinked() ); assertEquals( 3, pmemr3.getLinkedSegmentMask() ); // b segment never unlinks, as it has no impact on path unlinking anyway assertTrue( pmemr3.isRuleLinked() );
assertEquals( 1, pmem.getSegmentMemories().length ); assertEquals( 1, pmem.getAllLinkedMaskTest() ); SegmentMemory sm = pmem.getSegmentMemories()[0]; assertEquals( 7, sm.getAllLinkedMaskTest() ); assertFalse( pmem.isRuleLinked() ); assertEquals( 7, sm.getLinkedNodeMask() ); assertTrue( sm.isSegmentLinked() ); assertTrue( pmem.isRuleLinked() );
SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); assertEquals( 2, sm.getPos() ); assertEquals( 4, sm.getSegmentPosMaskBit() ); assertEquals( 4, pm1.getLinkedSegmentMask() ); smems = pm1.getSegmentMemories(); assertEquals(5, smems.length); assertNull( smems[0]); assertEquals( 3, sm.getPos() ); assertEquals( 8, sm.getSegmentPosMaskBit() ); assertEquals( 8, pm1.getLinkedSegmentMask() ); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length); assertNull( smems[0]);
assertEquals( 3, pmem.getSegmentMemories().length ); assertEquals( 7, pmem.getAllLinkedMaskTest() ); // D is in the exists segment
assertEquals( 1, pmem.getAllLinkedMaskTest() ); assertEquals( 0, pmem.getLinkedSegmentMask() ); assertFalse( pmem.isRuleLinked() ); assertTrue( smem.isSegmentLinked() ); assertEquals( 1, pmem.getLinkedSegmentMask() ); assertTrue( pmem.isRuleLinked() ); assertEquals( 1, pmem.getLinkedSegmentMask() ); assertTrue( pmem.isRuleLinked() );
n8.assertObject( f1, context, wm ); assertFalse( rtn1Rs.isRuleLinked() ); assertFalse( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() ); assertTrue( bm.getSegmentMemory().isSegmentLinked() ); assertTrue( rtn1Rs.isRuleLinked() ); assertFalse( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() ); assertTrue( bm.getSegmentMemory().isSegmentLinked() ); assertTrue( rtn1Rs.isRuleLinked() ); assertTrue( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() ); assertTrue( bm.getSegmentMemory().isSegmentLinked() ); assertTrue( rtn1Rs.isRuleLinked() ); assertTrue( rtn2Rs.isRuleLinked() ); assertTrue( rtn3Rs.isRuleLinked() ); assertFalse( rtn1Rs.isRuleLinked() ); assertFalse( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() );
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(p0Mask == 3, pathMemories[0].isRuleLinked()); assertEquals(p1Mask == 7, pathMemories[1].isRuleLinked()); assertEquals(p2Mask == 7, pathMemories[2].isRuleLinked());
SegmentMemory sm = pm.getSegmentMemory(); assertNotNull( sm.getStagedLeftTuples().getInsertFirst() ); assertNotNull( sm.getStagedLeftTuples().getInsertFirst().getStagedNext() );
assertFalse( rs.isRuleLinked() ); //E and F are not inserted yet, so rule is unlinked assertEquals( 2, rs.getSegmentMemories().length ); assertEquals( 3, rs.getAllLinkedMaskTest() ); assertEquals( 1, rs.getLinkedSegmentMask() ); wm.flushPropagations(); assertTrue( rs.isRuleLinked() ); //E and F are now inserted yet, so rule is linked assertEquals( 3, rs.getAllLinkedMaskTest() ); assertEquals( 3, rs.getLinkedSegmentMask() ); assertFalse( rs.isRuleLinked() );
assertEquals( 1, pmem.getSegmentMemories().length ); assertEquals( 1, pmem.getAllLinkedMaskTest() ); SegmentMemory sm = pmem.getSegmentMemories()[0]; assertEquals( 5, sm.getAllLinkedMaskTest() ); assertFalse( pmem.isRuleLinked() ); assertEquals( 7, sm.getLinkedNodeMask() ); // only 5 is needed to link, the 'not' turns on but it has no unfleunce either way assertTrue( sm.isSegmentLinked() ); assertTrue( pmem.isRuleLinked() );
SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); assertEquals( 1, sm.getPos() ); assertEquals( 2, sm.getSegmentPosMaskBit() ); assertEquals( 2, pm1.getLinkedSegmentMask() ); SegmentMemory[] smemsP3 = pm3.getSegmentMemories(); assertEquals(3, smemsP3.length); assertNull( smemsP3[0]); assertEquals( 1, sm.getPos() ); assertEquals( 2, sm.getSegmentPosMaskBit() ); assertEquals( 2, pm1.getLinkedSegmentMask() ); smems = pm1.getSegmentMemories(); assertEquals(5, smems.length); assertNull( smems[0]); assertEquals( 2, sm.getPos() ); assertEquals( 4, sm.getSegmentPosMaskBit() ); assertEquals( 4, pm1.getLinkedSegmentMask() ); smems = pm3.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); assertEquals( 2, sm.getPos() );
assertEquals( 4, pmem.getSegmentMemories().length ); assertEquals( 11, pmem.getAllLinkedMaskTest() ); // the exists eval segment does not need to be linked in
n8.assertObject( f1, context, wm ); assertFalse( rtn1Rs.isRuleLinked() ); assertFalse( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() ); assertTrue( bm.getSegmentMemory().isSegmentLinked() ); assertTrue( rtn1Rs.isRuleLinked() ); assertFalse( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() ); assertTrue( bm.getSegmentMemory().isSegmentLinked() ); assertTrue( rtn1Rs.isRuleLinked() ); assertTrue( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() ); assertTrue( bm.getSegmentMemory().isSegmentLinked() ); assertTrue( rtn1Rs.isRuleLinked() ); assertTrue( rtn2Rs.isRuleLinked() ); assertTrue( rtn3Rs.isRuleLinked() ); assertFalse( rtn1Rs.isRuleLinked() ); assertFalse( rtn2Rs.isRuleLinked() ); assertFalse( rtn3Rs.isRuleLinked() );
SegmentMemory[] smems = pm1.getSegmentMemories(); assertEquals(4, smems.length); assertNull( smems[0]); assertEquals( 2, sm.getPos() ); assertEquals( 4, sm.getSegmentPosMaskBit() ); assertEquals( 4, pm1.getLinkedSegmentMask() ); smems = pm1.getSegmentMemories(); assertEquals(5, smems.length); assertNull( smems[0]); assertEquals( 3, sm.getPos() ); assertEquals( 8, sm.getSegmentPosMaskBit() ); assertEquals( 8, pm1.getLinkedSegmentMask() ); smems = pm5.getSegmentMemories(); assertEquals(2, smems.length); assertNull( smems[0]);
@Test public void testRuleSegmentsAllLinkedTestMasks() { setUp( JOIN_NODE ); KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(kconf); StatefulKnowledgeSessionImpl wm = new StatefulKnowledgeSessionImpl( 1L, kBase ); PathMemory rs = (PathMemory) wm.getNodeMemory( rtn1 ); assertFalse( rs.isRuleLinked() ); assertEquals( 1, rs.getAllLinkedMaskTest() ); rs = (PathMemory) wm.getNodeMemory( rtn2 ); assertFalse( rs.isRuleLinked() ); assertEquals( 3, rs.getAllLinkedMaskTest() ); rs = (PathMemory) wm.getNodeMemory( rtn3 ); assertFalse( rs.isRuleLinked() ); assertEquals( 7, rs.getAllLinkedMaskTest() ); }
assertFalse( rs.isRuleLinked() ); assertFalse(rs.isRuleLinked()); wm.insert(new B()); wm.flushPropagations(); assertFalse(rs.isRuleLinked()); wm.insert(new E()); wm.flushPropagations(); assertFalse( rs.isRuleLinked() ); assertTrue( rs.isRuleLinked() ); assertFalse( rs.isRuleLinked() ); assertTrue( rs.isRuleLinked() );
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() ); } } } }