aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDamien George2020-09-17 13:37:31 +1000
committerDamien George2020-09-18 18:40:42 +1000
commit42342fa3cb30e2eac56ceb1d21b4eb60a0f406f3 (patch)
tree6bb1fb0f5d62e8d22c208651532b9983f27eb2cb /tests
parentc410a86814abde8ce05aaf46383f38ef9f981a8c (diff)
tests/basics: Add test for MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS ops.
And enable this feature on unix, the coverage variant. The .exp test file is needed so the test can run on CPython versions prior to "@=" operator support. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/basics/class_inplace_op2.py73
-rw-r--r--tests/basics/class_inplace_op2.py.exp12
2 files changed, 85 insertions, 0 deletions
diff --git a/tests/basics/class_inplace_op2.py b/tests/basics/class_inplace_op2.py
new file mode 100644
index 000000000..0e3f2add4
--- /dev/null
+++ b/tests/basics/class_inplace_op2.py
@@ -0,0 +1,73 @@
+# Test inplace special methods enabled by MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS
+
+
+class A:
+ def __imul__(self, other):
+ print("__imul__")
+ return self
+
+ def __imatmul__(self, other):
+ print("__imatmul__")
+ return self
+
+ def __ifloordiv__(self, other):
+ print("__ifloordiv__")
+ return self
+
+ def __itruediv__(self, other):
+ print("__itruediv__")
+ return self
+
+ def __imod__(self, other):
+ print("__imod__")
+ return self
+
+ def __ipow__(self, other):
+ print("__ipow__")
+ return self
+
+ def __ior__(self, other):
+ print("__ior__")
+ return self
+
+ def __ixor__(self, other):
+ print("__ixor__")
+ return self
+
+ def __iand__(self, other):
+ print("__iand__")
+ return self
+
+ def __ilshift__(self, other):
+ print("__ilshift__")
+ return self
+
+ def __irshift__(self, other):
+ print("__irshift__")
+ return self
+
+
+a = A()
+
+try:
+ a *= None
+except TypeError:
+ print("SKIP")
+ raise SystemExit
+
+a @= None
+a //= None
+a /= None
+a %= None
+a **= None
+a |= None
+a ^= None
+a &= None
+a <<= None
+a >>= None
+
+# Normal operator should not fallback to inplace operator
+try:
+ a * None
+except TypeError:
+ print("TypeError")
diff --git a/tests/basics/class_inplace_op2.py.exp b/tests/basics/class_inplace_op2.py.exp
new file mode 100644
index 000000000..8c323b517
--- /dev/null
+++ b/tests/basics/class_inplace_op2.py.exp
@@ -0,0 +1,12 @@
+__imul__
+__imatmul__
+__ifloordiv__
+__itruediv__
+__imod__
+__ipow__
+__ior__
+__ixor__
+__iand__
+__ilshift__
+__irshift__
+TypeError