def test_create_undirected_graph_from_lists(self): """ Create an undirected graph from lists of vertices and edges """ vertices = [('v0', {'city': 'Paris'}), (1, {'continent': 'Europe', 'city': 'London'}), ((2, 2),), ('v3',), ('v4',)] edges = [(('v0', 1), {'weight': 3}), (('v0', (2, 2)), {'weight': 4}), ((1, 'v3'),)] g = UndirectedGraph.from_lists(vertices, edges) v0 = g.get_vertex('v0') v1 = g.get_vertex(1) v2 = g.get_vertex((2, 2)) v3 = g.get_vertex('v3') v4 = g.get_vertex('v4') e01 = g.get_edge(('v0', 1)) e02 = g.get_edge(('v0', (2, 2))) e13 = g.get_edge((1, 'v3')) self.assertEqual(g.num_vertices, 5) self.assertEqual(g.num_edges, 3) self.assertEqual(set(v0.neighbors), set([v1, v2])) self.assertEqual(set(v1.neighbors), set([v0, v3])) self.assertEqual(set(v2.neighbors), set([v0])) self.assertEqual(set(v3.neighbors), set([v1])) self.assertEqual(set(v4.neighbors), set()) self.assertEqual(v0.get('city'), 'Paris') self.assertEqual(v1.get('continent'), 'Europe') self.assertEqual(v1.get('city'), 'London') self.assertIsNone(v2.get('city')) self.assertEqual(e01.get('weight'), 3) self.assertEqual(e02.get('weight'), 4) self.assertIsNone(e13.get('weight')) duplicate_vertices = [('v0_dupe',), ('v0_dupe',)] with self.assertRaises(ValueError): _ = UndirectedGraph.from_lists(duplicate_vertices, []) vertices_dupe_edge = [('v0_dupe_edge',), ('v1_dupe_edge',)] duplicate_edges = [(('v0_dupe_edge', 'v1_dupe_edge'),), (('v1_dupe_edge', 'v0_dupe_edge'),)] with self.assertRaises(ValueError): _ = UndirectedGraph.from_lists(vertices_dupe_edge, duplicate_edges)
def test_undirected_graph_clone(self): """ Clone an undirected graph """ vertices = [('v0', {'city': 'Paris'}), ('v1', {'continent': 'Europe', 'city': 'London'}), ('v2',), ('v3',), ('v4',)] edges = [(('v0', 'v0'), {'weight': 1}), (('v0', 'v1'), {'weight': 3}), (('v0', 'v2'), {'weight': 4}), (('v1', 'v3'),)] g = UndirectedGraph.from_lists(vertices, edges) g_prime = g.clone() v0 = g.get_vertex('v0') v0_prime = g_prime.get_vertex('v0') e01 = g.get_edge(('v0', 'v1')) e01_prime = g_prime.get_edge(('v0', 'v1')) self.assertEqual(g_prime.num_vertices, g.num_vertices) self.assertEqual(g_prime.num_edges, g.num_edges) self.assertNotEqual(v0, v0_prime) self.assertNotEqual(e01, e01_prime) self.assertEqual(v0.attrs, v0_prime.attrs) g.add_vertex('v5', {'city': 'Jamestown'}) self.assertTrue(g.has_vertex('v5')) self.assertFalse(g_prime.has_vertex('v5')) g.remove_vertex('v0') self.assertFalse(g.has_vertex('v0')) self.assertTrue(g_prime.has_vertex('v0')) self.assertFalse(g.has_edge(('v0', 'v1'))) self.assertTrue(g_prime.has_edge(('v0', 'v1'))) e01.set('weight', 5) self.assertEqual(e01.get('weight'), 5) self.assertEqual(e01_prime.get('weight'), 3)