Esempio n. 1
0
    def test_edges_random(self):
        for i in xrange(self.repeats):
            self.graph = DictGraph()
            edges = set()
            for i in xrange(self.repeats):
                edges.add((randint(0, 49), randint(50, 100)))
            self.graph.add_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(edges, gotedges)
            self.graph.del_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)

        for i in xrange(self.repeats):
            edges = set()
            alledges = set()
            for i in xrange(self.repeats):
                edge = (randint(0, 49), randint(50, 100))
                edges.add(edge)
                alledges.add(edge)
                alledges.add((edge[1], edge[0]))
            self.graph.add_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(alledges, gotedges)
            self.graph.del_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)
Esempio n. 2
0
 def test_postorder3(self):
     for i in range(100):
         graph = DictGraph()
         edges1 = [(1, 'j'), ('j', 3), (3, 'z')]
         edges2 = [(1, 8), (8, 'k')]
         graph.add_edges(edges2)
         graph.add_edges(edges1)
         assert graph.postorder() == ['k', 8, 'z', 3, 'j', 1]
Esempio n. 3
0
 def test_postorder3(self):
     for i in range(100):
         graph = DictGraph()
         edges1 = [(1, 'j'), ('j', 3), (3, 'z')]
         edges2 = [(1, 8), (8, 'k')]
         graph.add_edges(edges2)
         graph.add_edges(edges1)
         assert graph.postorder() == ['k', 8, 'z', 3, 'j', 1]
Esempio n. 4
0
    def test_edges_random(self):
        for i in xrange(self.repeats):
            self.graph = DictGraph()
            edges = set()
            for i in xrange(self.repeats):
                edges.add((randint(0, 49), randint(50, 100)))
            self.graph.add_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(edges, gotedges)
            self.graph.del_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)

        for i in xrange(self.repeats):
            edges = set()
            alledges = set()
            for i in xrange(self.repeats):
                edge = (randint(0, 49), randint(50, 100))
                edges.add(edge)
                alledges.add(edge)
                alledges.add((edge[1], edge[0]))
            self.graph.add_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(alledges, gotedges)
            self.graph.del_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)
Esempio n. 5
0
 def test_postorder3(self):
     for i in range(100):
         graph = DictGraph()
         edges = [(1, 2)]
         graph.add_node(3)
         graph.add_edges(edges)
         assert graph.postorder() == [2, 1, 3]
Esempio n. 6
0
 def test_postorder3(self):
     for i in range(100):
         graph = DictGraph()
         edges = [(1, 2)]
         graph.add_node(3)
         graph.add_edges(edges)
         assert graph.postorder() == [2, 1, 3]
