MCPcopy Index your code
hub / github.com/python/cpython / test_indices

Method test_indices

Lib/test/test_slice.py:165–232  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

163 self.assertEqual(actual, expected)
164
165 def test_indices(self):
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))
172 # issue 3004 tests
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))
185
186 self.assertEqual(
187 slice(-100, 100 ).indices(10),
188 slice(None).indices(10)
189 )
190 self.assertEqual(
191 slice(100, -100, -1).indices(10),
192 slice(None, None, -1).indices(10)
193 )
194 self.assertEqual(slice(-100, 100, 2).indices(10), (0, 10, 2))
195
196 self.assertEqual(list(range(10))[::sys.maxsize - 1], [0])
197
198 # Check a variety of start, stop, step and length values, including
199 # values exceeding sys.maxsize (see issue #14794).
200 vals = [None, -2**100, -2**30, -53, -7, -1, 0, 1, 7, 53, 2**30, 2**100]
201 lengths = [0, 1, 7, 53, 2**30, 2**100]
202 for slice_args in itertools.product(vals, repeat=3):
203 s = slice(*slice_args)
204 for length in lengths:
205 self.check_indices(s, length)
206 self.check_indices(slice(0, 10, 1), -3)
207
208 # Negative length should raise ValueError
209 with self.assertRaises(ValueError):
210 slice(None).indices(-1)
211
212 # Zero step should raise ValueError
213 with self.assertRaises(ValueError):
214 slice(0, 10, 0).indices(5)
215
216 # Using a start, stop or step or length that can't be interpreted as an
217 # integer should give a TypeError ...
218 with self.assertRaises(TypeError):
219 slice(0.0, 10, 1).indices(5)
220 with self.assertRaises(TypeError):
221 slice(0, 10.0, 1).indices(5)
222 with self.assertRaises(TypeError):

Callers

nothing calls this directly

Calls 6

check_indicesMethod · 0.95
sliceClass · 0.85
listClass · 0.85
MyIndexableClass · 0.70
assertEqualMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected