Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
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)
Ejemplo n.º 5
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},)]})