@Test(timeout = 10000 ) public void testDefeatOutcomePosNeg() { KieSession kSession = getSession( "org/drools/compiler/beliefsystem/defeasible/negDefeatPos.drl" ); ArrayList list = new ArrayList(); kSession.setGlobal( "list", list ); kSession.fireAllRules(); TruthMaintenanceSystem tms = ((NamedEntryPoint) kSession.getEntryPoint( "DEFAULT" )).getTruthMaintenanceSystem(); FactType Xtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "X" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry; while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) { EqualityKey key = (EqualityKey) entry.getValue(); Class factClass = key.getFactHandle().getObject().getClass(); if ( factClass == Xtype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFEASIBLY ); } else { fail( "Unrecognized object has been logically justified : " + factClass ); } } assertEquals( 2, kSession.getObjects().size() ); assertEquals( 1, getNegativeObjects(kSession).size() ); assertEquals( 1, list.size() ); assertTrue( list.contains( "-1" ) ); }
FactHandle fz = ksession.getTruthMaintenanceSystem().insert( string, null, null, new MockActivation() ); tms.getEqualityKeyMap().size() ); EqualityKey key = tms.get( string ); assertSame( fz, key.getFactHandle() ); tms.getEqualityKeyMap().size() ); key = tms.get( string ); assertSame( fz, key.getFactHandle() ); tms.getEqualityKeyMap().size() ); key = tms.get( string ); tms.getEqualityKeyMap().size() ); tms.getEqualityKeyMap().size() ); key = tms.get( string ); assertSame( fd, key.getFactHandle() );
ObjectHashMap equalityMap = ep.getTruthMaintenanceSystem().getEqualityKeyMap(); assertEquals( 2, equalityMap.size() ); // go1, neg are two different strings. org.drools.core.util.Iterator it = equalityMap.iterator(); ep.getTruthMaintenanceSystem().delete( key.getLogicalFactHandle() ); assertEquals( 0, getNegativeObjects(kSession).size() ); assertEquals( 0, key.getBeliefSet().size() ); assertEquals( 1, ep.getTruthMaintenanceSystem().getEqualityKeyMap().size() );
@Test public void shouldLazilyAdd() throws Exception { final String fact1 = "logical"; ksession.insert(fact1); assertEquals( "Shouldn't have anything, since no logical insert was performed.", 0, tms.getEqualityKeyMap().size()); final String fact2 = "logical"; ksession.getTruthMaintenanceSystem().insert( fact2, null, null, new MockActivation() ); assertEquals( "Now that a logical insert was done, it should have an element.", 1, tms.getEqualityKeyMap().size()); // Make sure the internals are fine. ObjectTypeConf typeConf = ksession.getObjectTypeConfigurationRegistry() .getObjectTypeConf(ksession.getEntryPoint(), fact1); assertTrue("Should have enabled TMS", typeConf.isTMSEnabled()); }
@Test(timeout=10000) public void testLogicalWithDeleteException() { String droolsSource = "package org.drools.tms.test; \n" + "global java.util.List list; \n" + "rule Justify \n" + "when \n" + " String( this == 'go1' ) " + "then \n" + " insertLogical( 'f1' ); \n" + "end \n" + "" ; KieBaseConfiguration kieConf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kieConf.setOption( EqualityBehaviorOption.IDENTITY ); KieBase kbase = loadKnowledgeBaseFromString( kieConf, droolsSource ); KieSession session = kbase.newKieSession(); try { List list = new ArrayList(); session.setGlobal("list", list); session.insert( "go1" ); session.fireAllRules(); TruthMaintenanceSystem tms = ((StatefulKnowledgeSessionImpl)session).getTruthMaintenanceSystem(); InternalFactHandle jfh1 = tms.get( "f1" ).getLogicalFactHandle(); assertSame( jfh1, session.getFactHandle( "f1" ) ); } finally { session.dispose(); } }
@Test(timeout = 10000 ) public void testConflictStrict() { KieSession kSession = getSessionFromFile( "posNegConflict.drl" ); ArrayList list = new ArrayList(); kSession.setGlobal( "list", list ); NamedEntryPoint ep = ( NamedEntryPoint ) ((StatefulKnowledgeSessionImpl)kSession).getEntryPoint( "DEFAULT" ); JTMSBeliefSystem bs = ( JTMSBeliefSystem ) ep.getTruthMaintenanceSystem().getBeliefSystem(); bs.STRICT = true; try { kSession.fireAllRules(); fail( "A fact and its negation should have been asserted, but no exception was trhown in strict mode" ); } catch ( Exception e ) { } finally { bs.STRICT = false; } }
((StatefulKnowledgeSessionImpl)session).getTruthMaintenanceSystem().delete( h1 ); session.fireAllRules(); list = session.getObjects( new ClassObjectFilter( a.getClass() ) );
InternalFactHandle jfh1 = ((StatefulKnowledgeSessionImpl)session).getTruthMaintenanceSystem().get( "f1" ).getLogicalFactHandle(); assertEquals( EqualityKey.JUSTIFIED, jfh1.getEqualityKey().getStatus());
@Test(timeout = 10000 ) public void testDefeaterNeutrality() { KieSession kSession = getSession( "org/drools/compiler/beliefsystem/defeasible/defeaterOnly.drl" ); ArrayList list = new ArrayList(); kSession.setGlobal( "list", list ); kSession.fireAllRules(); TruthMaintenanceSystem tms = ((NamedEntryPoint) kSession.getEntryPoint( "DEFAULT" )).getTruthMaintenanceSystem(); FactType Xtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "X" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry; while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) { EqualityKey key = (EqualityKey) entry.getValue(); Class factClass = key.getFactHandle().getObject().getClass(); if ( factClass == Xtype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFEATEDLY ); } else { fail( "Unrecognized object has been logically justified : " + factClass ); } } for ( Object o : kSession.getObjects() ) { System.out.println( o ); } assertEquals( 0, list.size() ); assertEquals( 1, kSession.getFactCount() ); }
InternalFactHandle jfh1 = tms.get( "f1" ).getLogicalFactHandle(); assertEquals(EqualityKey.JUSTIFIED, jfh1.getEqualityKey().getStatus() );
FactType Xtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "X" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry; kSession.fireAllRules(); keys = tms.getEqualityKeyMap(); iter = keys.iterator(); while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) { keys = tms.getEqualityKeyMap(); iter = keys.iterator(); while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) {
InternalFactHandle jfh1 = tms.get( "f1" ).getLogicalFactHandle(); assertEquals(EqualityKey.JUSTIFIED, jfh1.getEqualityKey().getStatus() );
@Test(timeout = 10000 ) public void defeasibleEntailmentMultiActivation() { KieSession kSession = getSession( "org/drools/compiler/beliefsystem/defeasible/defeat.drl" ); kSession.fireAllRules(); TruthMaintenanceSystem tms = ((NamedEntryPoint) kSession.getEntryPoint( "DEFAULT" )).getTruthMaintenanceSystem(); FactType Xtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "X" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry; while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) { EqualityKey key = (EqualityKey) entry.getValue(); Class factClass = key.getFactHandle().getObject().getClass(); if ( factClass == Xtype.getFactClass() ) { checkStatus( key, 3, DefeasibilityStatus.UNDECIDABLY ); } else { fail( "Unrecognized object has been logically justified : " + factClass ); } } assertEquals( 3, kSession.getObjects().size() ); }
InternalFactHandle jfh1 = tms.get( "f1" ).getLogicalFactHandle(); EqualityKey key = jfh1.getEqualityKey(); assertSame( fh1.getEqualityKey(), key );
@Test(timeout = 10000 ) public void testMultipleDefeats() { KieSession kSession = getSession( "org/drools/compiler/beliefsystem/defeasible/multiDefeat.drl" ); kSession.fireAllRules(); TruthMaintenanceSystem tms = ((NamedEntryPoint) kSession.getEntryPoint( "DEFAULT" )).getTruthMaintenanceSystem(); FactType Xtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "X" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry; while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) { EqualityKey key = (EqualityKey) entry.getValue(); Class factClass = key.getFactHandle().getObject().getClass(); if ( factClass == Xtype.getFactClass() ) { checkStatus( key, 2, DefeasibilityStatus.DEFEATEDLY ); } else { fail( "Unrecognized object has been logically justified : " + factClass ); } } for ( Object o : kSession.getObjects() ) { System.out.println( o ); } assertEquals( 2, kSession.getObjects().size() ); kSession.fireAllRules(); }
FactType Xtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "X" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry;
assertTrue(tms.getEqualityKeyMap().isEmpty()); } finally { ksession.dispose();
@Test(timeout = 10000 ) public void testStrictEntailment() { KieSession kSession = getSession( "org/drools/compiler/beliefsystem/defeasible/strict.drl" ); kSession.fireAllRules(); TruthMaintenanceSystem tms = ((NamedEntryPoint) kSession.getEntryPoint( "DEFAULT" )).getTruthMaintenanceSystem(); FactType Ctype = kSession.getKieBase().getFactType( "org.drools.defeasible", "C" ); FactType Dtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "D" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry; while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) { EqualityKey key = (EqualityKey) entry.getValue(); Class factClass = key.getFactHandle().getObject().getClass(); if ( factClass == Ctype.getFactClass() ) { checkStatus( key, 2, DefeasibilityStatus.DEFINITELY ); } else if ( factClass == Dtype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFINITELY ); } else { fail( "Unrecognized object has been logically justified : " + factClass ); } } assertEquals( 5, kSession.getObjects().size() ); }