def test_undirected_graph_is_connected(self): """ Get whether a path exists for every pair of vertices in an undirected graph """ g_connected = UndirectedGraph.from_dict({'v0': [('v1',), ('v2',)], 'v1': [], 'v2': []}) g_disconnected = UndirectedGraph.from_dict({'v0': [('v1',)], 'v1': [], 'v2': []}) self.assertTrue(g_connected.is_connected) self.assertFalse(g_disconnected.is_connected) with self.assertRaises(AttributeError): g_connected.is_connected = False with self.assertRaises(AttributeError): g_disconnected.is_connected = True
def test_bad_undirected_graph_input(self): """ An undirected graph from_dict input must be of a certain form """ graph_dict = {'v0': ['v1', {'weight': 3}], 'v1': [], 'v2': []} with self.assertRaises(ValueError): _ = UndirectedGraph.from_dict(graph_dict)
def test_undirected_graph_num_vertices_and_num_edges(self): """ Get the number of an undirected graph's vertices and edges """ g = UndirectedGraph.from_dict({'v0': [('v1',)], 'v1': []}) self.assertEqual(g.num_vertices, 2) self.assertEqual(g.num_edges, 1) with self.assertRaises(AttributeError): g.num_vertices = 0 with self.assertRaises(AttributeError): g.num_edges = 0
def test_undirected_graph_average_degree(self): """ Get the average degree of all vertices in an undirected graph """ g = UndirectedGraph.from_dict({'v0': [('v1',)], 'v1': [], 'v2': []}) empty_g = UndirectedGraph() self.assertEqual(g.average_degree, 2.0 / 3.0) with self.assertRaises(AttributeError): g.average_degree = 0 self.assertEqual(empty_g.average_degree, 0)
def test_create_undirected_graph_from_dict(self): """ Create an undirected graph from an adjacency dictionary """ graph_dict = {'v0': [(1,), (1,), ((2, 2), {'weight': 5})], 1: [('v0',), ('v3',)], (2, 2): [], 'v3': [], 'v4': []} vertex_attrs = {'v0': {'city': 'Paris'}, 1: {'continent': 'Europe', 'city': 'London'}, 'v5': {'city': 'Jamestown'}} g = UndirectedGraph.from_dict(graph_dict, vertex_attrs=vertex_attrs) 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') v5 = g.get_vertex('v5') e01 = g.get_edge(('v0', 1)) e02 = g.get_edge(('v0', (2, 2))) e13 = g.get_edge((1, 'v3')) self.assertEqual(g.num_vertices, 6) 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(set(v5.neighbors), set()) self.assertEqual(v0.get('city'), 'Paris') self.assertEqual(v1.get('continent'), 'Europe') self.assertEqual(v1.get('city'), 'London') self.assertEqual(v5.get('city'), 'Jamestown') self.assertIsNone(v2.get('city')) self.assertIsNone(e01.get('weight')) self.assertEqual(e02.get('weight'), 5) self.assertIsNone(e13.get('weight')) with self.assertRaises(ValueError): _ = UndirectedGraph.from_dict({'v0': [({'weight': 5},)], 'v1': [({'weight': 3},)]})