summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/unix/variants/coverage/mpconfigvariant.h1
-rw-r--r--tests/basics/class_inplace_op2.py73
-rw-r--r--tests/basics/class_inplace_op2.py.exp12
3 files changed, 86 insertions, 0 deletions
diff --git a/ports/unix/variants/coverage/mpconfigvariant.h b/ports/unix/variants/coverage/mpconfigvariant.h
index 802c2fe5f..3de529432 100644
--- a/ports/unix/variants/coverage/mpconfigvariant.h
+++ b/ports/unix/variants/coverage/mpconfigvariant.h
@@ -39,6 +39,7 @@
#define MICROPY_WARNINGS_CATEGORY (1)
#define MICROPY_MODULE_GETATTR (1)
#define MICROPY_PY_DELATTR_SETATTR (1)
+#define MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS (1)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
#define MICROPY_PY_BUILTINS_MEMORYVIEW_ITEMSIZE (1)
#define MICROPY_PY_BUILTINS_NEXT2 (1)
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