4
class OperatorTests(unittest.TestCase):
5
def testMultiplication(self):
7
self.failUnless(g.vcount() == 9 and g.ecount() == 9
8
and g.clusters().membership == [0,0,0,1,1,1,2,2,2])
10
def testIntersection(self):
11
g = Graph.Tree(7, 2) & Graph.Lattice([7])
12
self.failUnless(g.get_edgelist() == [(0, 1)])
15
g = Graph.Tree(7, 2) | Graph.Lattice([7])
16
self.failUnless(g.vcount() == 7 and g.ecount() == 12)
18
def testInPlaceAddition(self):
24
self.failUnless(g.vcount() == 5 and g.ecount() == 3
25
and g.clusters().membership == [0,0,0,1,2])
27
# Adding a single edge
29
self.failUnless(g.vcount() == 5 and g.ecount() == 4
30
and g.clusters().membership == [0,0,0,0,1])
34
self.failUnless(g.vcount() == 5 and g.ecount() == 6
35
and g.clusters().membership == [0]*5)
37
# Did we really use the original graph so far?
38
# TODO: disjoint union should be modified so that this assertion
39
# could be moved to the end
40
self.assert_(id(g) == id(orig))
42
# Adding another graph
44
self.failUnless(g.vcount() == 8 and g.ecount() == 9
45
and g.clusters().membership == [0,0,0,0,0,1,1,1])
48
g += [Graph.Full(3), Graph.Full(2)]
49
self.failUnless(g.vcount() == 13 and g.ecount() == 13
50
and g.clusters().membership == [0,0,0,0,0,1,1,1,2,2,2,3,3])
52
def testAddition(self):
57
self.failUnless(g.vcount() == 5 and g.ecount() == 3
58
and g.clusters().membership == [0,0,0,1,2])
61
# Adding a single edge
63
self.failUnless(g.vcount() == 5 and g.ecount() == 4
64
and g.clusters().membership == [0,0,0,0,1])
68
g = g0+[(3, 4), (2, 4)]
69
self.failUnless(g.vcount() == 5 and g.ecount() == 6
70
and g.clusters().membership == [0]*5)
73
# Adding another graph
75
self.failUnless(g.vcount() == 8 and g.ecount() == 9
76
and g.clusters().membership == [0,0,0,0,0,1,1,1])
78
def testInPlaceSubtraction(self):
82
# Deleting a vertex by vertex selector
84
self.failUnless(g.vcount() == 7 and g.ecount() == 21
85
and g.clusters().membership == [0,0,0,0,0,0,0])
89
self.failUnless(g.vcount() == 6 and g.ecount() == 15
90
and g.clusters().membership == [0,0,0,0,0,0])
92
# Deleting two vertices
94
self.failUnless(g.vcount() == 4 and g.ecount() == 6
95
and g.clusters().membership == [0,0,0,0])
99
self.failUnless(g.vcount() == 4 and g.ecount() == 5
100
and g.clusters().membership == [0,0,0,0])
102
# Deleting three more edges
103
g -= [(1, 3), (0, 2), (0, 3)]
104
self.failUnless(g.vcount() == 4 and g.ecount() == 2
105
and g.clusters().membership == [0,0,1,1])
107
# Did we really use the original graph so far?
108
self.assert_(id(g) == id(orig))
110
# Subtracting a graph
111
g2 = Graph.Tree(3, 2)
113
self.failUnless(g.vcount() == 4 and g.ecount() == 1
114
and g.clusters().membership == [0,1,2,2])
117
def testSimplify(self):
118
el = [(0,1), (1,0), (1,2), (2,3), (2,3), (2,3), (3,3)]
120
g.es["weight"] = [1, 2, 3, 4, 5, 6, 7]
124
self.failUnless(g2.vcount() == g.vcount())
125
self.failUnless(g2.ecount() == 3)
128
g2.simplify(loops=False)
129
self.failUnless(g2.vcount() == g.vcount())
130
self.failUnless(g2.ecount() == 4)
133
g2.simplify(multiple=False)
134
self.failUnless(g2.vcount() == g.vcount())
135
self.failUnless(g2.ecount() == g.ecount() - 1)
137
def testSimplifyAttributes(self):
138
el = [(0,1), (1,0), (1,2), (2,3), (2,3), (2,3), (3,3)]
140
g.es["weight"] = [1, 2, 3, 4, 5, 6, 7]
141
g.es["weight2"] = [1, 2, 3, 4, 5, 6, 7]
144
g2.simplify(reduce_attributes=max)
145
self.failUnless(g2.es["weight"] == [2, 3, 6])
146
self.failUnless(g2.es["weight2"] == [2, 3, 6])
149
g2.simplify(reduce_attributes={"weight": max})
150
self.failUnless(g2.es["weight"] == [2, 3, 6])
153
g2.simplify(reduce_attributes={"weight": max, "weight2": sum})
154
self.failUnless(g2.es["weight"] == [2, 3, 6])
155
self.failUnless(g2.es["weight2"] == [3, 3, 15])
157
g = Graph(el, directed=True)
158
g.es["weight"] = [1, 2, 3, 4, 5, 6, 7]
159
g.es["weight2"] = [1, 2, 3, 4, 5, 6, 7]
162
g2.simplify(reduce_attributes={"weight": max, "weight2": sum})
163
self.failUnless(g2.es["weight"] == [1, 2, 3, 6])
164
self.failUnless(g2.es["weight2"] == [1, 2, 3, 15])
169
operator_suite = unittest.makeSuite(OperatorTests)
170
return unittest.TestSuite([operator_suite])
173
runner = unittest.TextTestRunner()
176
if __name__ == "__main__":