|
4 | 4 | import random
|
5 | 5 | import re
|
6 | 6 | import string
|
| 7 | +import sys |
7 | 8 |
|
8 | 9 | import pytest
|
9 | 10 |
|
@@ -194,42 +195,38 @@ def _test_copy(self):
|
194 | 195 | self.sorted_dict_keys = self.sorted_dict.keys()
|
195 | 196 |
|
196 | 197 | def _test_keys(self):
|
197 |
| - sorted_normal_dict_keys = sorted(self.normal_dict.keys()) |
198 |
| - sorted_normal_dict_keys_len = len(sorted_normal_dict_keys) |
199 |
| - sorted_normal_dict_keys_len_ex = int(1.3 * sorted_normal_dict_keys_len) |
200 |
| - assert repr(self.sorted_dict_keys) == f"SortedDictKeys({sorted_normal_dict_keys})" |
201 |
| - assert len(self.sorted_dict_keys) == sorted_normal_dict_keys_len |
202 |
| - start = self._rg.randint(-sorted_normal_dict_keys_len_ex, sorted_normal_dict_keys_len_ex) |
203 |
| - stop = self._rg.randint(-sorted_normal_dict_keys_len_ex, sorted_normal_dict_keys_len_ex) |
| 198 | + self._test_view("SortedDictKeys", self.sorted_dict_keys, sorted(self.normal_dict.keys())) |
| 199 | + |
| 200 | + def _test_view(self, name, view, view_as_list): |
| 201 | + view_as_list_len = len(view_as_list) |
| 202 | + view_as_list_len_ex = int(1.3 * view_as_list_len) |
| 203 | + assert repr(view) == f"{name}({view_as_list})" |
| 204 | + assert len(view) == view_as_list_len |
| 205 | + start = self._rg.randint(-view_as_list_len_ex, view_as_list_len_ex) |
| 206 | + stop = self._rg.randint(-view_as_list_len_ex, view_as_list_len_ex) |
204 | 207 | for idx in [start, stop]:
|
205 |
| - if -sorted_normal_dict_keys_len <= idx < sorted_normal_dict_keys_len: |
206 |
| - assert self.sorted_dict_keys[idx] == sorted_normal_dict_keys[idx] |
| 208 | + if -view_as_list_len <= idx < view_as_list_len: |
| 209 | + assert view[idx] == view_as_list[idx] |
207 | 210 | else:
|
208 | 211 | with pytest.raises(
|
209 |
| - IndexError, |
210 |
| - match=rf"^got invalid index {idx} for view of length {sorted_normal_dict_keys_len}$", |
| 212 | + IndexError, match=rf"^got invalid index {idx} for view of length {view_as_list_len}$" |
211 | 213 | ):
|
212 |
| - self.sorted_dict_keys[idx] |
213 |
| - step = self._rg.randint(-sorted_normal_dict_keys_len_ex, sorted_normal_dict_keys_len_ex) |
| 214 | + view[idx] |
| 215 | + with pytest.raises(IndexError, match="^cannot fit 'int' into an index-sized integer$"): |
| 216 | + view[sys.maxsize + 1] |
| 217 | + with pytest.raises(TypeError, match=rf"^got index 0.0 of type {float}, want index of type {int} or {slice}$"): |
| 218 | + view[0.0] |
| 219 | + step = self._rg.randint(-view_as_list_len_ex, view_as_list_len_ex) |
214 | 220 | if step == 0:
|
215 |
| - with pytest.raises( |
216 |
| - TypeError, |
217 |
| - match=re.escape( |
218 |
| - f"got index slice({start}, {stop}, {step}) of type {slice}, want index of type {int} or {slice} with non-zero step" |
219 |
| - ), |
220 |
| - ): |
221 |
| - self.sorted_dict_keys[start:stop:step] |
| 221 | + with pytest.raises(ValueError, match="^slice step cannot be zero$"): |
| 222 | + view[start:stop:step] |
222 | 223 | else:
|
223 |
| - assert self.sorted_dict_keys[start:stop:step] == sorted_normal_dict_keys[start:stop:step] |
224 |
| - assert self.sorted_dict_keys[:stop:step] == sorted_normal_dict_keys[:stop:step] |
225 |
| - assert self.sorted_dict_keys[start::step] == sorted_normal_dict_keys[start::step] |
226 |
| - assert self.sorted_dict_keys[::step] == sorted_normal_dict_keys[::step] |
227 |
| - with pytest.raises( |
228 |
| - TypeError, |
229 |
| - match=rf"^got index 0.0 of type {float}, want index of type {int} or {slice} with non-zero step$", |
230 |
| - ): |
231 |
| - self.sorted_dict_keys[0.0] |
232 |
| - assert self.sorted_dict_keys[start:stop] == sorted_normal_dict_keys[start:stop] |
233 |
| - assert self.sorted_dict_keys[start:] == sorted_normal_dict_keys[start:] |
234 |
| - assert self.sorted_dict_keys[:stop] == sorted_normal_dict_keys[:stop] |
235 |
| - assert [*self.sorted_dict_keys] == sorted_normal_dict_keys |
| 224 | + assert view[start:stop:step] == view_as_list[start:stop:step] |
| 225 | + assert view[:stop:step] == view_as_list[:stop:step] |
| 226 | + assert view[start::step] == view_as_list[start::step] |
| 227 | + assert view[::step] == view_as_list[::step] |
| 228 | + assert view[start:stop] == view_as_list[start:stop] |
| 229 | + assert view[start:] == view_as_list[start:] |
| 230 | + assert view[:stop] == view_as_list[:stop] |
| 231 | + assert view[:] == view_as_list |
| 232 | + assert [*view] == view_as_list |
0 commit comments