Ejemplo n.º 1
0
    def test_in_dict(self):
        # Undirected graph with vertices and unweighted edges
        g = graph.Graph(edges=[[1, 2], [2, 3]])
        expected_in_mapping = {
            1: {2: None},
            2: {1: None, 3: None},
            3: {2: None}
        }
        for key in expected_in_mapping:
            self.assertEqual(g.in_dict(key), expected_in_mapping[key])

        # Undirected graph with vertices and weighted edges
        g = graph.Graph(edges=[[1, 2, 10], [2, 3, 5]])
        expected_in_mapping = {
            1: {2: 10},
            2: {1: 10, 3: 5},
            3: {2: 5}
        }
        for key in expected_in_mapping:
            self.assertEqual(g.in_dict(key), expected_in_mapping[key])

        # Directed graph with vertices and weighted edges
        g = graph.Graph(edges=[[1, 2, 10], [2, 3, 5]], directed=True)
        expected_in_mapping = {
            2: {1: 10},
            3: {2: 5}
        }
        for key in expected_in_mapping:
            self.assertEqual(g.in_dict(key), expected_in_mapping[key])
Ejemplo n.º 2
0
    def test_init(self):
        # Undirected graph with no vertices
        g = graph.Graph()
        self.assertFalse(g.directed)
        self.assertIsInstance(g.out_mapping, defaultdict)
        self.assertIsInstance(g.in_mapping, defaultdict)
        self.assertEqual(g._edges, [])

        # Directed graph with no vertices
        g = graph.Graph(directed=True)
        self.assertTrue(g.directed)
        self.assertIsInstance(g.out_mapping, defaultdict)
        self.assertIsInstance(g.in_mapping, defaultdict)
        self.assertEqual(g._edges, [])

        # Undirected graph with vertices and unweighted edges
        g = graph.Graph(edges=[[1, 2], [2, 3]])
        expected_edges = [(1, 2), (2, 1), (2, 3), (3, 2)]
        expected_out_mapping = {1: {2: None}, 2: {1: None, 3: None}, 3: {2: None}}
        expected_in_mapping = {1: {2: None}, 2: {1: None, 3: None}, 3: {2: None}}

        self.assertFalse(g.directed)
        self.assertEqual(len(g.out_mapping), len(expected_out_mapping))
        for node in expected_out_mapping:
            self.assertEqual(g.out_mapping[node], expected_out_mapping[node])
        self.assertEqual(len(g.in_mapping), len(expected_in_mapping))
        for node in expected_in_mapping:
            self.assertEqual(g.in_mapping[node], expected_in_mapping[node])
        self.assertEqual(g._edges, expected_edges)

        # Undirected graph with vertices and weighted edges
        g = graph.Graph(edges=[[1, 2, 10], [2, 3, 5]])
        expected_edges = [(1, 2), (2, 1), (2, 3), (3, 2)]
        expected_out_mapping = {1: {2: 10}, 2: {1: 10, 3: 5}, 3: {2: 5}}
        expected_in_mapping = {1: {2: 10}, 2: {1: 10, 3: 5}, 3: {2: 5}}
        self.assertFalse(g.directed)
        self.assertEqual(len(g.out_mapping), len(expected_out_mapping))
        for node in expected_out_mapping:
            self.assertEqual(g.out_mapping[node], expected_out_mapping[node])
        self.assertEqual(len(g.in_mapping), len(expected_in_mapping))
        for node in expected_in_mapping:
            self.assertEqual(g.in_mapping[node], expected_in_mapping[node])
        self.assertEqual(g._edges, expected_edges)

        # Directed graph with vertices and weighted edges
        g = graph.Graph(edges=[[1, 2, 10], [2, 3, 5]], directed=True)
        expected_edges = [(1, 2), (2, 3)]
        expected_out_mapping = {1: {2: 10}, 2: {3: 5}}
        expected_in_mapping = {2: {1: 10}, 3: {2: 5}}
        self.assertTrue(g.directed)
        self.assertEqual(len(g.out_mapping), len(expected_out_mapping))
        for node in expected_out_mapping:
            self.assertEqual(g.out_mapping[node], expected_out_mapping[node])
        self.assertEqual(len(g.in_mapping), len(expected_in_mapping))
        for node in expected_in_mapping:
            self.assertEqual(g.in_mapping[node], expected_in_mapping[node])
        self.assertEqual(g._edges, expected_edges)
