summaryrefslogtreecommitdiff
path: root/tests/basics/builtin_slice.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/builtin_slice.py')
-rw-r--r--tests/basics/builtin_slice.py37
1 files changed, 35 insertions, 2 deletions
diff --git a/tests/basics/builtin_slice.py b/tests/basics/builtin_slice.py
index df84d5c57..5197a7cad 100644
--- a/tests/basics/builtin_slice.py
+++ b/tests/basics/builtin_slice.py
@@ -1,11 +1,44 @@
# test builtin slice
+# ensures that slices passed to user types are heap-allocated and can be
+# safely stored as well as not overriden by subsequent slices.
+
# print slice
class A:
def __getitem__(self, idx):
- print(idx)
+ print("get", idx)
+ print("abc"[1:])
+ print("get", idx)
+ return idx
+
+ def __setitem__(self, idx, value):
+ print("set", idx)
+ print("abc"[1:])
+ print("set", idx)
+ self.saved_idx = idx
+ return idx
+
+ def __delitem__(self, idx):
+ print("del", idx)
+ print("abc"[1:])
+ print("del", idx)
return idx
-s = A()[1:2:3]
+
+
+a = A()
+s = a[1:2:3]
+a[4:5:6] = s
+del a[7:8:9]
+
+print(a.saved_idx)
+
+# nested slicing
+print(A()[1 : A()[A()[2:3:4] : 5]])
+
+# tuple slicing
+a[1:2, 4:5, 7:8]
+a[1, 4:5, 7:8, 2]
+a[1:2, a[3:4], 5:6]
# check type
print(type(s) is slice)