@Test public void testPopulatedSingleRuleNoSharingWithSubnetworkAtStart() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); wm.insert(new A(1)); wm.insert(new A(2)); wm.insert(new D(1)); wm.insert(new E(1)); wm.insert(new C(2)); wm.fireAllRules(); kbase.addPackages( buildKnowledgePackage("r1", " A() not( B() and C() ) D() E()\n") ); List list = new ArrayList(); wm.setGlobal("list", list); wm.fireAllRules(); assertEquals(2, list.size() ); assertEquals( "r1", ((Match)list.get(0)).getRule().getName() ); assertEquals( "r1", ((Match)list.get(1)).getRule().getName() ); kbase.removeRule("org.kie", "r1"); wm.insert(new A(1)); wm.fireAllRules(); assertEquals(2, list.size() ); }
public RightBuilder update(Object... objects) { for ( Object object : objects ) { InternalFactHandle fh = (InternalFactHandle) wm.insert( object ); RightTuple rightTuple = fh.getFirstRightTuple(); rightTuple.setPropagationContext( new PhreakPropagationContext() ); rightTuples.addUpdate( rightTuple ); } return this; }
public RightBuilder insert(Object... objects) { for (Object object : objects) { InternalFactHandle fh = (InternalFactHandle) wm.insert(object); RightTuple rightTuple = new RightTupleImpl( fh, sink ); rightTuple.setPropagationContext( new PhreakPropagationContext() ); rightTuples.addInsert( rightTuple ); } return this; }
public LeftBuilder insert(Object... objects) { for ( Object object : objects ) { InternalFactHandle fh = (InternalFactHandle) wm.insert( object ); LeftTuple leftTuple = sink.createLeftTuple( fh, sink, true ); leftTuple.setPropagationContext( new PhreakPropagationContext() ); leftTuples.addInsert( leftTuple ); } return this; }
public RightBuilder delete(Object... objects) { for ( Object object : objects ) { InternalFactHandle fh = (InternalFactHandle) wm.insert( object ); RightTuple rightTuple = fh.getFirstRightTuple(); rightTuple.setPropagationContext( new PhreakPropagationContext() ); rightTuples.addDelete( rightTuple ); } return this; }
@Test public void testPopulatedSharedLiaNodeNoBeta() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A()\n"); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase1.newKieSession()); List list = new ArrayList(); wm.setGlobal("list", list); A a1 = new A(1); InternalFactHandle fh1 = (InternalFactHandle) wm.insert(a1); A a2 = new A(2); InternalFactHandle fh2 = (InternalFactHandle) wm.insert(a2); wm.fireAllRules(); assertEquals( 2, list.size() ); kbase1.addPackages( buildKnowledgePackage("r2", " a : A()\n") ); wm.fireAllRules(); assertEquals( 4, list.size() ); kbase1.removeRule("org.kie", "r1"); kbase1.removeRule("org.kie", "r2"); list.clear(); assertNull( fh1.getFirstLeftTuple() ); assertNull( fh2.getFirstLeftTuple() ); wm.update( fh1,a1 ); wm.update( fh2,a2 ); wm.fireAllRules(); assertEquals( 0, list.size() ); }
public List<LeftTuple> getLeftTuples(Object... objects) { BetaNode node = scenario.getBetaNode(); BetaMemory bm = scenario.getBm(); TupleMemory ltm = bm.getLeftTupleMemory(); InternalWorkingMemory wm = scenario.getWorkingMemory(); if ( objects == null ) { objects = new Object[0]; } List<LeftTuple> list = new ArrayList<LeftTuple>(); for ( Object object : objects ) { InternalFactHandle fh = (InternalFactHandle) wm.insert( object ); LeftTuple expectedLeftTuple = node.createLeftTuple( fh, node, true ); expectedLeftTuple.setPropagationContext( new PhreakPropagationContext() ); list.add( expectedLeftTuple ); } scenario.setTestLeftMemory( true ); return list; }
@Test public void testPopulatedSingleRuleNoSharing() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); wm.insert(new A(1)); wm.insert(new B(1)); wm.insert(new C(1)); wm.insert(new C(2)); wm.insert(new D(1)); wm.insert(new E(1)); wm.fireAllRules(); kbase.addPackages( buildKnowledgePackage("r1", " A() B() C(object == 2) D() E()\n") ); List list = new ArrayList(); wm.setGlobal("list", list); ObjectTypeNode aotn = getObjectTypeNode(kbase, A.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; LiaNodeMemory lm = ( LiaNodeMemory ) wm.getNodeMemory(liaNode); SegmentMemory sm = lm.getSegmentMemory(); assertNotNull(sm.getStagedLeftTuples().getInsertFirst()); wm.fireAllRules(); assertNull(sm.getStagedLeftTuples().getInsertFirst()); assertEquals(1, list.size() ); assertEquals( "r1", ((Match)list.get(0)).getRule().getName() ); }
public List<RightTuple> getRightTuples(Object... objects) { BetaNode node = scenario.getBetaNode(); BetaMemory bm = scenario.getBm(); TupleMemory rtm = bm.getRightTupleMemory(); InternalWorkingMemory wm = scenario.getWorkingMemory(); if ( objects == null ) { objects = new Object[0]; } List<RightTuple> rightTuples = new ArrayList<RightTuple>(); for ( Object object : objects ) { InternalFactHandle fh = (InternalFactHandle) wm.insert( object ); RightTuple expectedRightTuple = new RightTupleImpl( fh, node ); //node.createLeftTuple( fh, node, true ); expectedRightTuple.setPropagationContext( new PhreakPropagationContext() ); rightTuples.add( expectedRightTuple ); } scenario.setTestRightMemory( true ); return rightTuples; }
@Test public void testTooMuchRightMemory() { setupJoinNode(); try { // @formatter:off wm.insert( b2 ); test().right().insert( b0, b1 ) .result().right( b1, b0, b2 ) .run(); // @formatter:on fail("Should not reach here"); } catch ( AssertionError e ) { assertTrue( e.getMessage().contains( "Could not find RightTuple" ) ); } }
@Test public void testPathMemorySizeAfterSegmentMerge() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) B(1;)\n" ); kbase1.addPackages( buildKnowledgePackage("r2", " A(1;)\n") ); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase1.newKieSession()); List list = new ArrayList(); wm.setGlobal("list", list); // trigger segment initialization wm.insert(new A(1)); wm.insert(new B(1)); wm.fireAllRules(); RuleTerminalNode rtn1 = getRtn( "org.kie.r1", kbase1 ); RuleTerminalNode rtn2 = getRtn( "org.kie.r2", kbase1 ); assertEquals( 2, wm.getNodeMemory(rtn1).getSegmentMemories().length ); assertEquals( 2, wm.getNodeMemory(rtn2).getSegmentMemories().length ); kbase1.removeRule("org.kie", "r2"); assertEquals( 1, wm.getNodeMemory(rtn1).getSegmentMemories().length ); }
@Test public void testIncorrectLeftMemory() { setupJoinNode(); try { // @formatter:off wm.insert( a2 ); test().left().insert( a0, a1 ) .result().left( a1, a2 ) .run(); // @formatter:on fail("Should not reach here"); } catch ( AssertionError e ) { assertTrue( e.getMessage().contains( "Could not find LeftTuple" ) ); } }
@Test public void testTooMuchLeftMemory() { setupJoinNode(); try { // @formatter:off wm.insert( a2 ); test().left().insert( a0, a1 ) .result().left( a1, a0, a2 ) .run(); // @formatter:on fail("Should not reach here"); } catch ( AssertionError e ) { assertTrue( e.getMessage().contains( "Could not find LeftTuple" ) ); } }
@Test public void testIncorrectRightMemory() { setupJoinNode(); try { // @formatter:off wm.insert( b2 ); test().right().insert( b0, b1 ) .result().right( b1, b2 ) .run(); // @formatter:on fail("Should not reach here"); } catch ( AssertionError e ) { assertTrue( e.getMessage().contains( "Could not find RightTuple" ) ); } }
@Test public void testTooMuchPreStagedInsert() { setupJoinNode(); try { // @formatter:off wm.insert( b2 ); test().left().insert( a0, a1 ) .right().insert( b0, b1 ) .run(); test().left().insert( a3 ) .preStaged(smem0).insert( t(a1, b2), t(a1, b0), t(a0, b1) ) .run(); // @formatter:on fail("Should not reach here"); } catch ( AssertionError e ) { System.out.println( e.getMessage() ); assertTrue( e.getMessage().contains( "insert 2" ) ); } }
@Test public void testIncorrectPreStagedInsert() { setupJoinNode(); try { // @formatter:off wm.insert( b2 ); test().left().insert( a0, a1 ) .right().insert( b0, b1 ) .run(); test().left().insert( a3 ) .preStaged(smem0).insert( t(a1, b2) ) .run(); // @formatter:on fail("Should not reach here"); } catch ( AssertionError e ) { assertTrue( e.getMessage().contains( "insert 0" ) ); } }
@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 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 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() ); }