~ubuntu-branches/ubuntu/vivid/python-igraph/vivid

« back to all changes in this revision

Viewing changes to igraph/test/vertexseq.py

  • Committer: Package Import Robot
  • Author(s): TANIGUCHI Takaki
  • Date: 2012-03-17 17:23:55 UTC
  • Revision ID: package-import@ubuntu.com-20120317172355-e9iki37igmxnlq38
Tags: upstream-0.5.4
ImportĀ upstreamĀ versionĀ 0.5.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vim:ts=4 sw=4 sts=4:
 
2
import unittest
 
3
from igraph import *
 
4
 
 
5
class VertexSeqTests(unittest.TestCase):
 
6
    def setUp(self):
 
7
        self.g = Graph.Full(10)
 
8
        self.g.vs["test"] = range(10)
 
9
    
 
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)
 
18
 
 
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))
 
26
 
 
27
    def testAllSequence(self):
 
28
        self.failUnless(len(self.g.vs) == 10)
 
29
        self.failUnless(self.g.vs["test"] == range(10))
 
30
 
 
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)
 
41
 
 
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])
 
47
 
 
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])
 
53
 
 
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])
 
58
 
 
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)
 
64
 
 
65
        subset = self.g.vs[2,3,4,2]
 
66
        self.failUnless(len(subset) == 4)
 
67
        self.failUnless(subset["test"] == [2,3,4,2])
 
68
 
 
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])
 
73
 
 
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])
 
81
 
 
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)
 
89
        del g.vs["degree"]
 
90
        self.failUnless(len(g.vs(_degree_gt=30)) == l)
 
91
 
 
92
    def testGraphMethodProxying(self):
 
93
        g = Graph.Barabasi(100)
 
94
        vs = g.vs(1,3,5,7,9)
 
95
        self.failUnless(vs.degree() == g.degree(vs))
 
96
        self.failUnless(g.degree(vs) == g.degree(vs.indices))
 
97
 
 
98
def suite():
 
99
    vs_suite = unittest.makeSuite(VertexSeqTests)
 
100
    return unittest.TestSuite([vs_suite])
 
101
 
 
102
def test():
 
103
    runner = unittest.TextTestRunner()
 
104
    runner.run(suite())
 
105
    
 
106
if __name__ == "__main__":
 
107
    test()
 
108