use of org.drools.core.common.InternalWorkingMemory in project drools by kiegroup.
the class PropertySpecificTest method testBetaWith2BetaSinks.
@Test
public void testBetaWith2BetaSinks() {
String rule1 = "B(a == 15) @watch(b) A() @watch(i) C()";
String rule2 = "B(a == 15) @watch(c) A() @watch(j) D()";
KieBase kbase = getKnowledgeBase(rule1, rule2);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
ObjectTypeNode otnB = getObjectTypeNode(kbase, "B");
Class classType = ((ClassObjectType) otnB.getObjectType()).getClassType();
List<String> sp = getSettableProperties(wm, otnB);
AlphaNode alphaNode = (AlphaNode) otnB.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode.getInferredMask());
ObjectTypeNode otnA = getObjectTypeNode(kbase, "A");
BetaNode betaNodeA1 = (BetaNode) otnA.getObjectSinkPropagator().getSinks()[0];
BetaNode betaNodeA2 = (BetaNode) otnA.getObjectSinkPropagator().getSinks()[1];
assertEquals(calculatePositiveMask(classType, list("i"), sp), betaNodeA1.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("i"), sp), betaNodeA1.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("b"), sp), betaNodeA1.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b"), sp), betaNodeA1.getLeftInferredMask());
assertEquals(calculatePositiveMask(classType, list("j"), sp), betaNodeA2.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("j"), sp), betaNodeA2.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("c"), sp), betaNodeA2.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "c"), sp), betaNodeA2.getLeftInferredMask());
ObjectTypeNode otnC = getObjectTypeNode(kbase, "C");
BetaNode betaNodeC = (BetaNode) otnC.getObjectSinkPropagator().getSinks()[0];
assertEquals(EmptyBitMask.get(), betaNodeC.getRightDeclaredMask());
assertEquals(EmptyBitMask.get(), betaNodeC.getRightInferredMask());
assertEquals(AllSetBitMask.get(), betaNodeC.getLeftDeclaredMask());
assertEquals(AllSetBitMask.get(), betaNodeC.getLeftInferredMask());
ObjectTypeNode otnD = getObjectTypeNode(kbase, "D");
BetaNode betaNodeD = (BetaNode) otnC.getObjectSinkPropagator().getSinks()[0];
assertEquals(EmptyBitMask.get(), betaNodeD.getRightDeclaredMask());
assertEquals(EmptyBitMask.get(), betaNodeD.getRightInferredMask());
assertEquals(AllSetBitMask.get(), betaNodeD.getLeftDeclaredMask());
assertEquals(AllSetBitMask.get(), betaNodeD.getLeftInferredMask());
kbase.removeRule("org.drools.compiler.integrationtests", "r1");
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b"), sp), alphaNode.getInferredMask());
}
use of org.drools.core.common.InternalWorkingMemory in project drools by kiegroup.
the class PropertySpecificTest method testSameBetasWith2RTNSinks.
@Test
public void testSameBetasWith2RTNSinks() {
String rule1 = "B(a == 15) C() A()";
String rule2 = "B(a == 15) C() A() @watch(b, c)";
KieBase kbase = getKnowledgeBase(rule1, rule2);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
ObjectTypeNode otnA = getObjectTypeNode(kbase, "A");
Class classType = ((ClassObjectType) otnA.getObjectType()).getClassType();
ObjectTypeNode otnC = getObjectTypeNode(kbase, "C");
List<String> sp = getSettableProperties(wm, otnA);
BetaNode betaNodeC = (BetaNode) otnC.getObjectSinkPropagator().getSinks()[0];
BetaNode betaNodeA1 = (BetaNode) otnA.getObjectSinkPropagator().getSinks()[0];
BetaNode betaNodeA2 = (BetaNode) otnA.getObjectSinkPropagator().getSinks()[1];
assertSame(betaNodeC.getSinkPropagator().getSinks()[0], betaNodeA1);
assertSame(betaNodeC.getSinkPropagator().getSinks()[1], betaNodeA2);
assertSame(betaNodeA1.getLeftTupleSource(), betaNodeC);
assertSame(betaNodeA2.getLeftTupleSource(), betaNodeC);
assertEquals(EmptyBitMask.get(), betaNodeC.getRightDeclaredMask());
assertEquals(EmptyBitMask.get(), betaNodeC.getRightInferredMask());
assertEquals(EmptyBitMask.get(), betaNodeC.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a"), sp), betaNodeC.getLeftInferredMask());
assertEquals(EmptyBitMask.get(), betaNodeA1.getRightDeclaredMask());
assertEquals(EmptyBitMask.get(), betaNodeA1.getRightInferredMask());
assertEquals(AllSetBitMask.get(), betaNodeA1.getLeftDeclaredMask());
assertEquals(AllSetBitMask.get(), betaNodeA1.getLeftInferredMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNodeA2.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNodeA2.getRightInferredMask());
assertEquals(AllSetBitMask.get(), betaNodeA2.getLeftDeclaredMask());
assertEquals(AllSetBitMask.get(), betaNodeA2.getLeftInferredMask());
kbase.removeRule("org.drools.compiler.integrationtests", "r0");
assertEquals(1, betaNodeC.getSinkPropagator().getSinks().length);
}
use of org.drools.core.common.InternalWorkingMemory in project drools by kiegroup.
the class PropertySpecificTest method testComplexBetaSharedAlphaWithWatchesRemoveR1.
@Test
public void testComplexBetaSharedAlphaWithWatchesRemoveR1() {
String rule1 = "$b : B( b == 15) @watch(i) A( a == 10, b == 15 ) @watch(c)";
String rule2 = "$b : B( b == 15) @watch(j) A( a == 10, i == 20 ) @watch(s)";
String rule3 = "$b : B( c == 15) @watch(k) A( a == 10, i == 20, b == 10 ) @watch(j)";
KieBase kbase = getKnowledgeBase(rule1, rule2, rule3);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
kbase.removeRule("org.drools.compiler.integrationtests", "r0");
ObjectTypeNode otn = getObjectTypeNode(kbase, "A");
assertNotNull(otn);
Class classType = ((ClassObjectType) otn.getObjectType()).getClassType();
List<String> sp = getSettableProperties(wm, otn);
AlphaNode alphaNode1 = (AlphaNode) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode1.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "i", "b", "s", "j"), sp), alphaNode1.getInferredMask());
// first share
AlphaNode alphaNode1_1 = (AlphaNode) alphaNode1.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("i"), sp), alphaNode1_1.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "i", "b", "s", "j"), sp), alphaNode1_1.getInferredMask());
BetaNode betaNode1 = (BetaNode) alphaNode1_1.getObjectSinkPropagator().getSinks()[1];
assertEquals(calculatePositiveMask(classType, list("s"), sp), betaNode1.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "i", "s"), sp), betaNode1.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("j"), sp), betaNode1.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("b", "j"), sp), betaNode1.getLeftInferredMask());
// second split, third alpha
AlphaNode alphaNode1_2 = (AlphaNode) alphaNode1_1.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("b"), sp), alphaNode1_2.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "i", "j"), sp), alphaNode1_2.getInferredMask());
BetaNode betaNode3 = (BetaNode) alphaNode1_2.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("j"), sp), betaNode3.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "i", "b", "j"), sp), betaNode3.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("k"), sp), betaNode3.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("c", "k"), sp), betaNode3.getLeftInferredMask());
}
use of org.drools.core.common.InternalWorkingMemory in project drools by kiegroup.
the class PropertySpecificTest method test2DifferentAlphaWatchBeforeSameBeta.
@Test
public void test2DifferentAlphaWatchBeforeSameBeta() {
String rule1 = "B(a == 15) @watch(b) C()";
String rule2 = "B(a == 15) @watch(c) C()";
KieBase kbase = getKnowledgeBase(rule1, rule2);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
ObjectTypeNode otnB = getObjectTypeNode(kbase, "B");
List<String> sp = getSettableProperties(wm, otnB);
Class classType = ((ClassObjectType) otnB.getObjectType()).getClassType();
AlphaNode alphaNode = (AlphaNode) otnB.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode.getInferredMask());
ObjectTypeNode otnC = getObjectTypeNode(kbase, "C");
BetaNode betaNodeC1 = (BetaNode) otnC.getObjectSinkPropagator().getSinks()[0];
BetaNode betaNodeC2 = (BetaNode) otnC.getObjectSinkPropagator().getSinks()[1];
LeftInputAdapterNode lia1 = (LeftInputAdapterNode) alphaNode.getObjectSinkPropagator().getSinks()[0];
assertSame(betaNodeC1, lia1.getSinkPropagator().getSinks()[0]);
LeftInputAdapterNode lia2 = (LeftInputAdapterNode) alphaNode.getObjectSinkPropagator().getSinks()[1];
assertSame(betaNodeC2, lia2.getSinkPropagator().getSinks()[0]);
assertEquals(EmptyBitMask.get(), betaNodeC1.getRightDeclaredMask());
assertEquals(EmptyBitMask.get(), betaNodeC1.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("b"), sp), betaNodeC1.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b"), sp), betaNodeC1.getLeftInferredMask());
assertEquals(EmptyBitMask.get(), betaNodeC2.getRightDeclaredMask());
assertEquals(EmptyBitMask.get(), betaNodeC2.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("c"), sp), betaNodeC2.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "c"), sp), betaNodeC2.getLeftInferredMask());
kbase.removeRule("org.drools.compiler.integrationtests", "r0");
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "c"), sp), alphaNode.getInferredMask());
assertEquals(1, lia2.getSinkPropagator().getSinks().length);
BetaNode betaNodeC = (BetaNode) lia2.getSinkPropagator().getSinks()[0];
assertEquals(EmptyBitMask.get(), betaNodeC2.getRightDeclaredMask());
assertEquals(EmptyBitMask.get(), betaNodeC2.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("c"), sp), betaNodeC2.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "c"), sp), betaNodeC2.getLeftInferredMask());
}
use of org.drools.core.common.InternalWorkingMemory in project drools by kiegroup.
the class Misc2Test method testBetaMemoryLeakOnSegmentUnlinking.
@Test
@Ignore
public void testBetaMemoryLeakOnSegmentUnlinking() {
// DROOLS-915
String drl = "rule R1 when\n" + " $a : Integer(this == 1)\n" + " $b : String()\n" + " $c : Integer(this == 2)\n" + " $d : Integer(this == 3)\n" + "then \n" + "end\n" + "rule R2 when\n" + " $a : Integer(this == 1)\n" + " $b : String()\n" + "then \n" + "end\n";
KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().newKieSession();
FactHandle fh1 = ksession.insert(1);
FactHandle fh2 = ksession.insert(2);
FactHandle fh3 = ksession.insert(3);
FactHandle fhtest = ksession.insert("test");
ksession.fireAllRules();
ksession.delete(fh3);
ksession.fireAllRules();
ksession.delete(fh1);
ksession.delete(fh2);
ksession.delete(fhtest);
ksession.fireAllRules();
NodeMemories nodeMemories = ((InternalWorkingMemory) ksession).getNodeMemories();
for (int i = 0; i < nodeMemories.length(); i++) {
Memory memory = nodeMemories.peekNodeMemory(i);
if (memory != null && memory.getSegmentMemory() != null) {
SegmentMemory segmentMemory = memory.getSegmentMemory();
System.out.println(memory);
LeftTuple deleteFirst = memory.getSegmentMemory().getStagedLeftTuples().getDeleteFirst();
System.out.println(deleteFirst);
assertNull(deleteFirst);
}
}
}
Aggregations