package org.semanticweb.HermiT.tableau;
import junit.framework.TestCase;
public class DependencySetTest extends TestCase {
protected DependencySetFactory m_factory;
public DependencySetTest(String name) {
super(name);
}
protected void setUp() {
m_factory=new DependencySetFactory();
}
public void testDependencySet1() {
PermanentDependencySet set=m_factory.emptySet();
assertDSEquals(set);
assertTrue(set.isEmpty());
set=m_factory.addBranchingPoint(set,32);
assertFalse(set.isEmpty());
assertDSEquals(set,32);
set=m_factory.addBranchingPoint(set,0);
assertDSEquals(set,0,32);
PermanentDependencySet set2=m_factory.addBranchingPoint(m_factory.emptySet(),0);
assertTrue(set!=set2);
assertSame(set,m_factory.addBranchingPoint(set2,32));
set=m_factory.unionWith(set,m_factory.addBranchingPoint(m_factory.addBranchingPoint(set2,15),17));
assertDSEquals(set,0,15,17,32);
assertSame(set,m_factory.unionWith(set,m_factory.emptySet()));
assertSame(set,m_factory.addBranchingPoint(m_factory.unionWith(set,m_factory.emptySet()),17));
assertSame(set,m_factory.removeBranchingPoint(set,13));
set=m_factory.removeBranchingPoint(set,17);
assertDSEquals(set,0,15,32);
set=m_factory.removeBranchingPoint(set,15);
assertDSEquals(set,0,32);
set=m_factory.removeBranchingPoint(set,32);
assertDSEquals(set,0);
}
public void testDependencySet2() {
PermanentDependencySet set1=m_factory.emptySet();
set1=m_factory.addBranchingPoint(set1,10);
set1=m_factory.addBranchingPoint(set1,3);
set1=m_factory.addBranchingPoint(set1,1);
set1=m_factory.addBranchingPoint(set1,14);
assertDSEquals(set1,1,3,10,14);
PermanentDependencySet set2=m_factory.emptySet();
set2=m_factory.addBranchingPoint(set2,15);
set2=m_factory.addBranchingPoint(set2,10);
set2=m_factory.addBranchingPoint(set2,1);
set2=m_factory.addBranchingPoint(set2,17);
assertDSEquals(set2,1,10,15,17);
PermanentDependencySet set3=m_factory.unionWith(set1,set2);
assertDSEquals(set3,1,3,10,14,15,17);
}
public void testDependencySet3() {
PermanentDependencySet set1=m_factory.emptySet();
set1=m_factory.addBranchingPoint(set1,10);
set1=m_factory.addBranchingPoint(set1,3);
set1=m_factory.addBranchingPoint(set1,1);
assertDSEquals(set1,1,3,10);
PermanentDependencySet set2=m_factory.emptySet();
set2=m_factory.addBranchingPoint(set2,14);
set2=m_factory.addBranchingPoint(set2,3);
set2=m_factory.addBranchingPoint(set2,1);
set2=m_factory.addBranchingPoint(set2,17);
assertDSEquals(set2,1,3,14,17);
PermanentDependencySet set3=m_factory.emptySet();
set3=m_factory.addBranchingPoint(set3,14);
set3=m_factory.addBranchingPoint(set3,3);
set3=m_factory.addBranchingPoint(set3,2);
set3=m_factory.addBranchingPoint(set3,18);
assertDSEquals(set3,2,3,14,18);
UnionDependencySet union=new UnionDependencySet(3);
union.m_dependencySets[0]=set1;
union.m_dependencySets[1]=set2;
union.m_dependencySets[2]=set3;
PermanentDependencySet set4=m_factory.getPermanent(union);
assertDSEquals(set4,1,2,3,10,14,17,18);
}
protected static void assertDSEquals(PermanentDependencySet dependencySet,int... expectedSortedMembers) {
PermanentDependencySet checkSet=dependencySet;
for (int index=expectedSortedMembers.length-1;index>=0;--index) {
int expectedBranchingPoint=expectedSortedMembers[index];
if (expectedBranchingPoint!=checkSet.m_branchingPoint) {
StringBuffer buffer=new StringBuffer();
buffer.append("Dependency sets are different: expected { ");
for (int i=expectedSortedMembers.length-1;i>=0;--i) {
buffer.append(expectedSortedMembers[i]);
if (i>0)
buffer.append(',');
}
buffer.append(" } but got { ");
while (dependencySet.m_branchingPoint!=-1) {
buffer.append(dependencySet.m_branchingPoint);
if (dependencySet.m_rest.m_branchingPoint!=-1)
buffer.append(',');
dependencySet=dependencySet.m_rest;
}
buffer.append(" }.");
fail(buffer.toString());
}
checkSet=checkSet.m_rest;
}
}
protected static int getIndex(int branchingPoint,int[] expectedMembers) {
for (int index=0;index<expectedMembers.length;index++)
if (expectedMembers[index]==branchingPoint)
return index;
return -1;
}
}