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