use of org.drools.core.reteoo.BetaNode in project drools by kiegroup.
the class PropertySpecificTest method testBetaWithConstraintsWithWatches.
@Test
public void testBetaWithConstraintsWithWatches() {
String rule1 = "$b : B( a == 15) @watch(c) A( a == 10, b == $b.b ) @watch(s)";
KieBase kbase = getKnowledgeBase(rule1);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
ObjectTypeNode otn = getObjectTypeNode(kbase, "A");
assertNotNull(otn);
Class classType = ((ClassObjectType) otn.getObjectType()).getClassType();
List<String> sp = getSettableProperties(wm, otn);
AlphaNode alphaNode = (AlphaNode) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "s"), sp), alphaNode.getInferredMask());
BetaNode betaNode = (BetaNode) alphaNode.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("b", "s"), sp), betaNode.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "s"), sp), betaNode.getRightInferredMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), betaNode.getLeftInferredMask());
otn = getObjectTypeNode(kbase, "B");
alphaNode = (AlphaNode) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode.getInferredMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), betaNode.getLeftInferredMask());
}
use of org.drools.core.reteoo.BetaNode in project drools by kiegroup.
the class PropertySpecificTest method testBetaWithConstraintsNoWatches.
@Test
public void testBetaWithConstraintsNoWatches() {
String rule1 = "$b : B(a == 15) A( a == 10, b == $b.b )";
KieBase kbase = getKnowledgeBase(rule1);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
ObjectTypeNode otn = getObjectTypeNode(kbase, "A");
assertNotNull(otn);
Class classType = ((ClassObjectType) otn.getObjectType()).getClassType();
List<String> sp = getSettableProperties(wm, otn);
AlphaNode alphaNode = (AlphaNode) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b"), sp), alphaNode.getInferredMask());
BetaNode betaNode = (BetaNode) alphaNode.getObjectSinkPropagator().getSinks()[0];
// beta declares nothing
assertEquals(calculatePositiveMask(classType, list("b"), sp), betaNode.getRightDeclaredMask());
// beta infers from alpha
assertEquals(calculatePositiveMask(classType, list("a", "b"), sp), betaNode.getRightInferredMask());
otn = getObjectTypeNode(kbase, "B");
alphaNode = (AlphaNode) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b"), sp), alphaNode.getInferredMask());
assertEquals(calculatePositiveMask(classType, list("b"), sp), betaNode.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b"), sp), betaNode.getLeftInferredMask());
}
use of org.drools.core.reteoo.BetaNode in project drools by kiegroup.
the class PropertySpecificTest method testBetaNodeWithConstraintsNoPropertySpecific.
@Test
public void testBetaNodeWithConstraintsNoPropertySpecific() {
String rule = "package org.drools.compiler.integrationtests\n" + "import " + Person.class.getCanonicalName() + "\n" + "import " + Cheese.class.getCanonicalName() + "\n" + "rule r1\n" + "when\n" + " Person()\n" + " Cheese( type == 'brie' )\n" + "then\n" + "end\n";
KieBase kbase = new KieHelper(PropertySpecificOption.ALLOWED).addContent(rule, ResourceType.DRL).build();
ObjectTypeNode otn = getObjectTypeNode(kbase, "Cheese");
assertNotNull(otn);
AlphaNode alphaNode = (AlphaNode) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals(AllSetBitMask.get(), alphaNode.getDeclaredMask());
assertEquals(AllSetBitMask.get(), alphaNode.getInferredMask());
BetaNode betaNode = (BetaNode) alphaNode.getObjectSinkPropagator().getSinks()[0];
assertEquals(AllSetBitMask.get(), betaNode.getRightDeclaredMask());
assertEquals(AllSetBitMask.get(), betaNode.getRightInferredMask());
}
use of org.drools.core.reteoo.BetaNode in project drools by kiegroup.
the class PropertySpecificTest method testInitialFactBetaNodeWithRightInputAdapter.
@Test
public void testInitialFactBetaNodeWithRightInputAdapter() {
String rule = "package org.drools.compiler.integrationtests\n" + "import " + Person.class.getCanonicalName() + "\n" + "import " + Cheese.class.getCanonicalName() + "\n" + "rule r1\n" + "when\n" + " exists(eval(1==1))\n" + "then\n" + "end\n";
KieBase kbase = loadKnowledgeBaseFromString(rule);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
ObjectTypeNode otn = getObjectTypeNode(kbase, "InitialFactImpl");
assertNotNull(otn);
LeftInputAdapterNode liaNode = (LeftInputAdapterNode) otn.getObjectSinkPropagator().getSinks()[0];
BetaNode betaNode = (BetaNode) liaNode.getSinkPropagator().getSinks()[1];
assertEquals(AllSetBitMask.get(), betaNode.getLeftDeclaredMask());
assertEquals(AllSetBitMask.get(), betaNode.getLeftInferredMask());
assertEquals(AllSetBitMask.get(), betaNode.getRightDeclaredMask());
assertEquals(AllSetBitMask.get(), betaNode.getRightInferredMask());
}
use of org.drools.core.reteoo.BetaNode in project drools by kiegroup.
the class PropertySpecificTest method testBetaSharedAlphaWithWatches.
@Test
public void testBetaSharedAlphaWithWatches() {
String rule1 = "$b : B( a == 15) @watch(c, !a) A( a == 10, b == 15, b == $b.b ) @watch(c, !b)";
String rule2 = "$b : B( a == 15) @watch(j) A( a == 10, i == 20, b == $b.b ) @watch(s, !a)";
KieBase kbase = getKnowledgeBase(rule1, rule2);
InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
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", "b", "c", "s", "i"), sp), alphaNode1.getInferredMask());
// first share
AlphaNode alphaNode1_1 = (AlphaNode) alphaNode1.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("b"), sp), alphaNode1_1.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode1_1.getInferredMask());
BetaNode betaNode1 = (BetaNode) alphaNode1_1.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode1.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "c"), sp), betaNode1.getRightInferredMask());
assertEquals(calculateNegativeMask(classType, list("!b"), sp), betaNode1.getRightNegativeMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode1.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode1.getLeftInferredMask());
assertEquals(calculateNegativeMask(classType, list("!a"), sp), betaNode1.getLeftNegativeMask());
// second share
AlphaNode alphaNode1_2 = (AlphaNode) alphaNode1.getObjectSinkPropagator().getSinks()[1];
assertEquals(calculatePositiveMask(classType, list("i"), sp), alphaNode1_2.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "i", "b", "s"), sp), alphaNode1_2.getInferredMask());
BetaNode betaNode2 = (BetaNode) alphaNode1_2.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("b", "s"), sp), betaNode2.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("i", "b", "s"), sp), betaNode2.getRightInferredMask());
assertEquals(calculateNegativeMask(classType, list("!a"), sp), betaNode2.getRightNegativeMask());
assertEquals(calculateNegativeMask(classType, list("!a"), sp), betaNode1.getLeftNegativeMask());
assertEquals(calculatePositiveMask(classType, list("b", "j"), sp), betaNode2.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "j"), sp), betaNode2.getLeftInferredMask());
assertEquals(EmptyBitMask.get(), betaNode2.getLeftNegativeMask());
// test rule removal
kbase.removeRule("org.drools.compiler.integrationtests", "r0");
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode1.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "i", "b", "s"), sp), alphaNode1.getInferredMask());
assertEquals(calculatePositiveMask(classType, list("i"), sp), alphaNode1_2.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "i", "b", "s"), sp), alphaNode1_2.getInferredMask());
assertEquals(calculatePositiveMask(classType, list("b", "s"), sp), betaNode2.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("i", "b", "s"), sp), betaNode2.getRightInferredMask());
assertEquals(calculateNegativeMask(classType, list("!a"), sp), betaNode2.getRightNegativeMask());
assertEquals(calculatePositiveMask(classType, list("b", "j"), sp), betaNode2.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "j"), sp), betaNode2.getLeftInferredMask());
assertEquals(EmptyBitMask.get(), betaNode2.getLeftNegativeMask());
// have to rebuild to remove r1
kbase = getKnowledgeBase(rule1, rule2);
kbase.removeRule("org.drools.compiler.integrationtests", "r1");
otn = getObjectTypeNode(kbase, "A");
alphaNode1 = (AlphaNode) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("a"), sp), alphaNode1.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode1.getInferredMask());
alphaNode1_1 = (AlphaNode) alphaNode1.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("b"), sp), alphaNode1_1.getDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "b", "c"), sp), alphaNode1_1.getInferredMask());
betaNode1 = (BetaNode) alphaNode1_1.getObjectSinkPropagator().getSinks()[0];
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode1.getRightDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("a", "c"), sp), betaNode1.getRightInferredMask());
assertEquals(calculateNegativeMask(classType, list("!b"), sp), betaNode1.getRightNegativeMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode1.getLeftDeclaredMask());
assertEquals(calculatePositiveMask(classType, list("b", "c"), sp), betaNode1.getLeftInferredMask());
assertEquals(calculateNegativeMask(classType, list("!a"), sp), betaNode1.getLeftNegativeMask());
}
Aggregations