summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/basics/slice_optimise.py23
-rw-r--r--tests/basics/slice_optimise.py.exp2
2 files changed, 25 insertions, 0 deletions
diff --git a/tests/basics/slice_optimise.py b/tests/basics/slice_optimise.py
new file mode 100644
index 000000000..f663e16b8
--- /dev/null
+++ b/tests/basics/slice_optimise.py
@@ -0,0 +1,23 @@
+# Test that the slice-on-stack optimisation does not break various uses of slice
+# (see MP_TYPE_FLAG_SUBSCR_ALLOWS_STACK_SLICE type option).
+#
+# Note: this test has a corresponding .py.exp file because hashing slice objects
+# was not allowed in CPython until 3.12.
+
+try:
+ from collections import OrderedDict
+except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+# Attempt to index with a slice, error should contain the slice (failed key).
+try:
+ dict()[:]
+except KeyError as e:
+ print("KeyError", e.args)
+
+# Put a slice and another object into an OrderedDict, and retrieve them.
+x = OrderedDict()
+x[:"a"] = 1
+x["b"] = 2
+print(list(x.keys()), list(x.values()))
diff --git a/tests/basics/slice_optimise.py.exp b/tests/basics/slice_optimise.py.exp
new file mode 100644
index 000000000..3fa59aae1
--- /dev/null
+++ b/tests/basics/slice_optimise.py.exp
@@ -0,0 +1,2 @@
+KeyError (slice(None, None, None),)
+[slice(None, 'a', None), 'b'] [1, 2]