diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-09-04 16:44:38 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-09-04 16:44:38 +0300 |
commit | 376618cd8ad322f5a8fa77dac7d202f451481688 (patch) | |
tree | 97a67498713f2227250121ada277a9e8b9baf224 | |
parent | 60749e57f24741c685d2ae125cfff27d021eb90d (diff) | |
download | micropython-376618cd8ad322f5a8fa77dac7d202f451481688.tar.gz micropython-376618cd8ad322f5a8fa77dac7d202f451481688.zip |
tests/class_inplace_op: Test for inplace op fallback to normal one.
-rw-r--r-- | tests/basics/class_inplace_op.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/basics/class_inplace_op.py b/tests/basics/class_inplace_op.py new file mode 100644 index 0000000000..62aad8c7cf --- /dev/null +++ b/tests/basics/class_inplace_op.py @@ -0,0 +1,47 @@ +# Case 1: Immutable object (e.g. number-like) +# __iadd__ should not be defined, will be emulated using __add__ + +class A: + + def __init__(self, v): + self.v = v + + def __add__(self, o): + return A(self.v + o.v) + + def __repr__(self): + return "A(%s)" % self.v + +a = A(5) +b = a +a += A(3) +print(a) +# Should be original a's value, i.e. A(5) +print(b) + +# Case 2: Mutable object (e.g. list-like) +# __iadd__ should be defined + +class L: + + def __init__(self, v): + self.v = v + + def __add__(self, o): + # Should not be caled in this test + print("L.__add__") + return L(self.v + o.v) + + def __iadd__(self, o): + self.v += o.v + return self + + def __repr__(self): + return "L(%s)" % self.v + +c = L([1, 2]) +d = c +c += L([3, 4]) +print(c) +# Should be updated c's value, i.e. L([1, 2, 3, 4]) +print(d) |