Browse Source
Instances of the slice class are passed to __getitem__() on objects when the user indexes them with a slice. In practice the majority of the time (other than passing it on untouched) is to work out what the slice means in the context of an array dimension of a particular length. Since Python 2.3 there has been a method on the slice class, indices(), that takes a dimension length and returns the real start, stop and step, accounting for missing or negative values in the slice spec. This commit implements such a indices() method on the slice class. It is configurable at compile-time via MICROPY_PY_BUILTINS_SLICE_INDICES, disabled by default, enabled on unix, stm32 and esp32 ports. This commit also adds new tests for slice indices and for slicing unicode strings.pull/5469/head
Nicko van Someren
5 years ago
committed by
Damien George
9 changed files with 160 additions and 74 deletions
@ -0,0 +1,27 @@ |
|||
# Test builtin slice indices resolution |
|||
|
|||
# A class that returns an item key |
|||
class A: |
|||
def __getitem__(self, idx): |
|||
return idx |
|||
|
|||
# Make sure that we have slices and .indices() |
|||
try: |
|||
A()[2:5].indices(10) |
|||
except: |
|||
print("SKIP") |
|||
raise SystemExit |
|||
|
|||
print(A()[:].indices(10)) |
|||
print(A()[2:].indices(10)) |
|||
print(A()[:7].indices(10)) |
|||
print(A()[2:7].indices(10)) |
|||
print(A()[2:7:2].indices(10)) |
|||
print(A()[2:7:-2].indices(10)) |
|||
print(A()[7:2:2].indices(10)) |
|||
print(A()[7:2:-2].indices(10)) |
|||
|
|||
print(A()[2:7:2].indices(5)) |
|||
print(A()[2:7:-2].indices(5)) |
|||
print(A()[7:2:2].indices(5)) |
|||
print(A()[7:2:-2].indices(5)) |
@ -0,0 +1,12 @@ |
|||
# Test slicing of Unicode strings |
|||
|
|||
s = "Привет" |
|||
|
|||
print(s[:]) |
|||
print(s[2:]) |
|||
print(s[:5]) |
|||
print(s[2:5]) |
|||
print(s[2:5:1]) |
|||
print(s[2:10]) |
|||
print(s[-3:10]) |
|||
print(s[-4:10]) |
Loading…
Reference in new issue