@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() ); }
private void initPathMemories() { pathMemories = new PathMemory[3]; NamedEntryPoint ep = (NamedEntryPoint)epManipulators[8].getEntryPoiny(); InternalWorkingMemory wm = ((NamedEntryPoint)ep).getInternalWorkingMemory(); ObjectTypeNode otn = ((NamedEntryPoint)ep).getEntryPointNode().getObjectTypeNodes().values().iterator().next(); AlphaNode alpha = (AlphaNode)otn.getObjectSinkPropagator().getSinks()[0]; ObjectSink[] sinks = alpha.getObjectSinkPropagator().getSinks(); for (int i = 0; i < sinks.length; i++) { BetaNode beta = (BetaNode)sinks[i]; RuleTerminalNode rtn = (RuleTerminalNode)beta.getSinkPropagator().getSinks()[0]; pathMemories[i] = ( PathMemory ) wm.getNodeMemory(rtn); } } }
private void checkPartitionedSinks(ObjectTypeNode otn) { if ( InitialFact.class.isAssignableFrom( ( (ClassObjectType) otn.getObjectType() ).getClassType() ) ) { return; } ObjectSinkPropagator sinkPropagator = otn.getObjectSinkPropagator(); ObjectSinkPropagator[] propagators = sinkPropagator instanceof CompositePartitionAwareObjectSinkAdapter ? ((CompositePartitionAwareObjectSinkAdapter) sinkPropagator).getPartitionedPropagators() : new ObjectSinkPropagator[] { sinkPropagator }; for (int i = 0; i < propagators.length; i++) { for (ObjectSink sink : propagators[i].getSinks()) { assertEquals( sink + " on " + sink.getPartitionId() + " is expcted to be on propagator " + i, i, sink.getPartitionId().getId() % propagators.length ); } } }
@Test public void testFromEPDontRequireLeftInput() { // DROOLS-1014 String drl = "rule R when\n" + " $s1 : String() from entry-point \"xxx\"\n" + "then\n" + "end\n"; KieBase kbase = new KieHelper().addContent( drl, ResourceType.DRL ) .build(); Rete rete = ( (KnowledgeBaseImpl) kbase ).getRete(); LeftInputAdapterNode liaNode = null; for ( ObjectTypeNode otn : rete.getObjectTypeNodes() ) { Class<?> otnType = ( (ClassObjectType) otn.getObjectType() ).getClassType(); if ( String.class == otnType ) { assertEquals( 1, otn.getObjectSinkPropagator().size() ); } else if ( InitialFact.class.isAssignableFrom( otnType ) ) { assertEquals( 0, otn.getObjectSinkPropagator().size() ); } else { fail("There shouldn't be other OTNs"); } } }
@Test public void testPopulatedSingleRuleNoSharing() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0];
AlphaNode alpha = (AlphaNode)otn.getObjectSinkPropagator().getSinks()[0]; BetaNode beta = (BetaNode)alpha.getObjectSinkPropagator().getSinks()[0]; BetaMemory memory = (BetaMemory) wm.getNodeMemory(beta); memory.getSegmentMemory();
@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 testEvalDetectionInBetaNode() { BetaNode betaanode = (BetaNode) node.getObjectSinkPropagator().getSinks()[0]; BetaNodeFieldConstraint[] constraint = betaanode.getConstraints(); PredicateConstraint c = ( PredicateConstraint ) constraint[0];
@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 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 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 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 testSingleSharedEmptyLhs() throws Exception { KieBase kbase = buildKnowledgeBase( " ", " "); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode aotn = getObjectTypeNode(kbase, InitialFactImpl.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtn1 = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[0]; RuleTerminalNode rtn2 = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[1]; wm.insert( new LinkingTest.A() ); wm.flushPropagations(); // LiaNode is in it's own segment LiaNodeMemory liaMem = ( LiaNodeMemory ) wm.getNodeMemory( liaNode ); SegmentMemory smem = liaMem.getSegmentMemory(); assertEquals( liaNode, smem.getRootNode() ); assertEquals( liaNode, smem.getTipNode() ); // each RTN is in it's own segment SegmentMemory rtnSmem1 = smem.getFirst(); assertEquals( rtn1, rtnSmem1.getRootNode() ); assertEquals( rtn1, rtnSmem1.getTipNode() ); SegmentMemory rtnSmem2 = rtnSmem1.getNext(); assertEquals( rtn2, rtnSmem2.getRootNode() ); assertEquals( rtn2, rtnSmem2.getTipNode() ); }
@Test public void testSingleSharedPattern() throws Exception { KieBase kbase = buildKnowledgeBase( " A() \n", " A() \n"); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode aotn = getObjectTypeNode(kbase, LinkingTest.A.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtn1 = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[0]; RuleTerminalNode rtn2 = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[1]; wm.insert(new LinkingTest.A()); wm.flushPropagations(); // LiaNode is in it's own segment LiaNodeMemory liaMem = ( LiaNodeMemory ) wm.getNodeMemory( liaNode ); SegmentMemory smem = liaMem.getSegmentMemory(); assertEquals( liaNode, smem.getRootNode() ); assertEquals( liaNode, smem.getTipNode() ); // each RTN is in it's own segment SegmentMemory rtnSmem1 = smem.getFirst(); assertEquals( rtn1, rtnSmem1.getRootNode() ); assertEquals( rtn1, rtnSmem1.getTipNode() ); SegmentMemory rtnSmem2 = rtnSmem1.getNext(); assertEquals( rtn2, rtnSmem2.getRootNode() ); assertEquals( rtn2, rtnSmem2.getTipNode() ); }
@Test public void testSingleEmptyLhs() throws Exception { KieBase kbase = buildKnowledgeBase(" "); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode aotn = getObjectTypeNode(kbase, InitialFactImpl.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtn = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[0]; wm.insert( new LinkingTest.A() ); wm.flushPropagations(); // LiaNode and Rule are in same segment LiaNodeMemory liaMem = ( LiaNodeMemory ) wm.getNodeMemory( liaNode ); SegmentMemory smem = liaMem.getSegmentMemory(); assertEquals( liaNode, smem.getRootNode() ); assertEquals( rtn, smem.getTipNode() ); assertNull( smem.getNext() ); assertNull( smem.getFirst() ); }
@Test public void testSinglePattern() throws Exception { KieBase kbase = buildKnowledgeBase(" A() \n"); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode aotn = getObjectTypeNode(kbase, LinkingTest.A.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtn = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[0]; wm.insert(new LinkingTest.A()); wm.flushPropagations(); // LiaNode and Rule are in same segment LiaNodeMemory liaMem = ( LiaNodeMemory ) wm.getNodeMemory( liaNode ); SegmentMemory smem = liaMem.getSegmentMemory(); assertEquals( liaNode, smem.getRootNode() ); assertEquals( rtn, smem.getTipNode() ); assertNull( smem.getNext() ); assertNull( smem.getFirst() ); }
@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 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 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 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 }