def setUp(self): self.g = Graph(5) self.g.add_edge(0, 1, 4) self.g.add_edge(0, 2, 1) self.g.add_edge(2, 1, 2) self.g.add_edge(1, 3, 1) self.g.add_edge(2, 3, 5) self.g.add_edge(3, 4, 3)
def test_isomorphic_trees_00(self): g = Graph(9) g.add_undirected_edge(0, 1, 0) g.add_undirected_edge(2, 1, 0) g.add_undirected_edge(2, 3, 0) g.add_undirected_edge(3, 4, 0) g.add_undirected_edge(5, 3, 0) g.add_undirected_edge(2, 6, 0) g.add_undirected_edge(6, 7, 0) g.add_undirected_edge(6, 8, 0) centers = IsomorphicTrees.get_tree_centers(g) self.assertCountEqual(centers, [2])
def test_isomorphic_trees_03(self): g = Graph(9) g.add_undirected_edge(0, 1, 0) g.add_undirected_edge(2, 1, 0) g.add_undirected_edge(2, 3, 0) g.add_undirected_edge(3, 4, 0) g.add_undirected_edge(5, 3, 0) g.add_undirected_edge(2, 6, 0) g.add_undirected_edge(6, 7, 0) g.add_undirected_edge(6, 8, 0) root_tree = IsomorphicTrees.root_tree(g, 6) keys = [c.key for c in root_tree.get_children()] self.assertEqual(root_tree.key, 6) self.assertIsNone(root_tree.parent) self.assertCountEqual(keys, [2, 7, 8])
def setUp(self): self.g = Graph(13) self.g.add_undirected_edge(0, 7, 1) self.g.add_undirected_edge(0, 9, 1) self.g.add_undirected_edge(0, 11, 1) self.g.add_undirected_edge(7, 11, 1) self.g.add_undirected_edge(7, 6, 1) self.g.add_undirected_edge(7, 3, 1) self.g.add_undirected_edge(6, 5, 1) self.g.add_undirected_edge(3, 4, 1) self.g.add_undirected_edge(2, 3, 1) self.g.add_undirected_edge(2, 12, 1) self.g.add_undirected_edge(12, 8, 1) self.g.add_undirected_edge(8, 1, 1) self.g.add_undirected_edge(1, 10, 1) self.g.add_undirected_edge(10, 9, 1) self.g.add_undirected_edge(9, 8, 1)
def test_isomorphic_trees_02(self): g = Graph(7) g.add_undirected_edge(0, 1, 0) g.add_undirected_edge(1, 2, 0) g.add_undirected_edge(2, 3, 0) g.add_undirected_edge(3, 4, 0) g.add_undirected_edge(4, 5, 0) g.add_undirected_edge(4, 6, 0) centers = IsomorphicTrees.get_tree_centers(g) self.assertCountEqual(centers, [2, 3])
def setUp(self): self.g = Graph() self.g.add_connected_vertice(0, 0) self.g.add_connected_vertice(3, 4) self.g.add_connected_vertice(0, 4) self.g.add_connected_vertice(3, 0) self.g.add_connected_vertice(10, 40) self.mst = [[ Vertice(0, 0), Vertice(0, 4), Vertice(3, 0), Vertice(3, 4), Vertice(10, 40), ]] self.three_groups = [ [Vertice(0, 0), Vertice(3, 0)], [Vertice(3, 4), Vertice(0, 4)], [Vertice(10, 40)], ]
def main(): whichType = int( input( "Do you want to find optimal travel path? (1) or all travel paths? (2)\n" )) print( " Destination options include: Buffalo, Erie, Harrisburgh, Meadville, NewYorkCity, Pittsburgh, Philadelphia, StateCollege, and WashingtonDC " ) if (whichType == 1): source = str(input("Enter source (Starting Destination): ")) destination = str(input("Enter destination (Ending Destination): ")) map_of_cities = Graph() map_of_cities.makeGraphFromData('data') path_shortest = Dijkstra(map_of_cities, source.lower(), destination.lower()) print("Here are the travel instructions for the optimal path \n\n") display_all_paths(path_shortest, destination.lower()) plot(map_of_cities, path_shortest, destination.lower()) elif (whichType == 2): budget = float(input("Enter a budget in $: ")) time_taken = float(input("Enter the time taken in hours: ")) source = str(input("Enter source : ")) destination = str(input("Enter destination: ")) map_of_cities = Graph() map_of_cities.makeGraphFromData('data') paths = find_all_paths(map_of_cities, source.lower(), destination.lower(), time_taken, budget) plot(map_of_cities, paths, destination.lower()) print("Here are the travel instructions") display_all_paths(paths, destination.lower()) else: print("WRONG OPTION!")
class TestMinimumSpanningTree(unittest.TestCase): def setUp(self): self.g = Graph() self.g.add_connected_vertice(0, 0) self.g.add_connected_vertice(3, 4) self.g.add_connected_vertice(0, 4) self.g.add_connected_vertice(3, 0) self.g.add_connected_vertice(10, 40) self.mst = [[ Vertice(0, 0), Vertice(0, 4), Vertice(3, 0), Vertice(3, 4), Vertice(10, 40), ]] self.three_groups = [ [Vertice(0, 0), Vertice(3, 0)], [Vertice(3, 4), Vertice(0, 4)], [Vertice(10, 40)], ] def test_kruskal(self): mst = kruskal(self.g) self.assertGroupsEqual(mst, self.mst) def test_kruskal_groups(self): three_groups = kruskal(self.g, 3) self.assertGroupsEqual(three_groups, self.three_groups) def test_prim(self): mst = prim(self.g) self.assertGroupsEqual(mst, self.mst) def test_prim_groups(self): three_groups = prim(self.g, 3) self.assertGroupsEqual(three_groups, self.three_groups) def assertGroupsEqual(self, first, second, msg=None): try: key = lambda x: len(x) first.sort(key=key) second.sort(key=key) self.assertEqual(len(first), len(second)) for i, group in enumerate(first): self.assertEqual(len(group), len(second[i])) for item in group: self.assertIn(item, second[i]) except AssertionError: msg = "Groups not equal\n\n{}\n{}".format(first, second) raise AssertionError(msg)
class DFSGraphTest(unittest.TestCase): def setUp(self): self.g = Graph(5) self.g.add_edge(0, 1, 4) self.g.add_edge(0, 2, 1) self.g.add_edge(2, 1, 2) self.g.add_edge(1, 3, 1) self.g.add_edge(2, 3, 5) self.g.add_edge(3, 4, 3) def test_dfs_00(self): self.assertEqual(dfs_graph.dfs_recursive(self.g), self.g.size) def test_dfs_01(self): self.assertEqual(dfs_graph.dfs_iterative(self.g), self.g.size)
class TopSortTest(unittest.TestCase): def setUp(self): self.g = Graph(5) self.g.add_edge(0, 1, 4) self.g.add_edge(0, 2, 1) self.g.add_edge(2, 1, 2) self.g.add_edge(1, 3, 1) self.g.add_edge(2, 3, 5) self.g.add_edge(3, 4, 3) def test_dijkstra_00(self): dist, prev = dijkstra.dijkstra(self.g, 0, 4) self.assertEqual(dist, 7) self.assertEqual(prev, [None, 2, 0, 1, 3]) def test_dijkstra_01(self): path = dijkstra.reconstruct_shortest_path(self.g, 0, 4) self.assertEqual(path, [0, 2, 1, 3, 4])
def setUp(self): self.graph = Graph()
# Test case to determine if all of the paths are determined correctly from adt.graph import Graph from algorithm.algorithms import * from plot.plot import * from display.display import * map_of_cities = Graph() map_of_cities.makeGraphFromData('data') path = find_all_paths(map_of_cities,'mead','nyc',8,250) print path display_all_paths(path,'nyc')
class TestGraph(unittest.TestCase): def setUp(self): self.graph = Graph() def test_add_connected_vertice(self): vertices = [] edges = [] self.assertEqual(self.graph.edges, edges) self.assertEqual(self.graph.vertices, vertices) self.graph.add_connected_vertice(0, 0) vertices.append(Vertice(0, 0)) self.assertEqual(self.graph.edges, edges) self.assertEqual(self.graph.vertices, vertices) self.graph.add_connected_vertice(3, 4) vertices.append(Vertice(3, 4)) edges.append(Edge(vertices[0], vertices[1])) self.assertEqual(self.graph.edges, edges) self.graph.add_connected_vertice(0, 4) vertices.append(Vertice(0, 4)) edges.append(Edge(vertices[0], vertices[2])) edges.append(Edge(vertices[1], vertices[2])) self.assertEqual(self.graph.edges, edges) self.assertEqual(self.graph.vertices, vertices) def test_repr(self): self.graph.add_connected_vertice(3, 4) self.assertEqual(str(self.graph), repr(self.graph)) def test_graphviz(self): self.graph.add_connected_vertice(0, 0) self.graph.add_connected_vertice(3, 4) self.graph.add_connected_vertice(0, 4) self.graph.edges[-1].mst = True self.graph.add_connected_vertice(3, 0) graphviz_res = """ graph { "(0, 0)" -- "(3, 4)"[label=5.0,len=2.3219]; "(0, 0)" -- "(0, 4)"[label=4.0,len=2.0000]; "(3, 4)" -- "(0, 4)"[label=3.0,len=1.5850,color=red,penwidth=2.0]; "(0, 0)" -- "(3, 0)"[label=3.0,len=1.5850]; "(3, 4)" -- "(3, 0)"[label=4.0,len=2.0000]; "(0, 4)" -- "(3, 0)"[label=5.0,len=2.3219]; }""".strip() print('-' * 80) print(graphviz_res) print('-' * 80) print(self.graph.to_graphviz()) print('-' * 80) assert_equal(self.graph.to_graphviz(), graphviz_res) def test_vertice_index(self): self.graph.add_connected_vertice(0, 0) vertice = self.graph.vertices[-1] self.assertEqual(self.graph.index(vertice), 0) self.graph.add_connected_vertice(3, 4) vertice = self.graph.vertices[-1] self.assertEqual(self.graph.index(vertice), 1) self.graph.add_connected_vertice(0, 4) vertice = self.graph.vertices[-1] self.assertEqual(self.graph.index(vertice), 2)
def test_isomorphic_trees_01(self): g = Graph(2) g.add_undirected_edge(0, 1, 0) centers = IsomorphicTrees.get_tree_centers(g) self.assertCountEqual(centers, [0, 1])
def test_isomorphic_trees_04(self): g1 = Graph(5) g2 = Graph(5) g1.add_undirected_edge(2, 0, 0) g1.add_undirected_edge(3, 4, 0) g1.add_undirected_edge(2, 1, 0) g1.add_undirected_edge(2, 3, 0) g2.add_undirected_edge(1, 0, 0) g2.add_undirected_edge(2, 4, 0) g2.add_undirected_edge(1, 3, 0) g2.add_undirected_edge(1, 2, 0) self.assertEqual(IsomorphicTrees.isomorphic_equal(g1, g2), True)
def test_isomorphic_trees_05(self): g = Graph(10) g.add_undirected_edge(0, 2, 0) g.add_undirected_edge(0, 1, 0) g.add_undirected_edge(0, 3, 0) g.add_undirected_edge(2, 6, 0) g.add_undirected_edge(2, 7, 0) g.add_undirected_edge(1, 4, 0) g.add_undirected_edge(1, 5, 0) g.add_undirected_edge(5, 9, 0) g.add_undirected_edge(3, 8, 0) root0 = IsomorphicTrees.root_tree(g, 0) self.assertEqual(IsomorphicTrees._encode(root0), "(((())())(()())(()))")
class BFSGraphTest(unittest.TestCase): def setUp(self): self.g = Graph(13) self.g.add_undirected_edge(0, 7, 1) self.g.add_undirected_edge(0, 9, 1) self.g.add_undirected_edge(0, 11, 1) self.g.add_undirected_edge(7, 11, 1) self.g.add_undirected_edge(7, 6, 1) self.g.add_undirected_edge(7, 3, 1) self.g.add_undirected_edge(6, 5, 1) self.g.add_undirected_edge(3, 4, 1) self.g.add_undirected_edge(2, 3, 1) self.g.add_undirected_edge(2, 12, 1) self.g.add_undirected_edge(12, 8, 1) self.g.add_undirected_edge(8, 1, 1) self.g.add_undirected_edge(1, 10, 1) self.g.add_undirected_edge(10, 9, 1) self.g.add_undirected_edge(9, 8, 1) def test_bfs_00(self): path = bfs_graph.bfs_path(self.g, start=10, end=5) self.assertEqual(path, [10, 9, 0, 7, 6, 5])