Esempio n. 7
0
class test_Graph(unittest.TestCase):

    def setUp(self):
        self.graph = DictGraph()
        self.repeats = 20

    def test_Node(self):
        node = DictNode(1)
        self.assertEqual(node, {1:{}})
        node = DictNode('1')
        self.assertEqual(node, {'1':{}})
        node = DictNode()
        self.assertEqual(node, {})
        node = DictNode(())
        self.assertEqual(node, {():{}})
        self.assertRaises(TypeError, DictNode, {})
        self.assertRaises(TypeError, DictNode, [])

    def test_node(self):
        self.graph.add_node(1)
        self.assertTrue(isinstance(self.graph[1], DictNode))
        self.assertEqual(self.graph[1], {})
        self.graph.del_node(1)
        for i in xrange(self.repeats):
            node = randint(0, 100)
            self.graph.add_node(node)
            self.graph.del_node(node)
            self.assertFalse(self.graph)
            self.assertFalse(self.graph.nodes())
            self.assertFalse(self.graph.edges())
        self.assertEqual(self.graph, {})

    def test_nodes(self):
        for i in xrange(self.repeats):
            nodes = set([])
            for i in xrange(self.repeats):
                nodes.add(randint(1, 10))
            self.graph.add_nodes(nodes)
            self.assertEqual(nodes, set(self.graph.nodes()))
            self.graph.del_nodes(nodes)
            self.assertFalse(self.graph)

    def test_edge(self):
        for i in xrange(self.repeats):
            edge = (randint(0, 49), randint(50, 100))
            double = randint(0, 1)
            self.graph.add_edge(edge, double)
            self.assertTrue(edge in self.graph.edges())
            if double:
                self.assertTrue((edge[1], edge[0]) in self.graph.edges())
            self.graph.del_edge(edge, double)
            assert bool(self.graph[edge[0]]) is False
            assert bool(self.graph[edge[1]]) is False
            self.assertFalse(edge in self.graph.edges())
            self.assertFalse((edge[1], edge[0]) in self.graph.edges())

    def test_edges_random(self):
        for i in xrange(self.repeats):
            self.graph = DictGraph()
            edges = set()
            for i in xrange(self.repeats):
                edges.add((randint(0, 49), randint(50, 100)))
            self.graph.add_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(edges, gotedges)
            self.graph.del_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)

        for i in xrange(self.repeats):
            edges = set()
            alledges = set()
            for i in xrange(self.repeats):
                edge = (randint(0, 49), randint(50, 100))
                edges.add(edge)
                alledges.add(edge)
                alledges.add((edge[1], edge[0]))
            self.graph.add_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(alledges, gotedges)
            self.graph.del_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)

    def test_edges_manual(self):
        self.graph.add_edge(('sum2', 'pwr'))
        self.graph.add_edge(('sum2', 'dbl'))
        self.graph.add_edge(('dbl', 'pwr'))
        self.graph.del_node('pwr')
        self.assertEqual({'sum2': {'dbl': {}}, 'dbl': {}}, self.graph)
        self.graph.del_node('dbl')
        self.assertRaises(KeyError, self.graph.del_node, 'pwr')
        self.assertEqual({'sum2': {}}, self.graph)
        self.graph.del_node('sum2')
        self.assertFalse(self.graph)
        self.graph.add_edge(('sum2', 'pwr'))
        self.graph.del_edge(('sum2', 'pwr'))
        self.assertEqual({'sum2': {}, 'pwr': {}}, self.graph)
        self.assertTrue(self.graph)

    def test_dfs(self):
        edges = [(1, 2), (3, 4), (5, 6), (1, 3), (1, 5), (1, 6), (2, 5)]
        self.graph.add_edges([(1, 2), (3, 4), (5, 6), (1, 3), (1, 5), (1, 6), (2, 5)])
        self.assertEqual(len(self.graph.dfs(1, [])), 6)
        self.graph.clear_nodes()
        self.assertEqual(len(self.graph.dfs(4, [])), 1)
        self.assertEqual(len(self.graph.dfs(1, [])), 5) # 4 is not clear
        self.graph.clear_nodes()
        self.assertEqual(len(self.graph.dfs(2, [])), 3)
        self.graph.clear_nodes()
        self.graph.add_edge((4, 1))
        a = []
        self.assertEqual(len(self.graph.dfs(1, a)), 6)
        self.assertEqual(a, [6, 5, 2, 4, 3, 1])

    def test_postorder1(self):
        edges = [(1, 2), (3, 4), (5, 6), (1, 5), (1, 6), (2, 5), (4, 6)]
        self.graph.add_edges(edges)
        self.graph.postorder()
        self.graph.clear_nodes()
        po1 = self.graph.postorder()
        self.graph.clear_nodes()
        po2 = self.graph.postorder()
        assert po1 == po2
        assert po2
        assert len(po2) == 6

    def test_postorder2(self):
        edges = [(1, 2), (2, 3), (3, 4), (1, 5), (5, 6), (5, 7), (1, 8), (8, 9), (8, 10)]
        # 1 - 2 - 3 - 4  
        #   - 5 - 6
        #       - 7
        # 1 - 8 - 9
        #       - 10
        self.graph.add_edges(edges)
        po = self.graph.postorder()
        assert po[-1] == 1
        assert po.index(10) < po.index(8)
        assert po.index(9) < po.index(8)
        assert po.index(7) < po.index(5)
        assert po.index(6) < po.index(5)
        assert po.index(4) < po.index(3)
        assert po.index(3) < po.index(2)


    def test_postorder3(self):
        for i in range(100):
            graph = DictGraph()
            edges = [(1, 2)]
            graph.add_node(3)
            graph.add_edges(edges)
            assert graph.postorder() == [2, 1, 3]

    def test_postorder3(self):
        for i in range(100):
            graph = DictGraph()
            edges1 = [(1, 'j'), ('j', 3), (3, 'z')]
            edges2 = [(1, 8), (8, 'k')]
            graph.add_edges(edges2)
            graph.add_edges(edges1)
            assert graph.postorder() == ['k', 8, 'z', 3, 'j', 1]

    def test_postorder4(self):
        edges = [(2, 1), (3, 1), (4, 3), (5, 3)]
        #     2
        # 4     - 1 
        #  - 3 
        # 5
        self.graph.add_edges(edges)
        po = self.graph.postorder()
        assert po[0] == 1
        assert po[-1] == 2
        assert po.index(4) > po.index(3)
        assert po.index(5) > po.index(3)

    def test_postorder5(self):
        for i in range(1000):
            edges = [(2, 1), (3, 1), (4, 3), (5, 3), (6, 4), (7, 4), (6, 5)]
            self.graph.add_edges(edges)
            self.graph[2].branch = 'C'
            self.graph[3].branch = 'D'
            self.graph[4].branch = 'A'
            self.graph[5].branch = 'B'
            self.graph[7].branch = 0
            self.graph[6].branch = 1
            assert self.graph.postorder() == [1, 2, 3, 4, 7, 5, 6]

    def test_postorder6(self):
        for i in range(1000):
            edges = [(2, 1), (3, 1), (4, 3), (5, 3), (6, 4), (7, 4), (6, 7), (6, 5)]
            self.graph.add_edges(edges)
            self.graph[2].branch = 'C'
            self.graph[3].branch = 'D'
            self.graph[4].branch = 'A'
            self.graph[5].branch = 'B'
            assert self.graph.postorder() == [1, 2, 3, 4, 7, 5, 6]

    def test_postorder7(self):
        for i in range(1000):
            edges = [(2, 1), (3, 1), (4, 3), (5, 3), (7, 4), (6, 7), (6, 5)]
            self.graph.add_edges(edges)
            self.graph[2].branch = 'C'
            self.graph[3].branch = 'D'
            self.graph[4].branch = 'A'
            self.graph[5].branch = 'B'
            assert self.graph.postorder() == [1, 2, 3, 4, 7, 5, 6]

    def test_node_rank1(self):
        edges = [(1, 2), (3, 4), (5, 6), (1, 5), (1, 6), (2, 5), (4, 6)]
        self.graph.add_edges(edges)
        assert self.graph.node_rank() == {1: 3, 2: 2, 3: 2, 4: 1, 5: 1, 6: 0}

    def test_node_rank2(self):
        edges = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (1, 6)]
        self.graph.add_edges(edges)
        assert self.graph.node_rank() == {1: 5, 2: 4, 3: 3, 4: 2, 5: 1, 6: 0}

    def test_node_width1(self):
        edges = [(1, 2), (1, 3), (1, 4), (2, 5), (3, 5), (3, 6), \
                 (2, 7), (4, 7), (5, 7), (6, 7)]
        self.graph.add_edges(edges)
        self.graph.node_width()

    def test_rank_width1(self):
        edges = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (1, 7), (7, 6)]
        self.graph.add_edges(edges)
        assert self.graph.rank_width() == {0: 1, 1: 2, 2: 1, 3: 1, 4: 1, 5: 1}

    def test_rank_width2(self):
        edges = [(1, 2), (1, 3), (1, 4), (1, 5), (5, 7), \
                 (7, 6), (2, 6), (3, 6), (4, 6)]
        self.graph.add_edges(edges)
        assert self.graph.rank_width() == {0: 1, 1: 4, 2: 1, 3: 1}
