package org.semanticweb.HermiT.tableau; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import org.semanticweb.HermiT.Configuration; import org.semanticweb.HermiT.blocking.AnywhereBlocking; import org.semanticweb.HermiT.blocking.BlockingSignatureCache; import org.semanticweb.HermiT.blocking.BlockingStrategy; import org.semanticweb.HermiT.blocking.DirectBlockingChecker; import org.semanticweb.HermiT.blocking.PairWiseDirectBlockingChecker; import org.semanticweb.HermiT.existentials.CreationOrderStrategy; import org.semanticweb.HermiT.existentials.ExistentialExpansionStrategy; import org.semanticweb.HermiT.model.Atom; import org.semanticweb.HermiT.model.Concept; import org.semanticweb.HermiT.model.DLClause; import org.semanticweb.HermiT.model.DLOntology; import org.semanticweb.HermiT.model.DescriptionGraph; import org.semanticweb.HermiT.monitor.TableauMonitor; import org.semanticweb.HermiT.reasoner.AbstractReasonerTest; import org.semanticweb.HermiT.structural.OWLClausification; public abstract class AbstractReasonerInternalsTest extends AbstractReasonerTest { public AbstractReasonerInternalsTest(String name) { super(name); } protected DLOntology getDLOntology(Configuration c,Set<DescriptionGraph> dgs) throws Exception { OWLClausification clausification=new OWLClausification(c); if (dgs==null) dgs=Collections.emptySet(); return (DLOntology)clausification.preprocessAndClausify(m_ontology,dgs)[1]; } protected Tableau getTableau(Set<DescriptionGraph> dgs) throws Exception { Configuration c=new Configuration(); c.directBlockingType=Configuration.DirectBlockingType.PAIR_WISE; c.blockingStrategyType=Configuration.BlockingStrategyType.ANYWHERE; c.existentialStrategyType=Configuration.ExistentialStrategyType.CREATION_ORDER; DLOntology dlOntology=getDLOntology(c,dgs); DirectBlockingChecker directBlockingChecker=new PairWiseDirectBlockingChecker(); BlockingSignatureCache blockingSignatureCache=new BlockingSignatureCache(directBlockingChecker); BlockingStrategy blockingStrategy=new AnywhereBlocking(directBlockingChecker,blockingSignatureCache); ExistentialExpansionStrategy expansionStrategy=new CreationOrderStrategy(blockingStrategy); return new Tableau(new InterruptFlag(-1),getTableauMonitor(),expansionStrategy,false,dlOntology,null,new HashMap<String,Object>()); } protected Tableau getTableau() throws Exception { return getTableau(null); } protected TableauMonitor getTableauMonitor() { return null; } protected boolean shouldPrepareForNIRule() { return false; } protected static void assertRetrieval(ExtensionTable extensionTable,Object[] searchTuple,ExtensionTable.View extensionView,Object[][] expectedTuples) { boolean[] bindingPattern=new boolean[searchTuple.length]; for (int i=0;i<searchTuple.length;i++) if (searchTuple[i]!=null) bindingPattern[i]=true; ExtensionTable.Retrieval retrieval=extensionTable.createRetrieval(bindingPattern,extensionView); System.arraycopy(searchTuple,0,retrieval.getBindingsBuffer(),0,searchTuple.length); assertRetrieval(retrieval,expectedTuples); } protected static void assertRetrieval(ExtensionTable.Retrieval retrieval,Object[][] expectedTuples) { retrieval.open(); boolean[] consumed=new boolean[expectedTuples.length]; while (!retrieval.afterLast()) { Object[] tupleBuffer=retrieval.getTupleBuffer(); boolean tupleFound=false; for (int i=0;!tupleFound&&i<expectedTuples.length;i++) { if (!consumed[i]&&tuplesEqual(tupleBuffer,expectedTuples[i])) { consumed[i]=true; tupleFound=true; } } if (!tupleFound) fail("Tuple from the retrieval not found in the expected tuples."); retrieval.next(); } for (int i=0;i<consumed.length;i++) if (!consumed[i]) fail("Tuple from the expected list has not been seen in the retrieval."); } protected static void assertEquals(Object[] tuple1,Object[] tuple2) { assertEquals(tuple1.length,tuple2.length); for (int index=0;index<tuple1.length;index++) assertEquals(tuple1[index],tuple2[index]); } protected static boolean tuplesEqual(Object[] tuple1,Object[] tuple2) { if (tuple1.length!=tuple2.length) return false; for (int i=0;i<tuple1.length;i++) if (!tuple1[i].equals(tuple2[i])) return false; return true; } protected static Object[] T(Object... nodes) { return nodes; } protected static void assertLabel(Tableau tableau,Node node,Concept... expected) { Set<Concept> actual=new HashSet<Concept>(); ExtensionTable.Retrieval retrieval=tableau.getExtensionManager().getBinaryExtensionTable().createRetrieval(new boolean[] { false,true },ExtensionTable.View.TOTAL); retrieval.getBindingsBuffer()[1]=node; retrieval.open(); Object[] tupleBuffer=retrieval.getTupleBuffer(); while (!retrieval.afterLast()) { Object object=tupleBuffer[0]; if (object instanceof Concept) actual.add((Concept)object); retrieval.next(); } assertContainsAll(actual,expected); } protected static DLOntology getTestDLOntology(Set<DLClause> dlClauses) { Set<Atom> atoms=Collections.emptySet(); return new DLOntology( "opaque:test", // ontology_URI dlClauses, // clauses atoms, // positive facts atoms, // negative facts null, // atomic concepts null, // object roles null, // complex role inclusions null, // data roles null, // unknown datatype restrictions null, // custom datatype definitions null, // individuals true, // hasInverseRoles false, // hasAtMostRestrictions false, // hasNominals false // hasDatatypes ); } }