Lines Matching full: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): argument
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)")
83 self.assertEqual(hash(slice(5)), slice(5).__hash__())
84 self.assertEqual(hash(slice(1, 2)), slice(1, 2).__hash__())
85 self.assertEqual(hash(slice(1, 2, 3)), slice(1, 2, 3).__hash__())
86 self.assertNotEqual(slice(5), slice(6))
89 hash(slice(1, 2, []))
92 hash(slice(4, {}))
95 s1 = slice(1, 2, 3)
96 s2 = slice(1, 2, 3)
97 s3 = slice(1, 2, 4)
111 s1 = slice(BadCmp())
112 s2 = slice(BadCmp())
116 s1 = slice(1, BadCmp())
117 s2 = slice(1, BadCmp())
121 s1 = slice(1, 2, BadCmp())
122 s2 = slice(1, 2, BadCmp())
127 s = slice(1)
132 s = slice(1, 2)
137 s = slice(1, 2, 3)
146 s = slice(obj)
149 def check_indices(self, slice, length): argument
151 actual = slice.indices(length)
155 expected = slice_indices(slice, length)
160 if length >= 0 and slice.step != 0:
161 actual = range(*slice.indices(length))
162 expected = range(length)[slice]
166 self.assertEqual(slice(None ).indices(10), (0, 10, 1))
167 self.assertEqual(slice(None, None, 2).indices(10), (0, 10, 2))
168 self.assertEqual(slice(1, None, 2).indices(10), (1, 10, 2))
169 self.assertEqual(slice(None, None, -1).indices(10), (9, -1, -1))
170 self.assertEqual(slice(None, None, -2).indices(10), (9, -1, -2))
171 self.assertEqual(slice(3, None, -2).indices(10), (3, -1, -2))
173 self.assertEqual(slice(None, -9).indices(10), (0, 1, 1))
174 self.assertEqual(slice(None, -10).indices(10), (0, 0, 1))
175 self.assertEqual(slice(None, -11).indices(10), (0, 0, 1))
176 self.assertEqual(slice(None, -10, -1).indices(10), (9, 0, -1))
177 self.assertEqual(slice(None, -11, -1).indices(10), (9, -1, -1))
178 self.assertEqual(slice(None, -12, -1).indices(10), (9, -1, -1))
179 self.assertEqual(slice(None, 9).indices(10), (0, 9, 1))
180 self.assertEqual(slice(None, 10).indices(10), (0, 10, 1))
181 self.assertEqual(slice(None, 11).indices(10), (0, 10, 1))
182 self.assertEqual(slice(None, 8, -1).indices(10), (9, 8, -1))
183 self.assertEqual(slice(None, 9, -1).indices(10), (9, 9, -1))
184 self.assertEqual(slice(None, 10, -1).indices(10), (9, 9, -1))
187 slice(-100, 100 ).indices(10),
188 slice(None).indices(10)
191 slice(100, -100, -1).indices(10),
192 slice(None, None, -1).indices(10)
194 self.assertEqual(slice(-100, 100, 2).indices(10), (0, 10, 2))
203 s = slice(*slice_args)
206 self.check_indices(slice(0, 10, 1), -3)
210 slice(None).indices(-1)
214 slice(0, 10, 0).indices(5)
219 slice(0.0, 10, 1).indices(5)
221 slice(0, 10.0, 1).indices(5)
223 slice(0, 10, 1.0).indices(5)
225 slice(0, 10, 1).indices(5.0)
228 self.assertEqual(slice(0, 10, 1).indices(5), (0, 5, 1))
229 self.assertEqual(slice(MyIndexable(0), 10, 1).indices(5), (0, 5, 1))
230 self.assertEqual(slice(0, MyIndexable(10), 1).indices(5), (0, 5, 1))
231 self.assertEqual(slice(0, 10, MyIndexable(1)).indices(5), (0, 5, 1))
232 self.assertEqual(slice(0, 10, 1).indices(MyIndexable(5)), (0, 5, 1))
242 self.assertEqual(tmp, [(slice(1, 2), 42)])
247 s = slice(10, 20, 3)
255 s = slice(1, 10)
259 s = slice(1, 10, 2)
264 s = slice([1, 2], [3, 4], [5, 6])
272 s = slice(1, 10)
276 s = slice(1, 10, 2)
281 s = slice([1, 2], [3, 4], [5, 6])
292 o.s = slice(o)