package ch.usi.inf.sp.graph; import ch.usi.inf.sp.graph.DiGraph; import ch.usi.inf.sp.graph.Edge; import ch.usi.inf.sp.graph.Node; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class DiGraphTest { @Test void newDiGraph() { DiGraph g = new DiGraph(); assertEquals(0, g.getNodes().size()); assertEquals(0, g.getEdges().size()); } @Test void toStringEmpty() { DiGraph g = new DiGraph(); assertEquals("digraph G {\n}\n", g.toString()); } @Test void toStringOneEdge() { DiGraph g = new DiGraph(); Node n1 = new Node(); Node n2 = new Node(); Edge e = new Edge(); g.addNode(n1); g.addNode(n2); g.addEdge(e); g.connect(n1, e, n2); assertEquals("digraph G {\n"+ " "+n1.toString()+"\n"+ " "+n2.toString()+"\n"+ " "+e.toString()+"\n"+ "}\n", g.toString()); } @Test void addNode() { DiGraph g = new DiGraph(); Node n = new Node(); g.addNode(n); assertEquals(1, g.getNodes().size()); assertSame(n, g.getNodes().get(0)); assertEquals(0, g.getEdges().size()); } @Test void addEdge() { DiGraph g = new DiGraph(); Edge e = new Edge(); g.addEdge(e); assertEquals(0, g.getNodes().size()); assertEquals(1, g.getEdges().size()); assertSame(e, g.getEdges().get(0)); } @Test void connect() { DiGraph g = new DiGraph(); Edge e = new Edge(); Node n1 = new Node(); Node n2 = new Node(); g.addNode(n1); g.addNode(n2); g.addEdge(e); g.connect(n1, e, n2); assertEquals(2, g.getNodes().size()); assertTrue(g.getNodes().contains(n1)); assertTrue(g.getNodes().contains(n2)); assertEquals(1, g.getEdges().size()); assertSame(e, g.getEdges().get(0)); assertSame(e, n1.getOutEdges().get(0)); assertSame(e, n2.getInEdges().get(0)); assertSame(n1, e.getFrom()); assertSame(n2, e.getTo()); } @Test void connectEdgeNotContained() { DiGraph g = new DiGraph(); Edge e = new Edge(); Node n1 = new Node(); Node n2 = new Node(); g.addNode(n1); g.addNode(n2); assertThrows(IllegalStateException.class, () -> g.connect(n1, e, n2)); } @Test void connectFromNodeNotContained() { DiGraph g = new DiGraph(); Edge e = new Edge(); Node n1 = new Node(); Node n2 = new Node(); g.addNode(n2); g.addEdge(e); assertThrows(IllegalStateException.class, () -> g.connect(n1, e, n2)); } @Test void connectToNodeNotContained() { DiGraph g = new DiGraph(); Edge e = new Edge(); Node n1 = new Node(); Node n2 = new Node(); g.addNode(n1); g.addEdge(e); assertThrows(IllegalStateException.class, () -> g.connect(n1, e, n2)); } @Test void connectSelfLoop() { DiGraph g = new DiGraph(); Edge e = new Edge(); Node n = new Node(); g.addNode(n); g.addEdge(e); g.connect(n, e, n); assertEquals(1, g.getNodes().size()); assertTrue(g.getNodes().contains(n)); assertEquals(1, g.getEdges().size()); assertSame(e, g.getEdges().get(0)); assertSame(e, n.getOutEdges().get(0)); assertSame(e, n.getInEdges().get(0)); assertSame(n, e.getFrom()); assertSame(n, e.getTo()); } @Test void connectSameEdgeTwice() { DiGraph g = new DiGraph(); Edge e = new Edge(); Node n1 = new Node(); Node n2 = new Node(); g.addNode(n1); g.addNode(n2); g.addEdge(e); g.connect(n1, e, n2); assertThrows(IllegalStateException.class, () -> g.connect(n1, e, n2)); } }