Skip to content

Commit 655c3df

Browse files
committed
Implement slices
1 parent 6d91717 commit 655c3df

3 files changed

Lines changed: 21 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Versioning].
1313
ordering of integers for existing seeds, which may be a breaking change depending
1414
on the use case.
1515
- Add support for negative indexes.
16+
- Add support for slices.
1617

1718
## [1.1.0] - 2022-12-29
1819

src/shuffled/core.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ def __getitem__(self, index: slice) -> Sequence[int]: ...
4545

4646
def __getitem__(self, index: Union[int, slice]) -> Union[int, Sequence[int]]:
4747
if isinstance(index, slice):
48-
raise NotImplementedError
48+
return [
49+
self._encryptor.encrypt(i) for i in range(*index.indices(self._size))
50+
]
4951
if index < 0:
5052
index += self._size
5153
if index < 0 or index >= self._size:

tests/test_shuffled.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,24 @@ def test_seed(self, seed, expected):
3333
assert list(Shuffled(20, seed)) == expected
3434

3535
def test_negative_index(self):
36-
s = Shuffled(10, seed=b"\x00")
37-
38-
assert s[-1] == s[9]
39-
assert s[-10] == s[0]
36+
subject = Shuffled(10, seed=b"\x00")
37+
assert subject[-1] == subject[9]
38+
assert subject[-10] == subject[0]
4039

4140
def test_negative_index_out_of_bounds(self):
42-
s = Shuffled(10, seed=b"\x00")
41+
subject = Shuffled(10, seed=b"\x00")
4342

4443
with pytest.raises(IndexError):
45-
s[-11]
44+
subject[-11]
45+
46+
def test_slice(self):
47+
subject = Shuffled(10)
48+
ref = list(subject)
49+
assert subject[2:5] == ref[2:5]
50+
assert subject[:3] == ref[:3]
51+
assert subject[7:] == ref[7:]
52+
assert subject[::2] == ref[::2]
53+
assert subject[-3:] == ref[-3:]
54+
assert subject[1:-1] == ref[1:-1]
55+
assert subject[5:2:-1] == ref[5:2:-1]
56+
assert subject[20:30] == ref[20:30]

0 commit comments

Comments
 (0)