def test_adjacent_vertices_returns_proper_set(self): graph = WeightedGraph() graph.AddEdge(1, 2, 10) graph.AddEdge(1, 3, 11) graph.AddEdge(1, 4, 12) expected_result = [2, 3, 4] adjacent_vertices = list(graph.AdjacentVertices(1)) self.assertEqual(adjacent_vertices, expected_result)
class TestSpanningTree(unittest.TestCase): def setUp(self): self.graph = WeightedGraph() self.graph.AddEdge(0, 1, 11) self.graph.AddEdge(0, 2, 13) self.graph.AddEdge(0, 3, 12) self.graph.AddEdge(0, 0, 11) self.graph.AddEdge(1, 3, 14) self.graph.AddEdge(2, 0, 13) self.graph.AddEdge(2, 3, 10) self.graph.AddEdge(3, 0, 12) self.graph.AddEdge(3, 1, 14) self.graph.AddEdge(3, 2, 10) def test_generated_proper_minimum_spaning_tree(self): expected_result = { 0: { 1: 11, 3: 12 }, 1: { 0: 11 }, 2: { 3: 10 }, 3: { 0: 12, 2: 10 } } minimum_spaning_tree = GetMinimumSpanningTree(self.graph) self.assertEqual(minimum_spaning_tree, expected_result) def test_type_of_result_graph_is_weighted_graph(self): minimum_spaning_tree = GetMinimumSpanningTree(self.graph) self.assertIsInstance(minimum_spaning_tree, WeightedGraph) def test_generated_mst_has_proper_total_length(self): expected_result = 34 minimum_spaning_tree = GetMinimumSpanningTree(self.graph) self.assertEqual(minimum_spaning_tree.totalLengthUpperBound, expected_result)
def GetMinimumSpanningTree(graph): subtrees = UnionFind() spanningTree = WeightedGraph() sorted_weighted_edges_list = sorted([(u, v, graph[u][v]) for u in graph for v in graph[u]], key=lambda item: item[-1]) for u, v, w in sorted_weighted_edges_list: if subtrees[u] != subtrees[v]: spanningTree.AddEdge(u, v, w) subtrees.union(u, v) return spanningTree
def test_edge_length_returns_proper_result(self): graph = WeightedGraph() expected_result = 42 graph.AddEdge(1, 2, 42) self.assertEqual(graph.EdgeLength(1, 2), expected_result)
def test_has_edge_returns_proper_result(self): graph = WeightedGraph() graph.AddEdge(1, 2, 42) self.assertTrue(graph.HasEdge(1, 2))
def test_total_length_upper_bound_returns_proper_result(self): graph = WeightedGraph() graph.AddEdge(1, 2, 10) graph.AddEdge(2, 4, 20) expected_result = 31 self.assertEqual(graph.totalLengthUpperBound, expected_result)