import graphlib.edges.DirectedEdge; import graphlib.graphs.DirectedGraph; import graphlib.nodes.Node; import graphlib.util.Graphs; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.Collections; public class SimpleTest { private static ShortestPaths sp; @BeforeAll public static void initClass() { sp = new BellmanFordShortestPaths(); } private DirectedGraph graph; @BeforeEach public void init() { graph = new DirectedGraph<>(); for(int i = 0; i < 4; i++) { graph.addNode(new Node<>("n" + i)); } DirectedEdge e01 = new DirectedEdge<>(graph.getNode("n0"), graph.getNode("n1"), 50); DirectedEdge e03 = new DirectedEdge<>(graph.getNode("n0"), graph.getNode("n3"), -34); DirectedEdge e02 = new DirectedEdge<>(graph.getNode("n0"), graph.getNode("n2"), 20); DirectedEdge e13 = new DirectedEdge<>(graph.getNode("n1"), graph.getNode("n3"), 10); DirectedEdge e23 = new DirectedEdge<>(graph.getNode("n2"), graph.getNode("n3"), 15); graph.addEdge(e01); graph.addEdge(e02); graph.addEdge(e03); graph.addEdge(e13); graph.addEdge(e23); } @Test public void testSameNode() { Assertions.assertEquals(Collections.singletonList(graph.getNode("n0")), sp.shortestPath(Graphs.unmodifiableDirectedGraph(graph), graph.getNode("n0"), graph.getNode("n0"))); } @Test public void testPath01() { Assertions.assertEquals(Arrays.asList(graph.getNode("n0"), graph.getNode("n1")), sp.shortestPath(Graphs.unmodifiableDirectedGraph(graph), graph.getNode("n0"), graph.getNode("n1"))); } @Test public void testPath02() { Assertions.assertEquals(Arrays.asList(graph.getNode("n0"), graph.getNode("n2")), sp.shortestPath(Graphs.unmodifiableDirectedGraph(graph), graph.getNode("n0"), graph.getNode("n2"))); } @Test public void testPath03() { Assertions.assertEquals(Arrays.asList(graph.getNode("n0"), graph.getNode("n3")), sp.shortestPath(Graphs.unmodifiableDirectedGraph(graph), graph.getNode("n0"), graph.getNode("n3"))); } @Test public void testPath13() { graph.addEdge(new DirectedEdge<>(graph.getNode("n1"), graph.getNode("n0"), 40)); Assertions.assertEquals(Arrays.asList(graph.getNode("n1"), graph.getNode("n0"), graph.getNode("n3")), sp.shortestPath(Graphs.unmodifiableDirectedGraph(graph), graph.getNode("n1"), graph.getNode("n3"))); } @Test public void testUnreachableNode() { Assertions.assertThrows(ShortestPaths.UnreachableDestinationException.class, () -> sp.shortestPath(Graphs.unmodifiableDirectedGraph(graph), graph.getNode("n1"), graph.getNode("n2"))); } @Test public void testNegativeCycle() { graph.addEdge(new DirectedEdge<>(graph.getNode("n3"), graph.getNode("n0"), -34)); Assertions.assertThrows(ShortestPaths.NegativeCycleException.class, () -> sp.shortestPath(Graphs.unmodifiableDirectedGraph(graph), graph.getNode("n0"), graph.getNode("n1"))); } }