File tree Expand file tree Collapse file tree 2 files changed +62
-4
lines changed
Expand file tree Collapse file tree 2 files changed +62
-4
lines changed Original file line number Diff line number Diff line change @@ -11,12 +11,32 @@ cdef class BaseIterator(object):
1111 def __cinit__ (self ):
1212 self ._clone_iter = None
1313
14- def __getitem__ (self , int index ):
14+ def __getitem__ (self , index ):
15+
16+ if isinstance (index, slice ):
17+ return self ._getslice(index)
18+
19+ index = int (index)
20+
21+ if index < 0 :
22+ index = len (self ) + index
23+
24+ if index < 0 :
25+ raise IndexError (" index out of range" )
26+
1527 for i, item in enumerate (self ):
1628 if i == index:
1729 return item
1830 raise IndexError (" index out of range" )
1931
32+ def _getslice (self , slice_object ):
33+
34+ l = []
35+
36+ for i in xrange (* slice_object.indices(len (self ))):
37+ l.append(self [i])
38+ return l
39+
2040 def __iter__ (self ):
2141 if self ._clone_iter:
2242 return self ._clone_iter()
Original file line number Diff line number Diff line change @@ -40,8 +40,6 @@ class TestFile(unittest.TestCase):
4040
4141 def test_len (self ):
4242 f = aaf .open (main_test_file )
43-
44-
4543 iterable = f .storage .mobs ()
4644
4745 assert len (iterable ) == 199
@@ -55,10 +53,50 @@ def test_len(self):
5553 assert count == len (iterable )
5654 assert len (iterable ) == 199
5755
58- def test_skip (self ):
56+ def test_negative_index (self ):
57+ f = aaf .open (main_test_file )
58+ iterable = f .storage .mobs ()
59+
60+
61+ last_item = iterable [len (iterable )- 1 ]
62+ assert last_item == iterable [- 1 ]
63+
64+ try :
65+ iterable [- 10000 ]
66+ except IndexError :
67+ pass
68+ else :
69+ raise
70+
71+ for i in xrange (len (iterable )):
72+ assert iterable [i ] == iterable [i - len (iterable )]
73+
74+ def test_slice (self ):
5975 f = aaf .open (main_test_file )
76+ iterable = f .storage .mobs ()
77+
78+
79+ s = iterable [1 :10 ]
80+ l = []
81+ for i in xrange (1 , 10 ):
82+ l .append (iterable [i ])
83+
84+ assert s == l
85+
86+ s = iterable [100 :- 10 :2 ]
6087
88+ l = []
6189
90+ for i in xrange (100 , len (iterable )- 10 , 2 ):
91+ l .append (iterable [i ])
92+
93+ assert s == l
94+
95+ l = iterable [- 1000 : 1000 ]
96+
97+
98+ def test_skip (self ):
99+ f = aaf .open (main_test_file )
62100 iterable = f .storage .mobs ()
63101
64102 assert len (iterable ) == 199
You can’t perform that action at this time.
0 commit comments