package nl.tudelft.lifetiles.graph.model.jgrapht; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; import nl.tudelft.lifetiles.graph.model.Edge; import nl.tudelft.lifetiles.graph.model.FactoryProducer; import nl.tudelft.lifetiles.graph.model.Graph; import nl.tudelft.lifetiles.graph.model.GraphFactory; import nl.tudelft.lifetiles.sequence.model.SegmentEmpty; import nl.tudelft.lifetiles.sequence.model.Sequence; import nl.tudelft.lifetiles.sequence.model.SequenceSegment; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; /** * @author Rutger van den Berg * */ public class GraphAdapterTest { GraphFactory<SequenceSegment> gf; SequenceSegment v1, v2, v3, v4; Graph<SequenceSegment> gr; Graph<SequenceSegment> subgr; @Rule public ExpectedException thrown = ExpectedException.none(); @Before public void setUp() throws Exception { gf = FactoryProducer.getFactory("JGraphT"); v1 = new SequenceSegment(new HashSet<Sequence>(), 0, 2, new SegmentEmpty(2)); v2 = new SequenceSegment(new HashSet<Sequence>(), 0, 0, new SegmentEmpty(3)); v3 = new SequenceSegment(new HashSet<Sequence>(), 3, 5, new SegmentEmpty(2)); v4 = new SequenceSegment(new HashSet<Sequence>(), 1, 3, new SegmentEmpty(2)); gr = gf.getGraph(); } @Test public void testAddVertex() { assertEquals(0, gr.getAllVertices().size()); gr.addVertex(v1); assertEquals(1, gr.getAllVertices().size()); gr.addVertex(v2); assertEquals(2, gr.getAllVertices().size()); } @Test public void testAddEdge() { gr.addVertex(v1); gr.addVertex(v2); assertEquals(0, gr.getAllEdges().size()); gr.addEdge(v1, v2); assertEquals(1, gr.getAllEdges().size()); } @Test public void testAddWrongEdge() { thrown.expect(IllegalArgumentException.class); gr.addVertex(v1); assertEquals(0, gr.getAllEdges().size()); assertFalse(gr.addEdge(v1, v2)); assertEquals(0, gr.getAllEdges().size()); } @Test public void testGetSource() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<SequenceSegment> s = gr.getSources(); assertTrue(s.contains(v1)); assertEquals(1, s.size()); } @Test public void testGetSink() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<SequenceSegment> s = gr.getSinks(); assertTrue(s.contains(v2)); assertEquals(1, s.size()); } @Test public void testGetIncoming() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<Edge<SequenceSegment>> inc = gr.getIncoming(v2); assertEquals(1, inc.size()); assertEquals(v1, gr.getSource(inc.iterator().next())); } @Test public void testGetOutgoing() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<Edge<SequenceSegment>> inc = gr.getOutgoing(v1); assertEquals(1, inc.size()); assertEquals(v2, gr.getDestination(inc.iterator().next())); } @Test public void testGetWrongIncoming() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<Edge<SequenceSegment>> inc = gr.getIncoming(v1); assertEquals(0, inc.size()); } @Test public void testGetEdgeSource() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<Edge<SequenceSegment>> inc = gr.getIncoming(v2); assertEquals(v1, gr.getSource(inc.iterator().next())); } @Test public void testGetEdgeDestination() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<Edge<SequenceSegment>> inc = gr.getIncoming(v2); assertEquals(v2, gr.getDestination(inc.iterator().next())); } @Test public void testDivideEdge() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Set<Edge<SequenceSegment>> inc = gr.getIncoming(v2); SequenceSegment v3 = new SequenceSegment(new HashSet<Sequence>(), 0, 3, new SegmentEmpty(0)); gr.splitEdge(inc.iterator().next(), v3); assertEquals(v3, gr.getSource(gr.getIncoming(v2).iterator().next())); assertEquals(v3, gr .getDestination(gr.getOutgoing(v1).iterator().next())); } @Test public void testCopy() { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); Graph<SequenceSegment> copy = gf.copy(gr); assertEquals(2, copy.getAllVertices().size()); assertEquals(1, copy.getAllEdges().size()); } @Test public void testSubGraphCreation() throws NotAJGraphTAdapterException { subgr = gf.getSubGraph(gr, null); assertEquals(subgr.getAllVertices().size(), gr.getAllVertices().size()); assertEquals(subgr.getAllEdges().size(), gr.getAllEdges().size()); } @Test public void testSubGraphVertices() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); subgr = gf.getSubGraph(gr, null); assertEquals(subgr.getAllVertices().size(), gr.getAllVertices().size()); } @Test public void testSubGraphEdges() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); gr.addEdge(v1, v2); subgr = gf.getSubGraph(gr, null); assertEquals(subgr.getAllEdges().size(), gr.getAllEdges().size()); } @Test public void testSubGraphSubsetVertices() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); gr.addVertex(v3); Set<SequenceSegment> cpy = new TreeSet<SequenceSegment>(); cpy.addAll(gr.getAllVertices()); cpy.remove(v3); cpy.remove(v2); subgr = gf.getSubGraph(gr, cpy); assertEquals(subgr.getAllVertices().size(), gr.getAllVertices().size() - 2); } @Test public void testSubGraphSubsetVerticesEdges() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); gr.addVertex(v3); gr.addEdge(v1, v3); gr.addEdge(v2, v3); Set<SequenceSegment> cpy = new TreeSet<SequenceSegment>(); cpy.addAll(gr.getAllVertices()); cpy.remove(v3); subgr = gf.getSubGraph(gr, cpy); assertEquals(subgr.getAllEdges().size(), gr.getAllEdges().size() - 2); } @Test public void testAddVerticeSubGraph() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); gr.addVertex(v3); Set<SequenceSegment> cpy = new TreeSet<SequenceSegment>(); cpy.addAll(gr.getAllVertices()); cpy.remove(v3); subgr = gf.getSubGraph(gr, cpy); subgr.addVertex(v3); } @Test public void testAddEdgeSubGraph() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); gr.addVertex(v3); gr.addEdge(v1, v3); gr.addEdge(v2, v3); Set<SequenceSegment> cpy = new TreeSet<SequenceSegment>(); cpy.addAll(gr.getAllVertices()); cpy.remove(v3); subgr = gf.getSubGraph(gr, cpy); subgr.addVertex(v3); subgr.addEdge(v2, v3); } @Test public void testDeepCopyVertices() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); gr.addVertex(v3); Set<SequenceSegment> cpy = new TreeSet<SequenceSegment>(); cpy.addAll(gr.getAllVertices()); subgr = gf.getSubGraph(gr, cpy); subgr = gf.deepcopy(subgr); assertTrue(gr.getAllVertices().containsAll(subgr.getAllVertices())); } @Test public void testDeepCopyEdges() throws NotAJGraphTAdapterException { gr.addVertex(v1); gr.addVertex(v2); gr.addVertex(v3); gr.addEdge(v1, v3); gr.addEdge(v2, v3); Set<SequenceSegment> cpy = new TreeSet<SequenceSegment>(); cpy.addAll(gr.getAllVertices()); subgr = gf.getSubGraph(gr, cpy); subgr = gf.deepcopy(subgr); assertTrue(gr.getAllEdges().containsAll(subgr.getAllEdges())); } }