def testDijkstrasAlgorithm(self): graph = DictGraph() graph.addEdge(0, 1, 1) graph.addEdge(1, 2, 1) graph.addEdge(1, 3, 1) graph.addEdge(2, 4, 1) graph.setVertex(4, 1) self.assertTrue((graph.dijkstrasAlgorithm(0) == numpy.array([0, 1, 2, 2, 3])).all()) self.assertTrue((graph.dijkstrasAlgorithm(1) == numpy.array([1, 0, 1, 1, 2])).all()) self.assertTrue((graph.dijkstrasAlgorithm(2) == numpy.array([2, 1, 0, 2, 1])).all()) self.assertTrue((graph.dijkstrasAlgorithm(3) == numpy.array([2, 1, 2, 0, 3])).all()) self.assertTrue((graph.dijkstrasAlgorithm(4) == numpy.array([3, 2, 1, 3, 0])).all()) #Test a graph which has an isolated node graph = DictGraph() graph.setVertex(5, 1) graph.addEdge(0, 1, 1) graph.addEdge(1, 2, 1) graph.addEdge(1, 3, 1) self.assertTrue((graph.dijkstrasAlgorithm(0) == numpy.array([0, 1, 2, 2, numpy.inf])).all()) #Test a graph in a ring graph = DictGraph() graph.addEdge(0, 1, 1) graph.addEdge(1, 2, 1) graph.addEdge(2, 3, 1) graph.addEdge(3, 4, 1) graph.addEdge(4, 0, 1) self.assertTrue((graph.dijkstrasAlgorithm(0) == numpy.array([0, 1, 2, 2, 1])).all()) #Try case in which vertex ids are not numbers graph = DictGraph() graph.addEdge("a", "b", 1) graph.addEdge("b", "c", 1) graph.addEdge("b", "d", 1) graph.addEdge("c", "e", 1) inds = Util.argsort(graph.getAllVertexIds()) self.assertTrue((graph.dijkstrasAlgorithm("a")[inds] == numpy.array([0, 1, 2, 2, 3])).all()) self.assertTrue((graph.dijkstrasAlgorithm("b")[inds] == numpy.array([1, 0, 1, 1, 2])).all()) self.assertTrue((graph.dijkstrasAlgorithm("c")[inds] == numpy.array([2, 1, 0, 2, 1])).all()) self.assertTrue((graph.dijkstrasAlgorithm("d")[inds] == numpy.array([2, 1, 2, 0, 3])).all()) self.assertTrue((graph.dijkstrasAlgorithm("e")[inds] == numpy.array([3, 2, 1, 3, 0])).all())