def test_undirected_graph_search(self): """ Search for paths from an undirected vertex to all vertices reachable from it """ """ __ | / v0 - v1 - v3 \ v2 """ g = UndirectedGraph() g.add_vertex(v_val='v0') g.add_vertex(v_val='v1') g.add_vertex(v_val='v2') g.add_vertex(v_val='v3') g.add_vertex(v_val='v4') g.add_edge(('v0', 'v0')) g.add_edge(('v0', 'v1')) g.add_edge(('v0', 'v2')) g.add_edge(('v1', 'v3')) self.assertEqual(g.search('v0', goal_val='v0'), ['v0']) self.assertEqual(g.search('v0', goal_val='v1'), ['v0', 'v1']) self.assertEqual(g.search('v0', goal_val='v2'), ['v0', 'v2']) self.assertEqual(g.search('v0', goal_val='v3'), ['v0', 'v1', 'v3']) self.assertIsNone(g.search('v0', goal_val='v4')) self.assertEqual(g.search('v0'), {'v0': ['v0'], 'v1': ['v0', 'v1'], 'v2': ['v0', 'v2'], 'v3': ['v0', 'v1', 'v3']}) self.assertEqual(g.search('v0', goal_val='v0', method='depth_first'), ['v0']) self.assertEqual(g.search('v0', goal_val='v1', method='depth_first'), ['v0', 'v1']) self.assertEqual(g.search('v0', goal_val='v2', method='depth_first'), ['v0', 'v2']) self.assertEqual(g.search('v0', goal_val='v3', method='depth_first'), ['v0', 'v1', 'v3']) self.assertIsNone(g.search('v0', goal_val='v4', method='depth_first')) self.assertEqual(g.search('v0', method='depth_first'), {'v0': ['v0'], 'v1': ['v0', 'v1'], 'v2': ['v0', 'v2'], 'v3': ['v0', 'v1', 'v3']})