@Test public void testBetaNodeNoConstraintsNoPropertySpecific() { 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()\n" + "then\n" + "end\n"; KieBase kbase = new KieHelper(PropertySpecificOption.ALLOWED).addContent(rule, ResourceType.DRL).build(); ObjectTypeNode otn = getObjectTypeNode(kbase, "Cheese" ); assertNotNull( otn ); BetaNode betaNode = ( BetaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( AllSetBitMask.get(), betaNode.getRightDeclaredMask() ); assertEquals( AllSetBitMask.get(), betaNode.getRightInferredMask() ); }
@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() ); }
@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() ); }
@Test public void testPersonFactBetaNodeWithRightInputAdapter() { 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" + " exists(eval(1==1))\n" + "then\n" + "end\n"; // assumption is this test was intended to be for the case // property reactivity is NOT enabled by default. KieBase kbase = new KieHelper(PropertySpecificOption.ALLOWED).addContent(rule, ResourceType.DRL).build(); ObjectTypeNode otn = getObjectTypeNode(kbase, "Person" ); 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() ); }
@Test public void testBetaNoConstraintsNoWatches() { String rule1 = "B() A()"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); BetaNode betaNode = ( BetaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), betaNode.getRightDeclaredMask() ); assertEquals( EmptyBitMask.get(), betaNode.getRightInferredMask() ); assertEquals( EmptyBitMask.get(), betaNode.getLeftDeclaredMask() ); assertEquals( EmptyBitMask.get(), betaNode.getLeftInferredMask() ); }
@Test public void testBetaAfterBetaWithWatch() { String rule1 = "$b : B(a == 15) @watch(k) A(i == $b.j) @watch(b, c) C()"; KieBase kbase = getKnowledgeBase(rule1); 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 betaNodeA = ( BetaNode ) otnA.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("j", "k"), sp), betaNodeA.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "j", "k"), sp), betaNodeA.getLeftInferredMask() ); 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() ); }
assertEquals( AllSetBitMask.get(), betaNode1.getRightDeclaredMask() ); assertEquals( AllSetBitMask.get(), betaNode1.getRightInferredMask() ); assertEquals( AllSetBitMask.get(), betaNode2.getRightDeclaredMask() ); assertEquals( AllSetBitMask.get(), betaNode2.getRightInferredMask() );
@Test public void testBetaWithWatchAfterBeta() { String rule1 = "$b : B(a == 15) @watch(k) C() A(i == $b.j) @watch(b, c)"; KieBase kbase = getKnowledgeBase(rule1); 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 betaNodeA = ( BetaNode ) otnA.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("i", "b", "c"), sp), betaNodeA.getRightInferredMask() ); assertEquals( AllSetBitMask.get(), betaNodeA.getLeftDeclaredMask() ); assertEquals( AllSetBitMask.get(), betaNodeA.getLeftInferredMask() ); BetaNode betaNodeC = ( BetaNode ) otnC.getObjectSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), betaNodeC.getRightDeclaredMask() ); assertEquals( EmptyBitMask.get(), betaNodeC.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("j", "k"), sp), betaNodeC.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "j", "k"), sp), betaNodeC.getLeftInferredMask() ); }
@Test public void testBetaNoConstraintsWithWatches() { String rule1 = "B() @watch(a) A() @watch(a)"; 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); BetaNode betaNode = ( BetaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getLeftDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), betaNode.getLeftInferredMask() ); }
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() );
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() ); BetaNode betaNodeC = ( BetaNode ) otnC.getObjectSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), betaNodeC.getRightDeclaredMask() ); assertEquals( EmptyBitMask.get(), betaNodeC.getRightInferredMask() ); assertEquals( AllSetBitMask.get(), betaNodeC.getLeftDeclaredMask() ); BetaNode betaNodeD = ( BetaNode ) otnC.getObjectSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), betaNodeD.getRightDeclaredMask() ); assertEquals( EmptyBitMask.get(), betaNodeD.getRightInferredMask() ); assertEquals( AllSetBitMask.get(), betaNodeD.getLeftDeclaredMask() );
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() ); 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("s"), sp), betaNode1.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "s"), sp), betaNode1.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("j"), sp), betaNode3.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "b", "j"), sp), betaNode3.getRightInferredMask() );
assertEquals( calculatePositiveMask(classType, list("c"), sp), betaNode1.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b", "c"), sp), betaNode1.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("s"), sp), betaNode2.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "s"), sp), betaNode2.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("j"), sp), betaNode3.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "b", "j"), sp), betaNode3.getRightInferredMask() );
@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]; assertEquals( calculatePositiveMask(classType, list( "b" ), sp), betaNode.getRightDeclaredMask() ); // beta declares nothing assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), betaNode.getRightInferredMask() ); // beta infers from alpha 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() ); }
assertEquals( calculatePositiveMask(classType, list("c"), sp), betaNode1.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b", "c"), sp), betaNode1.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("s"), sp), betaNode2.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "s"), sp), betaNode2.getRightInferredMask() );
assertEquals( calculatePositiveMask(classType, list("b"), sp), betaNode1.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "s", "b"), sp), betaNode1.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("b"), sp), betaNode2.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "b"), sp), betaNode2.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "b"), sp), alphaNode1_2.getInferredMask() ); assertEquals( calculatePositiveMask(classType, list("b"), sp), betaNode2.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "b"), sp), betaNode2.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("b"), sp), betaNode1.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "s", "b"), sp), betaNode1.getRightInferredMask() );
assertEquals( calculatePositiveMask(classType, list("c"), sp), betaNode1.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b", "c"), sp), betaNode1.getRightInferredMask() ); assertEquals( calculatePositiveMask(classType, list("j"), sp), betaNode2.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "b", "j"), sp), betaNode2.getRightInferredMask() );
@Test public void testBetaWithConstraintsWithNegativeWatches() { String rule1 = "$b : B( a == 15) @watch(c, !a) A( a == 10, b == $b.b ) @watch(s, !a, !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", "s"), sp), alphaNode.getInferredMask() ); BetaNode betaNode = ( BetaNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("b","s"), sp), betaNode.getRightDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("s"), sp), betaNode.getRightInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!a", "!b"), sp), betaNode.getRightNegativeMask() ); 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( "b", "c" ), sp), betaNode.getLeftInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!a"), sp), betaNode.getLeftNegativeMask() ); }
@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() ); }