/**
* Copyright CSIRO Australian e-Health Research Centre (http://aehrc.com).
* All rights reserved. Use is subject to license terms and conditions.
*/
package au.csiro.snorocket.core;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import junit.framework.Assert;
import org.junit.Test;
import au.csiro.ontology.Factory;
import au.csiro.ontology.Node;
import au.csiro.ontology.Ontology;
import au.csiro.ontology.model.Axiom;
import au.csiro.ontology.model.Concept;
import au.csiro.ontology.model.ConceptInclusion;
import au.csiro.ontology.model.Conjunction;
import au.csiro.ontology.model.Existential;
import au.csiro.ontology.model.NamedConcept;
import au.csiro.ontology.model.NamedRole;
import au.csiro.ontology.model.Role;
import au.csiro.ontology.model.RoleInclusion;
import au.csiro.snorocket.core.util.Utils;
/**
* @author Alejandro Metke
*
*/
public class TestSnorocketReasoner {
/**
*
*/
// @Test
public void testSave() {
// Original Endocarditis ontology axioms
NamedRole contIn = new NamedRole("cont-in");
NamedRole partOf = new NamedRole("part-of");
NamedRole hasLoc = new NamedRole("has-loc");
NamedRole actsOn = new NamedRole("acts-on");
NamedConcept tissue = new NamedConcept("Tissue");
NamedConcept heartWall = new NamedConcept("HeartWall");
NamedConcept heartValve = new NamedConcept("HeartValve");
NamedConcept bodyWall = new NamedConcept("BodyWall");
NamedConcept heart = new NamedConcept("Heart");
NamedConcept bodyValve = new NamedConcept("BodyValve");
NamedConcept inflammation = new NamedConcept("Inflammation");
NamedConcept disease = new NamedConcept("Disease");
NamedConcept heartdisease = new NamedConcept("Heartdisease");
NamedConcept criticalDisease = new NamedConcept("CriticalDisease");
ConceptInclusion a2 = new ConceptInclusion(heartWall, new Conjunction(
new Concept[] { bodyWall, new Existential(partOf, heart) }));
ConceptInclusion a3 = new ConceptInclusion(heartValve, new Conjunction(
new Concept[] { bodyValve, new Existential(partOf, heart) }));
ConceptInclusion a5 = new ConceptInclusion(inflammation,
new Conjunction(new Concept[] { disease, new Existential(actsOn, tissue) }));
ConceptInclusion a6 = new ConceptInclusion(new Conjunction(
new Concept[] { heartdisease, new Existential(hasLoc, heartValve) }), criticalDisease);
ConceptInclusion a7 = new ConceptInclusion(heartdisease,
new Conjunction(new Concept[] { disease, new Existential(hasLoc, heart) }));
ConceptInclusion a8 = new ConceptInclusion(
new Conjunction(new Concept[] { disease, new Existential(hasLoc, heart) }), heartdisease);
RoleInclusion a9 = new RoleInclusion(new Role[] { partOf, partOf }, partOf);
RoleInclusion a10 = new RoleInclusion(partOf, contIn);
RoleInclusion a11 = new RoleInclusion(new Role[] { hasLoc, contIn }, hasLoc);
// Partial ontology
Set<Axiom> axioms = new HashSet<Axiom>();
axioms.add(a2);
axioms.add(a3);
axioms.add(a5);
axioms.add(a6);
axioms.add(a7);
axioms.add(a8);
axioms.add(a9);
axioms.add(a10);
axioms.add(a11);
SnorocketReasoner sr = new SnorocketReasoner();
sr.loadAxioms(axioms);
sr.classify();
try {
// Save to temp file
File temp = File.createTempFile("temp",".ser");
temp.deleteOnExit();
sr.save(new FileOutputStream(temp));
sr = null;
sr = SnorocketReasoner.load(new FileInputStream(temp));
} catch(Exception ex) {
ex.printStackTrace();
assertTrue(false);
}
// Add delta axioms and classify incrementally
NamedConcept endocardium = new NamedConcept("Endocardium");
NamedConcept endocarditis = new NamedConcept("Endocarditis");
ConceptInclusion a1 = new ConceptInclusion(endocardium,
new Conjunction(new Concept[] { tissue,
new Existential(contIn, heartWall),
new Existential(contIn, heartValve) }));
ConceptInclusion a4 = new ConceptInclusion(endocarditis,
new Conjunction(new Concept[] { inflammation, new Existential(hasLoc, endocardium) }));
Set<Axiom> incAxioms = new HashSet<Axiom>();
incAxioms.add(a1);
incAxioms.add(a4);
sr.loadAxioms(incAxioms);
sr.classify();
// Test results
Ontology ont = sr.getClassifiedOntology();
Node bottom = ont.getBottomNode();
Set<Node> bottomRes = bottom.getParents();
assertTrue(bottomRes.size() == 5);
assertTrue(bottomRes.contains(ont.getNode(endocardium.getId())));
assertTrue(bottomRes.contains(ont.getNode(endocarditis.getId())));
assertTrue(bottomRes.contains(ont.getNode(heartWall.getId())));
assertTrue(bottomRes.contains(ont.getNode(heartValve.getId())));
assertTrue(bottomRes.contains(ont.getNode(heart.getId())));
Node endocarditisNode = ont.getNode(endocarditis.getId());
Set<Node> endocarditisRes = endocarditisNode.getParents();
assertTrue(endocarditisRes.size() == 3);
assertTrue(endocarditisRes.contains(ont.getNode(inflammation.getId())));
assertTrue(endocarditisRes.contains(ont.getNode(heartdisease.getId())));
assertTrue(endocarditisRes.contains(ont.getNode(criticalDisease.getId())));
Node inflammationNode = ont.getNode(inflammation.getId());
Set<Node> inflammationRes = inflammationNode.getParents();
assertTrue(inflammationRes.size() == 1);
assertTrue(inflammationRes.contains(ont.getNode(disease.getId())));
Node endocardiumNode = ont.getNode(endocardium.getId());
Set<Node> endocardiumRes = endocardiumNode.getParents();
assertTrue(endocardiumRes.size() == 1);
assertTrue(endocardiumRes.contains(ont.getNode(tissue.getId())));
Node heartdiseaseNode = ont.getNode(heartdisease.getId());
Set<Node> heartdiseaseRes = heartdiseaseNode.getParents();
assertTrue(heartdiseaseRes.size() == 1);
assertTrue(heartdiseaseRes.contains(ont.getNode(disease.getId())));
Node heartWallNode = ont.getNode(heartWall.getId());
Set<Node> heartWallRes = heartWallNode.getParents();
assertTrue(heartWallRes.size() == 1);
assertTrue(heartWallRes.contains(ont.getNode(bodyWall.getId())));
Node heartValveNode = ont.getNode(heartValve.getId());
Set<Node> heartValveRes = heartValveNode.getParents();
assertTrue(heartValveRes.size() == 1);
assertTrue(heartValveRes
.contains(ont.getNode(bodyValve.getId())));
Node diseaseNode = ont.getNode(disease.getId());
Set<Node> diseaseRes = diseaseNode.getParents();
assertTrue(diseaseRes.size() == 1);
assertTrue(diseaseRes.contains(ont.getTopNode()));
Node tissueNode = ont.getNode(tissue.getId());
Set<Node> tissueRes = tissueNode.getParents();
assertTrue(tissueRes.size() == 1);
assertTrue(tissueRes.contains(ont.getTopNode()));
Node heartNode = ont.getNode(heart.getId());
Set<Node> heartRes = heartNode.getParents();
assertTrue(heartRes.size() == 1);
assertTrue(heartRes.contains(ont.getTopNode()));
Node bodyValveNode = ont.getNode(bodyValve.getId());
Set<Node> bodyValveRes = bodyValveNode.getParents();
assertTrue(bodyValveRes.size() == 1);
assertTrue(bodyValveRes.contains(ont.getTopNode()));
Node bodyWallNode = ont.getNode(bodyWall.getId());
Set<Node> bodyWallRes = bodyWallNode.getParents();
assertTrue(bodyWallRes.size() == 1);
assertTrue(bodyWallRes.contains(ont.getTopNode()));
Node criticalDiseaseNode = ont.getNode(criticalDisease.getId());
Set<Node> criticalDiseaseRes = criticalDiseaseNode.getParents();
assertTrue(criticalDiseaseRes.size() == 1);
assertTrue(criticalDiseaseRes.contains(ont.getTopNode()));
}
@Test
public void testNesting() {
NamedRole rg = new NamedRole("RoleGroup");
NamedRole fs = new NamedRole("site");
NamedRole am = new NamedRole("morph");
NamedRole lat = new NamedRole("lat");
NamedConcept finding = new NamedConcept("Finding");
NamedConcept fracfind = new NamedConcept("FractureFinding");
NamedConcept limb = new NamedConcept("Limb");
NamedConcept arm = new NamedConcept("Arm");
NamedConcept left = new NamedConcept("Left");
NamedConcept fracture = new NamedConcept("Fracture");
NamedConcept burn = new NamedConcept("Burn");
NamedConcept right = new NamedConcept("Right");
NamedConcept multi = new NamedConcept("Multiple");
Concept[] larm = {
arm, new Existential(lat, left)
};
Concept[] rarm = {
arm, new Existential(lat, right)
};
Concept[] g1 = {
new Existential(fs, new Conjunction(rarm)),
new Existential(fs, arm),
new Existential(am, fracture),
};
Concept[] g2 = {
new Existential(fs, new Conjunction(larm)),
new Existential(am, burn),
};
Concept[] rhs = {
finding,
new Existential(rg, new Conjunction(g1)),
new Existential(rg, new Conjunction(g2)),
};
Concept[] rhs2 = {
finding,
new Existential(rg, new Existential(am, fracture)),
};
Axiom[] inclusions = {
new ConceptInclusion(multi, new Conjunction(rhs)),
new ConceptInclusion(arm, limb),
new ConceptInclusion(fracfind, new Conjunction(rhs2)),
new ConceptInclusion(new Conjunction(rhs2), fracfind),
};
Set<Axiom> axioms = new HashSet<Axiom>();
for (Axiom a : inclusions) {
axioms.add(a);
}
// Classify
SnorocketReasoner sr = new SnorocketReasoner();
sr.loadAxioms(axioms);
sr.classify();
Ontology ont = sr.getClassifiedOntology();
Utils.printTaxonomy(ont.getTopNode(), ont.getBottomNode());
try {
for (Axiom a: axioms) {
System.out.println("Stated: " + a);
}
for (Axiom a: sr.getInferredAxioms()) {
System.out.println("Axiom: " + a);
}
} catch (Throwable t) {
t.printStackTrace();
}
}
@Test
public void testInferredRoleRedunancy() {
Set<Axiom> axioms = new HashSet<Axiom>();
NamedRole pRole = new NamedRole("findSite");
NamedRole cRole = new NamedRole("findSite-Direct");
axioms.add(new RoleInclusion(cRole, pRole));
NamedConcept appendicitis = new NamedConcept("appendicitis");
NamedConcept appendix = new NamedConcept("appendix");
axioms.add(new ConceptInclusion(appendicitis, new Existential(cRole, appendix)));
axioms.add(new ConceptInclusion(appendicitis, new Existential(pRole, appendix)));
NamedConcept complex = new NamedConcept("complex");
axioms.add(new ConceptInclusion(complex, new Existential(cRole, new Existential(pRole, appendix))));
axioms.add(new ConceptInclusion(complex, new Existential(pRole, new Existential(pRole, appendix))));
SnorocketReasoner sr = new SnorocketReasoner();
sr.loadAxioms(axioms);
sr.classify();
Collection<Axiom> inferred = sr.getInferredAxioms();
for (Axiom a: inferred) {
System.err.println(a);
if (a instanceof ConceptInclusion) {
ConceptInclusion i = (ConceptInclusion) a;
if (appendicitis.equals(i.getLhs())) {
assertTrue("Inferred RHS should be a single Existential", i.getRhs() instanceof Existential);
Existential e = (Existential) i.getRhs();
assertEquals(cRole, e.getRole());
assertEquals(appendix, e.getConcept());
} else if (complex.equals(i.getLhs())) {
assertEquals(new Existential(cRole, new Existential(pRole, appendix)), i.getRhs());
}
}
}
}
@Test
public void testEndocarditis() {
// Create roles
NamedRole contIn = new NamedRole("cont-in");
NamedRole partOf = new NamedRole("part-of");
NamedRole hasLoc = new NamedRole("has-loc");
NamedRole actsOn = new NamedRole("acts-on");
// Create concepts
NamedConcept endocardium = new NamedConcept("Endocardium");
NamedConcept tissue = new NamedConcept("Tissue");
NamedConcept heartWall = new NamedConcept("HeartWall");
NamedConcept heartValve = new NamedConcept("HeartValve");
NamedConcept bodyWall = new NamedConcept("BodyWall");
NamedConcept heart = new NamedConcept("Heart");
NamedConcept bodyValve = new NamedConcept("BodyValve");
NamedConcept endocarditis = new NamedConcept("Endocarditis");
NamedConcept inflammation = new NamedConcept("Inflammation");
NamedConcept disease = new NamedConcept("Disease");
NamedConcept heartdisease = new NamedConcept("Heartdisease");
NamedConcept criticalDisease = new NamedConcept("CriticalDisease");
// Create axioms
ConceptInclusion a1 = new ConceptInclusion(endocardium,
new Conjunction(new Concept[] { tissue,
new Existential(contIn, heartWall),
new Existential(contIn, heartValve) }));
ConceptInclusion a2 = new ConceptInclusion(heartWall, new Conjunction(
new Concept[] { bodyWall,
new Existential(partOf, heart) }));
ConceptInclusion a3 = new ConceptInclusion(heartValve, new Conjunction(
new Concept[] { bodyValve,
new Existential(partOf, heart) }));
ConceptInclusion a4 = new ConceptInclusion(endocarditis,
new Conjunction(new Concept[] { inflammation,
new Existential(hasLoc, endocardium) }));
ConceptInclusion a5 = new ConceptInclusion(inflammation,
new Conjunction(new Concept[] { disease,
new Existential(actsOn, tissue) }));
ConceptInclusion a6 = new ConceptInclusion(new Conjunction(
new Concept[] { heartdisease,
new Existential(hasLoc, heartValve) }),
criticalDisease);
ConceptInclusion a7 = new ConceptInclusion(heartdisease,
new Conjunction(new Concept[] { disease,
new Existential(hasLoc, heart) }));
ConceptInclusion a8 = new ConceptInclusion(
new Conjunction(new Concept[] { disease,
new Existential(hasLoc, heart) }),
heartdisease);
RoleInclusion a9 = new RoleInclusion(new Role[] { partOf, partOf }, partOf);
RoleInclusion a10 = new RoleInclusion(partOf, contIn);
RoleInclusion a11 = new RoleInclusion(new Role[] { hasLoc, contIn }, hasLoc);
Set<Axiom> axioms = new HashSet<Axiom>();
axioms.add(a1);
axioms.add(a2);
axioms.add(a3);
axioms.add(a4);
axioms.add(a5);
axioms.add(a6);
axioms.add(a7);
axioms.add(a8);
axioms.add(a9);
axioms.add(a10);
axioms.add(a11);
// Classify
SnorocketReasoner sr = new SnorocketReasoner();
sr.loadAxioms(axioms);
sr.classify();
Ontology ont = sr.getClassifiedOntology();
Utils.printTaxonomy(ont.getTopNode(), ont.getBottomNode());
// Test taxonomy results
Node bottomNode = ont.getBottomNode();
Set<Node> bottomRes = bottomNode.getParents();
assertTrue(bottomRes.size() == 5);
assertTrue(bottomRes.contains(ont.getNode(endocardium.getId())));
assertTrue(bottomRes.contains(ont.getNode(endocarditis.getId())));
assertTrue(bottomRes.contains(ont.getNode(heartWall.getId())));
assertTrue(bottomRes.contains(ont.getNode(heartValve.getId())));
assertTrue(bottomRes.contains(ont.getNode(heart.getId())));
Node endocarditisNode = ont.getNode(endocarditis.getId());
Set<Node> endocarditisRes = endocarditisNode.getParents();
assertTrue(endocarditisRes.size() == 3);
assertTrue(endocarditisRes.contains(ont.getNode(inflammation.getId())));
assertTrue(endocarditisRes.contains(ont.getNode(heartdisease.getId())));
assertTrue(endocarditisRes.contains(ont.getNode(criticalDisease.getId())));
Node inflammationNode = ont.getNode(inflammation.getId());
Set<Node> inflammationRes = inflammationNode.getParents();
assertTrue(inflammationRes.size() == 1);
assertTrue(inflammationRes.contains(ont.getNode(disease.getId())));
Node endocardiumNode = ont.getNode(endocardium.getId());
Set<Node> endocardiumRes = endocardiumNode.getParents();
assertTrue(endocardiumRes.size() == 1);
assertTrue(endocardiumRes.contains(ont.getNode(tissue.getId())));
Node heartdiseaseNode = ont.getNode(heartdisease.getId());
Set<Node> heartdiseaseRes = heartdiseaseNode.getParents();
assertTrue(heartdiseaseRes.size() == 1);
assertTrue(heartdiseaseRes.contains(ont.getNode(disease.getId())));
Node heartWallNode = ont.getNode(heartWall.getId());
Set<Node> heartWallRes = heartWallNode.getParents();
assertTrue(heartWallRes.size() == 1);
assertTrue(heartWallRes.contains(ont.getNode(bodyWall.getId())));
Node heartValveNode = ont.getNode(heartValve.getId());
Set<Node> heartValveRes = heartValveNode.getParents();
assertTrue(heartValveRes.size() == 1);
assertTrue(heartValveRes.contains(ont.getNode(bodyValve.getId())));
Node diseaseNode = ont.getNode(disease.getId());
Set<Node> diseaseRes = diseaseNode.getParents();
assertTrue(diseaseRes.size() == 1);
assertTrue(diseaseRes.contains(ont.getTopNode()));
Node tissueNode = ont.getNode(tissue.getId());
Set<Node> tissueRes = tissueNode.getParents();
assertTrue(tissueRes.size() == 1);
assertTrue(tissueRes.contains(ont.getTopNode()));
Node heartNode = ont.getNode(heart.getId());
Set<Node> heartRes = heartNode.getParents();
assertTrue(heartRes.size() == 1);
assertTrue(heartRes.contains(ont.getTopNode()));
Node bodyValveNode = ont.getNode(bodyValve.getId());
Set<Node> bodyValveRes = bodyValveNode.getParents();
assertTrue(bodyValveRes.size() == 1);
assertTrue(bodyValveRes.contains(ont.getTopNode()));
Node bodyWallNode = ont.getNode(bodyWall.getId());
Set<Node> bodyWallRes = bodyWallNode.getParents();
assertTrue(bodyWallRes.size() == 1);
assertTrue(bodyWallRes.contains(ont.getTopNode()));
Node criticalDiseaseNode = ont.getNode(criticalDisease.getId());
Set<Node> criticalDiseaseRes = criticalDiseaseNode.getParents();
assertTrue(criticalDiseaseRes.size() == 1);
assertTrue(criticalDiseaseRes.contains(ont.getTopNode()));
try {
for (Axiom a: sr.getInferredAxioms()) {
System.out.println("Axiom: " + a);
}
} catch (Throwable t) {
t.printStackTrace();
}
}
/**
* Tests the identification of possibly affected concepts after an
* incremental taxonomy calculation.
*/
//@Test
public void testIncrementalTaxonomy() {
Concept a = Factory.createNamedConcept("A");
Concept b = Factory.createNamedConcept("B");
Concept c = Factory.createNamedConcept("C");
Concept d = Factory.createNamedConcept("D");
Concept e = Factory.createNamedConcept("E");
Concept f = Factory.createNamedConcept("F");
Concept g = Factory.createNamedConcept("G");
Axiom a1 = Factory.createConceptInclusion(b, a);
Axiom a2 = Factory.createConceptInclusion(c, b);
Axiom a3 = Factory.createConceptInclusion(d, c);
Axiom a4 = Factory.createConceptInclusion(e, a);
Axiom a5 = Factory.createConceptInclusion(f, e);
Set<Axiom> axioms = new HashSet<Axiom>();
axioms.add(a1);
axioms.add(a2);
axioms.add(a3);
axioms.add(a4);
axioms.add(a5);
SnorocketReasoner sr = new SnorocketReasoner();
sr.loadAxioms(axioms);
sr.classify();
Ontology ont = sr.getClassifiedOntology();
Utils.printTaxonomy(ont.getTopNode(), ont.getBottomNode());
Axiom a6 = Factory.createConceptInclusion(g, e);
Axiom a7 = Factory.createConceptInclusion(f, g);
axioms.clear();
axioms.add(a6);
axioms.add(a7);
sr.loadAxioms(axioms);
sr.classify();
ont = sr.getClassifiedOntology();
Utils.printTaxonomy(ont.getTopNode(), ont.getBottomNode());
Set<Node> affectedNodes = ont.getAffectedNodes();
Set<String> affectedIds = new HashSet<String>();
for(Node affectedNode : affectedNodes) {
affectedIds.addAll(affectedNode.getEquivalentConcepts());
}
System.out.println("Affected node ids: "+affectedIds);
Assert.assertTrue("Node G was not found in affected nodes", affectedIds.contains("G"));
Assert.assertTrue("Node F was not found in affected nodes", affectedIds.contains("F"));
}
@Test
public void testBottom() {
IFactory factory = new CoreFactory();
// Add concepts
NamedConcept a = new NamedConcept("A");
NamedConcept b = new NamedConcept("B");
// Add axioms
ConceptInclusion a1 = new ConceptInclusion(a, NamedConcept.BOTTOM_CONCEPT);
ConceptInclusion a2 = new ConceptInclusion(b, NamedConcept.TOP_CONCEPT);
Set<Axiom> axioms = new HashSet<Axiom>();
axioms.add(a1);
axioms.add(a2);
// Classify
NormalisedOntology o = new NormalisedOntology(factory, axioms);
o.classify();
// Build taxonomy
o.buildTaxonomy();
// Test results
Node bNode = o.getEquivalents(b.getId());
Set<Node> bParents = bNode.getParents();
assertTrue(bParents.size() == 1);
assertTrue(bParents.contains(o.getTopNode()));
Node bottomNode = o.getBottomNode();
assertTrue(bottomNode.getEquivalentConcepts().size() == 2);
bottomNode.getEquivalentConcepts().contains(a.getId());
Set<Node> bottomParents = bottomNode.getParents();
assertTrue(bottomParents.size() == 1);
assertTrue(bottomParents.contains(o.getEquivalents(b.getId())));
}
@Test
public void testBottom2() {
IFactory factory = new CoreFactory();
// Add concepts
NamedConcept a = new NamedConcept("A");
NamedConcept b = new NamedConcept("B");
// Add axioms
ConceptInclusion a1 = new ConceptInclusion(a, b);
ConceptInclusion a2 = new ConceptInclusion(a, NamedConcept.BOTTOM_CONCEPT);
Set<Axiom> axioms = new HashSet<Axiom>();
axioms.add(a1);
axioms.add(a2);
// Classify
NormalisedOntology o = new NormalisedOntology(factory, axioms);
o.classify();
// Build taxonomy
o.buildTaxonomy();
// Test results
Node bNode = o.getEquivalents(b.getId());
Set<Node> bParents = bNode.getParents();
assertTrue(bParents.size() == 1);
assertTrue(bParents.contains(o.getTopNode()));
Node bottomNode = o.getBottomNode();
assertTrue(bottomNode.getEquivalentConcepts().size() == 2);
bottomNode.getEquivalentConcepts().contains(a.getId());
Set<Node> bottomParents = bottomNode.getParents();
assertTrue(bottomParents.size() == 1);
assertTrue(bottomParents.contains(o.getEquivalents(b.getId())));
}
//@Test
public void testBottomIncremental() {
IFactory factory = new CoreFactory();
// Add concepts
NamedConcept a = new NamedConcept("A");
NamedConcept b = new NamedConcept("B");
// Add axioms
ConceptInclusion a1 = new ConceptInclusion(a, b);
ConceptInclusion a2 = new ConceptInclusion(a, NamedConcept.BOTTOM_CONCEPT);
Set<Axiom> axioms = new HashSet<Axiom>();
axioms.add(a1);
// Classify
NormalisedOntology o = new NormalisedOntology(factory, axioms);
o.classify();
// Build taxonomy
o.buildTaxonomy();
axioms.clear();
axioms.add(a2);
o.loadIncremental(axioms);
o.classifyIncremental();
o.buildTaxonomy();
// Test results
Node bNode = o.getEquivalents(b.getId());
Set<Node> bParents = bNode.getParents();
assertTrue(bParents.size() == 1);
assertTrue(bParents.contains(o.getTopNode()));
Node bottomNode = o.getBottomNode();
assertTrue(bottomNode.getEquivalentConcepts().size() == 2);
bottomNode.getEquivalentConcepts().contains(a.getId());
Set<Node> bottomParents = bottomNode.getParents();
assertTrue(bottomParents.size() == 1);
assertTrue(bottomParents.contains(o.getEquivalents(b.getId())));
}
//@Test
public void testBottomIncremental2() {
IFactory factory = new CoreFactory();
// Add concepts
NamedConcept a = new NamedConcept("A");
NamedConcept b = new NamedConcept("B");
NamedConcept c = new NamedConcept("C");
// Add axioms
ConceptInclusion a1 = new ConceptInclusion(a, b);
ConceptInclusion a2 = new ConceptInclusion(c, b);
ConceptInclusion a3 = new ConceptInclusion(c, NamedConcept.BOTTOM_CONCEPT);
Set<Axiom> axioms = new HashSet<Axiom>();
axioms.add(a1);
// Classify
NormalisedOntology o = new NormalisedOntology(factory, axioms);
o.classify();
// Build taxonomy
o.buildTaxonomy();
axioms.clear();
axioms.add(a2);
axioms.add(a3);
o.loadIncremental(axioms);
o.classifyIncremental();
o.buildTaxonomy();
// Test results
Node bNode = o.getEquivalents(b.getId());
Set<Node> bParents = bNode.getParents();
assertTrue(bParents.size() == 1);
assertTrue(bParents.contains(o.getTopNode()));
Set<Node> bChildren = bNode.getChildren();
assertTrue(bChildren.size() == 1);
assertTrue(bChildren.contains(o.getEquivalents(a.getId())));
Node bottomNode = o.getBottomNode();
Node aNode = o.getEquivalents(a.getId());
Set<Node> aParents = aNode.getParents();
assertTrue(aParents.size() == 1);
assertTrue(aParents.contains(bNode));
Set<Node> aChildren = aNode.getChildren();
assertTrue(aChildren.size() == 1);
assertTrue(aChildren.contains(o.getBottomNode()));
assertTrue(bottomNode.getEquivalentConcepts().size() == 2);
assertTrue(bottomNode.getEquivalentConcepts().contains(c.getId()));
Set<Node> bottomParents = bottomNode.getParents();
assertTrue(bottomParents.size() == 1);
assertTrue(bottomParents.contains(aNode));
}
}