5
class VertexSeqTests(unittest.TestCase):
7
self.g = Graph.Full(10)
8
self.g.vs["test"] = range(10)
10
def testCreation(self):
11
self.failUnless(len(VertexSeq(self.g)) == 10)
12
self.failUnless(len(VertexSeq(self.g, 2)) == 1)
13
self.failUnless(len(VertexSeq(self.g, [1,2,3])) == 3)
14
self.failUnless(VertexSeq(self.g, [1,2,3]).indices == [1,2,3])
15
self.assertRaises(ValueError, VertexSeq, self.g, 12)
16
self.assertRaises(ValueError, VertexSeq, self.g, [12])
17
self.failUnless(self.g.vs.graph == self.g)
19
def testPartialAttributeAssignment(self):
20
only_even = self.g.vs.select(lambda v: (v.index % 2 == 0))
21
only_even["test"] = [0]*len(only_even)
22
self.failUnless(self.g.vs["test"] == [0,1,0,3,0,5,0,7,0,9])
23
only_even["test2"] = range(5)
24
self.failUnless(self.g.vs["test2"] == [0,None,1,None,2,None,3,None,4,None])
25
self.assertRaises(ValueError, only_even.__setitem__, "test2", range(6))
27
def testAllSequence(self):
28
self.failUnless(len(self.g.vs) == 10)
29
self.failUnless(self.g.vs["test"] == range(10))
31
def testEmptySequence(self):
32
empty_vs = self.g.vs.select(None)
33
self.failUnless(len(empty_vs) == 0)
34
self.assertRaises(IndexError, empty_vs.__getitem__, 0)
35
self.assertRaises(KeyError, empty_vs.__getitem__, "nonexistent")
36
self.failUnless(empty_vs["test"] == [])
37
empty_vs = self.g.vs[[]]
38
self.failUnless(len(empty_vs) == 0)
39
empty_vs = self.g.vs[()]
40
self.failUnless(len(empty_vs) == 0)
42
def testCallableFiltering(self):
43
only_even = self.g.vs.select(lambda v: (v.index % 2 == 0))
44
self.failUnless(len(only_even) == 5)
45
self.assertRaises(KeyError, only_even.__getitem__, "nonexistent")
46
self.failUnless(only_even["test"] == [0, 2, 4, 6, 8])
48
def testChainedCallableFiltering(self):
49
only_div_six = self.g.vs.select(lambda v: (v.index % 2 == 0),
50
lambda v: (v.index % 3 == 0))
51
self.failUnless(len(only_div_six) == 2)
52
self.failUnless(only_div_six["test"] == [0, 6])
54
only_div_six = self.g.vs.select(lambda v: (v.index % 2 == 0)).select(\
55
lambda v: (v.index % 3 == 0))
56
self.failUnless(len(only_div_six) == 2)
57
self.failUnless(only_div_six["test"] == [0, 6])
59
def testIntegerFiltering(self):
60
subset = self.g.vs.select(2,3,4,2)
61
self.failUnless(len(subset) == 4)
62
self.failUnless(subset["test"] == [2,3,4,2])
63
self.assertRaises(TypeError, self.g.vs, "select", 2, 3, 4, 2, None)
65
subset = self.g.vs[2,3,4,2]
66
self.failUnless(len(subset) == 4)
67
self.failUnless(subset["test"] == [2,3,4,2])
69
def testIterableFiltering(self):
70
subset = self.g.vs.select(xrange(5,8))
71
self.failUnless(len(subset) == 3)
72
self.failUnless(subset["test"] == [5,6,7])
74
def testSliceFiltering(self):
75
subset = self.g.vs.select(slice(5, 8))
76
self.failUnless(len(subset) == 3)
77
self.failUnless(subset["test"] == [5,6,7])
78
subset = self.g.vs[5:16:2]
79
self.failUnless(len(subset) == 3)
80
self.failUnless(subset["test"] == [5,7,9])
82
def testKeywordFiltering(self):
83
g = Graph.Barabasi(10000)
84
g.vs["degree"] = g.degree()
85
g.vs["parity"] = [i % 2 for i in xrange(g.vcount())]
86
l = len(g.vs(degree_gt=30))
87
self.failUnless(l < 1000)
88
self.failUnless(len(g.vs(degree_gt=30, parity=0)) <= 500)
90
self.failUnless(len(g.vs(_degree_gt=30)) == l)
92
def testGraphMethodProxying(self):
93
g = Graph.Barabasi(100)
95
self.failUnless(vs.degree() == g.degree(vs))
96
self.failUnless(g.degree(vs) == g.degree(vs.indices))
99
vs_suite = unittest.makeSuite(VertexSeqTests)
100
return unittest.TestSuite([vs_suite])
103
runner = unittest.TextTestRunner()
106
if __name__ == "__main__":