summaryrefslogtreecommitdiff
path: root/tests/basics/class_inplace_op2.py
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2020-09-17 13:37:31 +1000
committerDamien George <damien@micropython.org>2020-09-18 18:40:42 +1000
commit42342fa3cb30e2eac56ceb1d21b4eb60a0f406f3 (patch)
tree6bb1fb0f5d62e8d22c208651532b9983f27eb2cb /tests/basics/class_inplace_op2.py
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/basics/class_inplace_op2.py')
-rw-r--r--tests/basics/class_inplace_op2.py73
1 files changed, 73 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")