Esempio n. 8
0
 def setUp(self):
     self.graph = DictGraph()
     self.repeats = 20
Esempio n. 9
0
class test_Graph(unittest.TestCase):
    def setUp(self):
        self.graph = DictGraph()
        self.repeats = 20

    def test_Node(self):
        node = DictNode(1)
        self.assertEqual(node, {1: {}})
        node = DictNode('1')
        self.assertEqual(node, {'1': {}})
        node = DictNode()
        self.assertEqual(node, {})
        node = DictNode(())
        self.assertEqual(node, {(): {}})
        self.assertRaises(TypeError, DictNode, {})
        self.assertRaises(TypeError, DictNode, [])

    def test_node(self):
        self.graph.add_node(1)
        self.assertTrue(isinstance(self.graph[1], DictNode))
        self.assertEqual(self.graph[1], {})
        self.graph.del_node(1)
        for i in xrange(self.repeats):
            node = randint(0, 100)
            self.graph.add_node(node)
            self.graph.del_node(node)
            self.assertFalse(self.graph)
            self.assertFalse(self.graph.nodes())
            self.assertFalse(self.graph.edges())
        self.assertEqual(self.graph, {})

    def test_nodes(self):
        for i in xrange(self.repeats):
            nodes = set([])
            for i in xrange(self.repeats):
                nodes.add(randint(1, 10))
            self.graph.add_nodes(nodes)
            self.assertEqual(nodes, set(self.graph.nodes()))
            self.graph.del_nodes(nodes)
            self.assertFalse(self.graph)

    def test_edge(self):
        for i in xrange(self.repeats):
            edge = (randint(0, 49), randint(50, 100))
            double = randint(0, 1)
            self.graph.add_edge(edge, double)
            self.assertTrue(edge in self.graph.edges())
            if double:
                self.assertTrue((edge[1], edge[0]) in self.graph.edges())
            self.graph.del_edge(edge, double)
            assert bool(self.graph[edge[0]]) is False
            assert bool(self.graph[edge[1]]) is False
            self.assertFalse(edge in self.graph.edges())
            self.assertFalse((edge[1], edge[0]) in self.graph.edges())

    def test_edges_random(self):
        for i in xrange(self.repeats):
            self.graph = DictGraph()
            edges = set()
            for i in xrange(self.repeats):
                edges.add((randint(0, 49), randint(50, 100)))
            self.graph.add_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(edges, gotedges)
            self.graph.del_edges(edges)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)

        for i in xrange(self.repeats):
            edges = set()
            alledges = set()
            for i in xrange(self.repeats):
                edge = (randint(0, 49), randint(50, 100))
                edges.add(edge)
                alledges.add(edge)
                alledges.add((edge[1], edge[0]))
            self.graph.add_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(alledges, gotedges)
            self.graph.del_edges(edges, double=True)
            gotedges = set(self.graph.edges())
            self.assertEqual(set([]), gotedges)

    def test_edges_manual(self):
        self.graph.add_edge(('sum2', 'pwr'))
        self.graph.add_edge(('sum2', 'dbl'))
        self.graph.add_edge(('dbl', 'pwr'))
        self.graph.del_node('pwr')
        self.assertEqual({'sum2': {'dbl': {}}, 'dbl': {}}, self.graph)
        self.graph.del_node('dbl')
        self.assertRaises(KeyError, self.graph.del_node, 'pwr')
        self.assertEqual({'sum2': {}}, self.graph)
        self.graph.del_node('sum2')
        self.assertFalse(self.graph)
        self.graph.add_edge(('sum2', 'pwr'))
        self.graph.del_edge(('sum2', 'pwr'))
        self.assertEqual({'sum2': {}, 'pwr': {}}, self.graph)
        self.assertTrue(self.graph)

    def test_dfs(self):
        edges = [(1, 2), (3, 4), (5, 6), (1, 3), (1, 5), (1, 6), (2, 5)]
        self.graph.add_edges([(1, 2), (3, 4), (5, 6), (1, 3), (1, 5), (1, 6),
                              (2, 5)])
        self.assertEqual(len(self.graph.dfs(1, [])), 6)
        self.graph.clear_nodes()
        self.assertEqual(len(self.graph.dfs(4, [])), 1)
        self.assertEqual(len(self.graph.dfs(1, [])), 5)  # 4 is not clear
        self.graph.clear_nodes()
        self.assertEqual(len(self.graph.dfs(2, [])), 3)
        self.graph.clear_nodes()
        self.graph.add_edge((4, 1))
        a = []
        self.assertEqual(len(self.graph.dfs(1, a)), 6)
        self.assertEqual(a, [6, 5, 2, 4, 3, 1])

    def test_postorder1(self):
        edges = [(1, 2), (3, 4), (5, 6), (1, 5), (1, 6), (2, 5), (4, 6)]
        self.graph.add_edges(edges)
        self.graph.postorder()
        self.graph.clear_nodes()
        po1 = self.graph.postorder()
        self.graph.clear_nodes()
        po2 = self.graph.postorder()
        assert po1 == po2
        assert po2
        assert len(po2) == 6

    def test_postorder2(self):
        edges = [(1, 2), (2, 3), (3, 4), (1, 5), (5, 6), (5, 7), (1, 8),
                 (8, 9), (8, 10)]
        # 1 - 2 - 3 - 4
        #   - 5 - 6
        #       - 7
        # 1 - 8 - 9
        #       - 10
        self.graph.add_edges(edges)
        po = self.graph.postorder()
        assert po[-1] == 1
        assert po.index(10) < po.index(8)
        assert po.index(9) < po.index(8)
        assert po.index(7) < po.index(5)
        assert po.index(6) < po.index(5)
        assert po.index(4) < po.index(3)
        assert po.index(3) < po.index(2)

    def test_postorder3(self):
        for i in range(100):
            graph = DictGraph()
            edges = [(1, 2)]
            graph.add_node(3)
            graph.add_edges(edges)
            assert graph.postorder() == [2, 1, 3]

    def test_postorder3(self):
        for i in range(100):
            graph = DictGraph()
            edges1 = [(1, 'j'), ('j', 3), (3, 'z')]
            edges2 = [(1, 8), (8, 'k')]
            graph.add_edges(edges2)
            graph.add_edges(edges1)
            assert graph.postorder() == ['k', 8, 'z', 3, 'j', 1]

    def test_postorder4(self):
        edges = [(2, 1), (3, 1), (4, 3), (5, 3)]
        #     2
        # 4     - 1
        #  - 3
        # 5
        self.graph.add_edges(edges)
        po = self.graph.postorder()
        assert po[0] == 1
        assert po[-1] == 2
        assert po.index(4) > po.index(3)
        assert po.index(5) > po.index(3)

    def test_postorder5(self):
        for i in range(1000):
            edges = [(2, 1), (3, 1), (4, 3), (5, 3), (6, 4), (7, 4), (6, 5)]
            self.graph.add_edges(edges)
            self.graph[2].branch = 'C'
            self.graph[3].branch = 'D'
            self.graph[4].branch = 'A'
            self.graph[5].branch = 'B'
            self.graph[7].branch = 0
            self.graph[6].branch = 1
            assert self.graph.postorder() == [1, 2, 3, 4, 7, 5, 6]

    def test_postorder6(self):
        for i in range(1000):
            edges = [(2, 1), (3, 1), (4, 3), (5, 3), (6, 4), (7, 4), (6, 7),
                     (6, 5)]
            self.graph.add_edges(edges)
            self.graph[2].branch = 'C'
            self.graph[3].branch = 'D'
            self.graph[4].branch = 'A'
            self.graph[5].branch = 'B'
            assert self.graph.postorder() == [1, 2, 3, 4, 7, 5, 6]

    def test_postorder7(self):
        for i in range(1000):
            edges = [(2, 1), (3, 1), (4, 3), (5, 3), (7, 4), (6, 7), (6, 5)]
            self.graph.add_edges(edges)
            self.graph[2].branch = 'C'
            self.graph[3].branch = 'D'
            self.graph[4].branch = 'A'
            self.graph[5].branch = 'B'
            assert self.graph.postorder() == [1, 2, 3, 4, 7, 5, 6]

    def test_node_rank1(self):
        edges = [(1, 2), (3, 4), (5, 6), (1, 5), (1, 6), (2, 5), (4, 6)]
        self.graph.add_edges(edges)
        assert self.graph.node_rank() == {1: 3, 2: 2, 3: 2, 4: 1, 5: 1, 6: 0}

    def test_node_rank2(self):
        edges = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (1, 6)]
        self.graph.add_edges(edges)
        assert self.graph.node_rank() == {1: 5, 2: 4, 3: 3, 4: 2, 5: 1, 6: 0}

    def test_node_width1(self):
        edges = [(1, 2), (1, 3), (1, 4), (2, 5), (3, 5), (3, 6), \
                 (2, 7), (4, 7), (5, 7), (6, 7)]
        self.graph.add_edges(edges)
        self.graph.node_width()

    def test_rank_width1(self):
        edges = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (1, 7), (7, 6)]
        self.graph.add_edges(edges)
        assert self.graph.rank_width() == {0: 1, 1: 2, 2: 1, 3: 1, 4: 1, 5: 1}

    def test_rank_width2(self):
        edges = [(1, 2), (1, 3), (1, 4), (1, 5), (5, 7), \
                 (7, 6), (2, 6), (3, 6), (4, 6)]
        self.graph.add_edges(edges)
        assert self.graph.rank_width() == {0: 1, 1: 4, 2: 1, 3: 1}
Esempio n. 10
0
 def setUp(self):
     self.graph = DictGraph()
     self.repeats = 20