@Test public void testRTNodeNoConstraintsNoPropertySpecific() { String rule = "package org.drools.compiler.integrationtests\n" + "import " + Person.class.getCanonicalName() + "\n" + "rule r1\n" + "when\n" + " Person()\n" + "then\n" + "end\n"; 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]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( AllSetBitMask.get(), rtNode.getDeclaredMask() ); assertEquals( AllSetBitMask.get(), rtNode.getInferredMask() ); }
@Test public void testRtnNoConstraintsNoWatches() { String rule1 = "A()"; KieBase kbase = getKnowledgeBase(rule1); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode otn = getObjectTypeNode(kbase, "A" ); assertNotNull( otn ); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) otn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), rtNode.getDeclaredMask() ); assertEquals( EmptyBitMask.get(), rtNode.getInferredMask() ); }
@Test public void testRTNodeEmptyLHS() { String rule = "package org.drools.compiler.integrationtests\n" + "rule r1\n" + "when\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]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( AllSetBitMask.get(), rtNode.getDeclaredMask() ); assertEquals( AllSetBitMask.get(), rtNode.getInferredMask() ); }
@Test public void testRtnNoConstraintsWithWatches() { String rule1 = "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(); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) otn.getObjectSinkPropagator().getSinks()[0]; List<String> sp = getSettableProperties(wm, otn); RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("a"), sp), rtNode.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a"), sp), rtNode.getInferredMask() ); }
@Test public void testRTNodeWithConstraintsNoPropertySpecific() { String rule = "package org.drools.compiler.integrationtests\n" + "import " + Person.class.getCanonicalName() + "\n" + "rule r1\n" + "when\n" + " Person( name == 'bobba')\n" + "then\n" + "end\n"; KieBase kbase = new KieHelper(PropertySpecificOption.ALLOWED).addContent(rule, ResourceType.DRL).build(); ObjectTypeNode otn = getObjectTypeNode(kbase, "Person" ); assertNotNull( otn ); AlphaNode alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0]; assertEquals( AllSetBitMask.get(), alphaNode.getDeclaredMask() ); assertEquals( AllSetBitMask.get(), alphaNode.getInferredMask() ); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( AllSetBitMask.get(), rtNode.getDeclaredMask() ); assertEquals( AllSetBitMask.get(), rtNode.getInferredMask() ); }
@Test public void testRtnWithConstraintsNoWatches() { String rule1 = "A( a == 10 )"; 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"), sp), alphaNode.getInferredMask()); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), rtNode.getDeclaredMask() ); // rtn declares nothing assertEquals( calculatePositiveMask(classType, list("a"), sp), rtNode.getInferredMask() ); // rtn infers from alpha }
@Test public void testRtnWithConstraintsWithWatches() { String rule1 = "A( a == 10 ) @watch(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() ); LeftInputAdapterNode liaNode = ( LeftInputAdapterNode ) alphaNode.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtNode = ( RuleTerminalNode ) liaNode.getSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("b"), sp), rtNode.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), rtNode.getInferredMask() ); }
RuleTerminalNode rtNode1 = ( RuleTerminalNode ) liaNode1.getSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), rtNode1.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), rtNode1.getInferredMask() ); RuleTerminalNode rtNode2 = ( RuleTerminalNode ) liaNode2.getSinkPropagator().getSinks()[0]; assertEquals( EmptyBitMask.get(), rtNode2.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i"), sp), rtNode2.getInferredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i"), sp), alphaNode1_2.getInferredMask() ); assertEquals( EmptyBitMask.get(), rtNode2.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i"), sp), rtNode2.getInferredMask() ); assertEquals( EmptyBitMask.get(), rtNode1.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "b"), sp), rtNode1.getInferredMask() );
RuleTerminalNode rtNode1 = ( RuleTerminalNode ) liaNode1.getSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("c"), sp), rtNode1.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("b", "c"), sp), rtNode1.getInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!a"), sp), rtNode1.getNegativeMask() ); RuleTerminalNode rtNode2 = ( RuleTerminalNode ) liaNode2.getSinkPropagator().getSinks()[0]; assertEquals( calculatePositiveMask(classType, list("s"), sp), rtNode2.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "s"), sp), rtNode2.getInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!i"), sp), rtNode2.getNegativeMask() ); assertEquals( calculatePositiveMask(classType, list("a", "i", "s"), sp), alphaNode1_2.getInferredMask() ); assertEquals( calculatePositiveMask(classType, list("s"), sp), rtNode2.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("a", "s"), sp), rtNode2.getInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!i"), sp), rtNode2.getNegativeMask() ); assertEquals( calculatePositiveMask(classType, list("c"), sp), rtNode1.getDeclaredMask() ); assertEquals( calculatePositiveMask(classType, list("b", "c"), sp), rtNode1.getInferredMask() ); assertEquals( calculateNegativeMask(classType, list("!a"), sp), rtNode1.getNegativeMask() );