Ejemplo n.º 3
0
    def test_undirected_graph_with_vertices_and_unweighted_edges(self):
        g = graph.Graph(edges=[[1, 2], [2, 3]])
        self.assertFalse(g.directed)
        self.assertEqual(str(g), "<Graph: [[1, 2], [2, 3]]>")

        self.assertEqual(g._edges, [(1, 2), (2, 1), (2, 3), (3, 2)])
        self.assert_out_mapping(g, {
            1: {
                2: None
            },
            2: {
                1: None,
                3: None
            },
            3: {
                2: None
            }
        })
        self.assert_in_mapping(g, {
            1: {
                2: None
            },
            2: {
                1: None,
                3: None
            },
            3: {
                2: None
            }
        })
Ejemplo n.º 4
0
 def test_directed_graph_with_no_vertices(self):
     g = graph.Graph(directed=True)
     self.assertTrue(g.directed)
     self.assertIsInstance(g.out_mapping, defaultdict)
     self.assertIsInstance(g.in_mapping, defaultdict)
     self.assertEqual(g._edges, [])
     self.assertEqual(str(g), "<Graph: None>")
Ejemplo n.º 5
0
    def test_directed_graph_vertices_and_weighted_edges(self):
        g = graph.Graph(edges=[[1, 2, 10], [2, 3, 5]], directed=True)
        self.assertTrue(g.directed)
        self.assertEqual(str(g), "<Graph: [[1, 2, 10], [2, 3, 5]]>")

        self.assertEqual(g._edges, [(1, 2), (2, 3)])
        self.assert_out_mapping(g, {1: {2: 10}, 2: {3: 5}})
        self.assert_in_mapping(g, {2: {1: 10}, 3: {2: 5}})
Ejemplo n.º 6
0
 def test_add_loops(self):
     edges = [(0, 1), (0, 2), (1, 2)]
     g = graph.Graph(edges)
     g.add_loops()
     self.assertEqual(
         list(sorted(g._edges)),
         list(sorted([(0, 1), (1, 0), (0, 2), (2, 0), (1, 2),
                      (2, 1), (0, 0), (1, 1), (2, 2)]))
     )
Ejemplo n.º 7
0
 def test_add_loops_with_existing_loop_and_using_strings(self):
     """In this case there is already a loop present; also uses
     strings instead of integers as the hashable."""
     edges = [("a", "b"), ("b", "a"), ("c", "c")]
     g = graph.Graph(edges)
     g.add_loops()
     self.assertEqual(
         list(sorted(g._edges)),
         list(sorted([("a", "b"), ("b", "a"), ("c", "c"), ("a", "a"), ("b", "b")])),
     )
Ejemplo n.º 8
0
 def test_add_loops2(self):
     """In this case there is already a loop present; also uses
     strings instead of integers as the hashable."""
     edges = [('a', 'b'), ('b', 'a'), ('c', 'c')]
     g = graph.Graph(edges)
     g.add_loops()
     self.assertEqual(
         list(sorted(g._edges)),
         list(sorted(
             [('a', 'b'), ('b', 'a'), ('c', 'c'), ('a', 'a'), ('b', 'b')]))
     )
Ejemplo n.º 9
0
    def test_repr(self):
        # Undirected graph with no vertices
        g = graph.Graph()
        self.assertEqual(str(g), '<Graph: None>')

        # Directed graph with no vertices
        g = graph.Graph(directed=True)
        self.assertEqual(str(g), '<Graph: None>')

        # Undirected graph with vertices and unweighted edges
        g = graph.Graph(edges=[[1, 2], [2, 3]])
        self.assertEqual(str(g), '<Graph: [[1, 2], [2, 3]]>')

        # Undirected graph with vertices and weighted edges
        g = graph.Graph(edges=[[1, 2, 10], [2, 3, 5]])
        self.assertEqual(str(g), '<Graph: [[1, 2, 10], [2, 3, 5]]>')

        # Directed graph with vertices and weighted edges
        g = graph.Graph(edges=[[1, 2, 10], [2, 3, 5]], directed=True)
        self.assertEqual(str(g), '<Graph: [[1, 2, 10], [2, 3, 5]]>')
Ejemplo n.º 10
0
 def test_add_loops(self):
     edges = [(0, 1), (0, 2), (1, 2)]
     g = graph.Graph(edges)
     g.add_loops()
     self.assertEqual(g._edges, [(0, 1), (1, 0), (0, 2), (2, 0), (1, 2),
                                 (2, 1), (0, 0), (1, 1), (2, 2)])