(self)
| 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): |
nothing calls this directly
no test coverage detected