use of org.drools.core.reteoo.RuleTerminalNode in project drools by kiegroup.
the class AddRuleTest method testSplitOneBeforeCreatedSegment.
@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");
kbase1.addPackages(buildKnowledgePackage("r2", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(2;) E(1;) E(2;)\n"));
kbase1.addPackages(buildKnowledgePackage("r3", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(2;)\n"));
kbase1.addPackages(buildKnowledgePackage("r4", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) \n"));
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase1.newKieSession());
List list = new ArrayList();
wm.setGlobal("list", list);
wm.insert(new D(1));
wm.insert(new D(2));
wm.flushPropagations();
RuleTerminalNode rtn1 = getRtn("org.kie.r1", kbase1);
RuleTerminalNode rtn2 = getRtn("org.kie.r2", kbase1);
RuleTerminalNode rtn3 = getRtn("org.kie.r3", kbase1);
RuleTerminalNode rtn4 = getRtn("org.kie.r4", kbase1);
PathMemory pm1 = (PathMemory) wm.getNodeMemory(rtn1);
SegmentMemory[] smems = pm1.getSegmentMemories();
assertEquals(4, smems.length);
assertNull(smems[0]);
assertNull(smems[2]);
assertNull(smems[3]);
SegmentMemory sm = smems[1];
assertEquals(1, sm.getPos());
assertEquals(2, sm.getSegmentPosMaskBit());
assertEquals(2, pm1.getLinkedSegmentMask());
PathMemory pm3 = (PathMemory) wm.getNodeMemory(rtn3);
SegmentMemory[] smemsP3 = pm3.getSegmentMemories();
assertEquals(3, smemsP3.length);
assertNull(smemsP3[0]);
assertNull(smemsP3[2]);
sm = smems[1];
assertEquals(1, sm.getPos());
assertEquals(2, sm.getSegmentPosMaskBit());
assertEquals(2, pm1.getLinkedSegmentMask());
kbase1.addPackages(buildKnowledgePackage("r5", " A(1;) A(2;) B(1;) B(2;) \n"));
smems = pm1.getSegmentMemories();
assertEquals(5, smems.length);
assertNull(smems[0]);
assertNull(smems[1]);
assertNull(smems[3]);
assertNull(smems[4]);
sm = smems[2];
assertEquals(2, sm.getPos());
assertEquals(4, sm.getSegmentPosMaskBit());
assertEquals(4, pm1.getLinkedSegmentMask());
smems = pm3.getSegmentMemories();
assertEquals(4, smems.length);
assertNull(smems[0]);
assertNull(smems[1]);
assertNull(smems[3]);
sm = smems[2];
assertEquals(2, sm.getPos());
assertEquals(4, sm.getSegmentPosMaskBit());
assertEquals(4, pm1.getLinkedSegmentMask());
RuleTerminalNode rtn5 = getRtn("org.kie.r5", kbase1);
PathMemory pm5 = (PathMemory) wm.getNodeMemory(rtn5);
smems = pm5.getSegmentMemories();
assertEquals(2, smems.length);
assertNull(smems[0]);
assertNull(smems[1]);
}
use of org.drools.core.reteoo.RuleTerminalNode in project drools by kiegroup.
the class AddRuleTest method testSplitOnCreatedSegment.
@Test
public void testSplitOnCreatedSegment() throws Exception {
// this test splits D1 and D2 on the later add rule
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");
kbase1.addPackages(buildKnowledgePackage("r2", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(2;) E(1;) E(2;)\n"));
kbase1.addPackages(buildKnowledgePackage("r3", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(2;)\n"));
kbase1.addPackages(buildKnowledgePackage("r4", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) \n"));
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase1.newKieSession());
List list = new ArrayList();
wm.setGlobal("list", list);
wm.insert(new D(1));
wm.insert(new D(2));
wm.insert(new D(3));
wm.flushPropagations();
RuleTerminalNode rtn1 = getRtn("org.kie.r1", kbase1);
PathMemory pm1 = (PathMemory) wm.getNodeMemory(rtn1);
assertEquals(2, pm1.getLinkedSegmentMask());
SegmentMemory[] smems = pm1.getSegmentMemories();
assertEquals(4, smems.length);
assertNull(smems[0]);
assertNull(smems[2]);
assertNull(smems[3]);
SegmentMemory sm = smems[1];
assertEquals(1, sm.getPos());
assertEquals(2, sm.getSegmentPosMaskBit());
kbase1.addPackages(buildKnowledgePackage("r5", " A(1;) A(2;) B(1;) B(2;) C(1;) C(2;) D(1;) D(3;)\n"));
wm.fireAllRules();
assertEquals(6, pm1.getLinkedSegmentMask());
smems = pm1.getSegmentMemories();
assertEquals(5, smems.length);
assertNull(smems[0]);
assertNull(smems[3]);
assertNull(smems[4]);
sm = smems[1];
assertEquals(1, sm.getPos());
assertEquals(2, sm.getSegmentPosMaskBit());
sm = smems[2];
assertEquals(2, sm.getPos());
assertEquals(4, sm.getSegmentPosMaskBit());
RuleTerminalNode rtn5 = getRtn("org.kie.r5", kbase1);
PathMemory pm5 = (PathMemory) wm.getNodeMemory(rtn5);
assertEquals(6, pm5.getLinkedSegmentMask());
smems = pm5.getSegmentMemories();
assertEquals(3, smems.length);
assertNull(smems[0]);
sm = smems[1];
assertEquals(1, sm.getPos());
assertEquals(2, sm.getSegmentPosMaskBit());
sm = smems[2];
assertEquals(2, sm.getPos());
assertEquals(4, sm.getSegmentPosMaskBit());
}
use of org.drools.core.reteoo.RuleTerminalNode in project drools by kiegroup.
the class AddRuleTest method testPopulatedSharedToRtn.
@Test
public void testPopulatedSharedToRtn() throws Exception {
InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A() B() C() D() E()\n");
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase1.newKieSession());
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());
kbase1.addPackages(buildKnowledgePackage("r2", " A() B() C() D() E()\n"));
ObjectTypeNode eotn = getObjectTypeNode(kbase1, E.class);
JoinNode eNode = (JoinNode) eotn.getObjectSinkPropagator().getSinks()[0];
RuleTerminalNode rtn = (RuleTerminalNode) eNode.getSinkPropagator().getLastLeftTupleSink();
PathMemory pm = (PathMemory) wm.getNodeMemory(rtn);
SegmentMemory sm = pm.getSegmentMemory();
assertNotNull(sm.getStagedLeftTuples().getInsertFirst());
assertNotNull(sm.getStagedLeftTuples().getInsertFirst().getStagedNext());
assertNull(sm.getStagedLeftTuples().getInsertFirst().getStagedNext().getStagedNext());
wm.fireAllRules();
assertNull(sm.getStagedLeftTuples().getInsertFirst());
assertEquals(4, list.size());
assertEquals("r1", ((Match) list.get(0)).getRule().getName());
assertEquals("r1", ((Match) list.get(1)).getRule().getName());
assertEquals("r2", ((Match) list.get(2)).getRule().getName());
assertEquals("r2", ((Match) list.get(3)).getRule().getName());
}
use of org.drools.core.reteoo.RuleTerminalNode in project drools by kiegroup.
the class RemoveRuleTest method testPathMemorySizeAfterSegmentMerge.
@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);
}
Aggregations