Lines Matching refs:slice
1 # tests for slice objects; in particular the indices method.
16 Helper function to convert a slice argument to an integer, and raise
24 "slice indices must be integers or "
27 def slice_indices(slice, length):
29 Reference implementation for the slice.indices method.
34 step = 1 if slice.step is None else evaluate_slice_index(slice.step)
40 raise ValueError("slice step cannot be zero")
47 if slice.start is None:
50 start = evaluate_slice_index(slice.start)
54 if slice.stop is None:
57 stop = evaluate_slice_index(slice.stop)
63 # Class providing an __index__ method. Used for testing slice.indices.
76 self.assertRaises(TypeError, slice)
77 self.assertRaises(TypeError, slice, 1, 2, 3, 4)
80 self.assertEqual(repr(slice(1, 2, 3)), "slice(1, 2, 3)")
84 self.assertRaises(TypeError, hash, slice(5))
86 slice(5).__hash__()
89 s1 = slice(1, 2, 3)
90 s2 = slice(1, 2, 3)
91 s3 = slice(1, 2, 4)
105 s1 = slice(BadCmp())
106 s2 = slice(BadCmp())
110 s1 = slice(1, BadCmp())
111 s2 = slice(1, BadCmp())
115 s1 = slice(1, 2, BadCmp())
116 s2 = slice(1, 2, BadCmp())
121 s = slice(1)
126 s = slice(1, 2)
131 s = slice(1, 2, 3)
140 s = slice(obj)
143 def check_indices(self, slice, length):
145 actual = slice.indices(length)
149 expected = slice_indices(slice, length)
154 if length >= 0 and slice.step != 0:
155 actual = range(*slice.indices(length))
156 expected = range(length)[slice]
160 self.assertEqual(slice(None ).indices(10), (0, 10, 1))
161 self.assertEqual(slice(None, None, 2).indices(10), (0, 10, 2))
162 self.assertEqual(slice(1, None, 2).indices(10), (1, 10, 2))
163 self.assertEqual(slice(None, None, -1).indices(10), (9, -1, -1))
164 self.assertEqual(slice(None, None, -2).indices(10), (9, -1, -2))
165 self.assertEqual(slice(3, None, -2).indices(10), (3, -1, -2))
167 self.assertEqual(slice(None, -9).indices(10), (0, 1, 1))
168 self.assertEqual(slice(None, -10).indices(10), (0, 0, 1))
169 self.assertEqual(slice(None, -11).indices(10), (0, 0, 1))
170 self.assertEqual(slice(None, -10, -1).indices(10), (9, 0, -1))
171 self.assertEqual(slice(None, -11, -1).indices(10), (9, -1, -1))
172 self.assertEqual(slice(None, -12, -1).indices(10), (9, -1, -1))
173 self.assertEqual(slice(None, 9).indices(10), (0, 9, 1))
174 self.assertEqual(slice(None, 10).indices(10), (0, 10, 1))
175 self.assertEqual(slice(None, 11).indices(10), (0, 10, 1))
176 self.assertEqual(slice(None, 8, -1).indices(10), (9, 8, -1))
177 self.assertEqual(slice(None, 9, -1).indices(10), (9, 9, -1))
178 self.assertEqual(slice(None, 10, -1).indices(10), (9, 9, -1))
181 slice(-100, 100 ).indices(10),
182 slice(None).indices(10)
185 slice(100, -100, -1).indices(10),
186 slice(None, None, -1).indices(10)
188 self.assertEqual(slice(-100, 100, 2).indices(10), (0, 10, 2))
197 s = slice(*slice_args)
200 self.check_indices(slice(0, 10, 1), -3)
204 slice(None).indices(-1)
208 slice(0, 10, 0).indices(5)
213 slice(0.0, 10, 1).indices(5)
215 slice(0, 10.0, 1).indices(5)
217 slice(0, 10, 1.0).indices(5)
219 slice(0, 10, 1).indices(5.0)
222 self.assertEqual(slice(0, 10, 1).indices(5), (0, 5, 1))
223 self.assertEqual(slice(MyIndexable(0), 10, 1).indices(5), (0, 5, 1))
224 self.assertEqual(slice(0, MyIndexable(10), 1).indices(5), (0, 5, 1))
225 self.assertEqual(slice(0, 10, MyIndexable(1)).indices(5), (0, 5, 1))
226 self.assertEqual(slice(0, 10, 1).indices(MyIndexable(5)), (0, 5, 1))
236 self.assertEqual(tmp, [(slice(1, 2), 42)])
241 s = slice(10, 20, 3)
249 s = slice(1, 10)
253 s = slice(1, 10, 2)
258 s = slice([1, 2], [3, 4], [5, 6])
266 s = slice(1, 10)
270 s = slice(1, 10, 2)
275 s = slice([1, 2], [3, 4], [5, 6])
286 o.s = slice(o)