def setUp(self): self.N = 4 # number of nodes self.G = MultiGraph(self.N, directed=True) self.nodes = [0, 1, 2, 3] self.edges = [ Edge(0, 1, 2), Edge(0, 3, 3), Edge(0, 3, 4), Edge(1, 1, 11), Edge(3, 1, 31), Edge(2, 1, 21), Edge(2, 2, 220), Edge(2, 2, 221)] # 0-3 parallel edge # 1-1 loop # 2-2 parallel loop for node in self.nodes: self.G.add_node(node) for edge in self.edges: self.G.add_edge(edge)
class TestMultiGraphDirected(unittest.TestCase): def setUp(self): self.N = 4 # number of nodes self.G = MultiGraph(self.N, directed=True) self.nodes = [0, 1, 2, 3] self.edges = [ Edge(0, 1, 2), Edge(0, 3, 3), Edge(0, 3, 4), Edge(1, 1, 11), Edge(3, 1, 31), Edge(2, 1, 21), Edge(2, 2, 220), Edge(2, 2, 221)] # 0-3 parallel edge # 1-1 loop # 2-2 parallel loop for node in self.nodes: self.G.add_node(node) for edge in self.edges: self.G.add_edge(edge) def test_basic(self): self.assertTrue(self.G.is_directed()) self.assertEqual(self.G.v(), self.N) self.assertEqual(self.G.e(), len(self.edges)) #print list(self.G.iteredges()) #print self.G #self.G.show() def test_weight(self): self.assertEqual(self.G.weight(Edge(3, 3)), 0) self.assertEqual(self.G.weight(Edge(1, 1)), 1) self.assertEqual(self.G.weight(Edge(2, 2)), 2) self.assertEqual(self.G.weight(Edge(3, 2)), 0) self.assertEqual(self.G.weight(Edge(2, 1)), 1) self.assertEqual(self.G.weight(Edge(0, 3)), 2) def test_del_edge(self): edge1 = Edge(2, 3, 23) self.G.add_edge(edge1) self.assertEqual(self.G.e(), len(self.edges) + 1) self.G.del_edge(edge1) self.assertEqual(self.G.e(), len(self.edges)) #print self.G edge2 = Edge(1, 1, 11) self.assertTrue(self.G.has_edge(edge2)) self.G.del_edge(edge2) self.assertFalse(self.G.has_edge(edge2)) #print self.G def test_copy(self): T = self.G.copy() self.assertEqual(T.v(), self.G.v()) self.assertEqual(T.e(), self.G.e()) for node in T.iternodes(): self.assertTrue(self.G.has_node(node)) for edge in T.iteredges(): self.assertTrue(self.G.weight(edge), T.weight(edge)) def test_transpose(self): T = self.G.transpose() self.assertEqual(T.v(), self.G.v()) self.assertEqual(T.e(), self.G.e()) for node in T.iternodes(): self.assertTrue(self.G.has_node(node)) for edge in T.iteredges(): self.assertTrue(self.G.weight(~edge), T.weight(edge)) def test_complement(self): T = self.G.complement() self.assertEqual(T.v(), self.G.v()) for node in T.iternodes(): self.assertTrue(self.G.has_node(node)) self.assertFalse(T.has_edge(Edge(node, node))) # no loops for edge in T.iteredges(): self.assertFalse(self.G.has_edge(edge)) for edge in self.G.iteredges(): self.assertFalse(T.has_edge(edge)) def test_subgraph(self): T = self.G.subgraph([0, 1, 2]) self.assertEqual(T.v(), 3) self.assertEqual(T.e(), 5) for edge in T.iteredges(): self.assertTrue(self.G.has_edge(edge)) def test_degree(self): self.assertRaises(ValueError, self.G.degree, 2) self.assertEqual(self.G.indegree(2), 2) self.assertEqual(self.G.indegree(1), 4) self.assertEqual(self.G.indegree(0), 0) self.assertEqual(self.G.outdegree(2), 3) self.assertEqual(self.G.outdegree(1), 1) self.assertEqual(self.G.outdegree(0), 3) def tearDown(self): pass