@Test public void testAllLinkedInWithExistsNodesOnly() { setUp(EXISTS_NODE); assertEquals(ExistsNode.class, n3.getClass()); // make sure it created ExistsNodes KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kconf.setOption(RuleEngineOption.PHREAK); AbstractWorkingMemory wm = new AbstractWorkingMemory( 1, (ReteooRuleBase) RuleBaseFactory.newRuleBase((RuleBaseConfiguration) kconf)); DefaultFactHandle f1 = (DefaultFactHandle) wm.insert("test1"); n3.assertObject(f1, context, wm); BetaMemory bm = (BetaMemory) wm.getNodeMemory(n3); assertFalse(bm.getSegmentMemory().isSegmentLinked()); n4.assertObject(f1, context, wm); assertFalse(bm.getSegmentMemory().isSegmentLinked()); n5.assertObject(f1, context, wm); assertFalse(bm.getSegmentMemory().isSegmentLinked()); n6.assertObject(f1, context, wm); assertTrue( bm.getSegmentMemory() .isSegmentLinked()); // only after all 4 nodes are populated, is the segment linked in n6.retractRightTuple(f1.getLastRightTuple(), context, wm); assertFalse(bm.getSegmentMemory().isSegmentLinked()); // check retraction unlinks again }
@Test public void testAllLinkedInWithNotNodesOnly() { setUp(NOT_NODE); assertEquals(NotNode.class, n3.getClass()); // make sure it created NotNodes KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kconf.setOption(RuleEngineOption.PHREAK); AbstractWorkingMemory wm = new AbstractWorkingMemory( 1, (ReteooRuleBase) RuleBaseFactory.newRuleBase((RuleBaseConfiguration) kconf)); BetaMemory bm = (BetaMemory) wm.getNodeMemory(n3); createSegmentMemory(n3, wm); assertTrue(bm.getSegmentMemory().isSegmentLinked()); // not nodes start off linked DefaultFactHandle f1 = (DefaultFactHandle) wm.insert("test1"); // unlinked after first assertion n3.assertObject(f1, context, wm); // this doesn't unlink on the assertObject, as the node's memory must be processed. So use the // helper method the main network evaluator uses. PhreakNotNode.unlinkNotNodeOnRightInsert((NotNode) n3, bm, wm); assertFalse(bm.getSegmentMemory().isSegmentLinked()); n3.retractRightTuple(f1.getFirstRightTuple(), context, wm); assertTrue(bm.getSegmentMemory().isSegmentLinked()); // assertFalse( bm.getSegmentMemory().isSigmentLinked() ); // check retraction unlinks again }
@Test public void testLiaNodeInitialisation() { setUp(JOIN_NODE); // Initialise from lian KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kconf.setOption(RuleEngineOption.PHREAK); AbstractWorkingMemory wm = new AbstractWorkingMemory( 1, (ReteooRuleBase) RuleBaseFactory.newRuleBase((RuleBaseConfiguration) kconf)); SegmentUtilities.createSegmentMemory(liaNode, wm); liaNode.assertObject((InternalFactHandle) wm.insert("str"), context, wm); LiaNodeMemory liaMem = (LiaNodeMemory) wm.getNodeMemory(liaNode); assertEquals(1, liaMem.getNodePosMaskBit()); assertEquals(3, liaMem.getSegmentMemory().getAllLinkedMaskTest()); BetaMemory bm1 = (BetaMemory) wm.getNodeMemory(n1); assertEquals(2, bm1.getNodePosMaskBit()); assertEquals(3, bm1.getSegmentMemory().getAllLinkedMaskTest()); // Initialise from n1 wm = new AbstractWorkingMemory( 1, (ReteooRuleBase) RuleBaseFactory.newRuleBase((RuleBaseConfiguration) kconf)); n1.assertObject((InternalFactHandle) wm.insert("str"), context, wm); liaMem = (LiaNodeMemory) wm.getNodeMemory(liaNode); assertEquals(1, liaMem.getNodePosMaskBit()); assertEquals(3, liaMem.getSegmentMemory().getAllLinkedMaskTest()); bm1 = (BetaMemory) wm.getNodeMemory(n1); assertEquals(2, bm1.getNodePosMaskBit()); assertEquals(3, bm1.getSegmentMemory().getAllLinkedMaskTest()); }
@Test public void testLiaNodeLinking() { setUp(JOIN_NODE); // Initialise from lian KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kconf.setOption(RuleEngineOption.PHREAK); AbstractWorkingMemory wm = new AbstractWorkingMemory( 1, (ReteooRuleBase) RuleBaseFactory.newRuleBase((RuleBaseConfiguration) kconf)); SegmentUtilities.createSegmentMemory(liaNode, wm); InternalFactHandle fh1 = (InternalFactHandle) wm.insert("str1"); n1.assertObject(fh1, context, wm); LiaNodeMemory liaMem = (LiaNodeMemory) wm.getNodeMemory(liaNode); assertEquals(1, liaMem.getNodePosMaskBit()); assertEquals(3, liaMem.getSegmentMemory().getAllLinkedMaskTest()); BetaMemory bm1 = (BetaMemory) wm.getNodeMemory(n1); assertEquals(2, bm1.getNodePosMaskBit()); assertEquals(3, bm1.getSegmentMemory().getAllLinkedMaskTest()); // still unlinked assertFalse(liaMem.getSegmentMemory().isSegmentLinked()); // now linked InternalFactHandle fh2 = (InternalFactHandle) wm.insert("str2"); liaNode.assertObject(fh2, context, wm); assertTrue(liaMem.getSegmentMemory().isSegmentLinked()); // test unlink after one retract liaNode.retractLeftTuple(fh2.getFirstLeftTuple(), context, wm); assertFalse(liaMem.getSegmentMemory().isSegmentLinked()); // check counter, after multiple asserts InternalFactHandle fh3 = (InternalFactHandle) wm.insert("str3"); InternalFactHandle fh4 = (InternalFactHandle) wm.insert("str4"); liaNode.assertObject(fh3, context, wm); liaNode.assertObject(fh4, context, wm); assertTrue(liaMem.getSegmentMemory().isSegmentLinked()); liaNode.retractLeftTuple(fh3.getFirstLeftTuple(), context, wm); assertTrue(liaMem.getSegmentMemory().isSegmentLinked()); liaNode.retractLeftTuple(fh4.getFirstLeftTuple(), context, wm); assertFalse(liaMem.getSegmentMemory().isSegmentLinked()); }