summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics
diff options
context:
space:
mode:
authorJon Bjarni Bjarnason <jbbjarnason@gmail.com>2022-04-12 22:17:38 +0000
committerDamien George <damien@micropython.org>2022-04-20 15:44:46 +1000
commit1ded8a2977a84777f339ea7e7c788b11d75a6cce (patch)
treec48babcbeea93711fabd3394013b8519f7f8c00c /tests/basics
parent52c2580a403a8259eabcd1bd1f9911c0ac4efd4c (diff)
downloadmicropython-1ded8a2977a84777f339ea7e7c788b11d75a6cce.tar.gz
micropython-1ded8a2977a84777f339ea7e7c788b11d75a6cce.zip
py/objtype: Convert result of user __contains__ method to bool.
Per https://docs.python.org/3/reference/expressions.html#membership-test-operations For user-defined classes which define the contains() method, x in y returns True if y.contains(x) returns a true value, and False otherwise. Fixes issue #7884.
Diffstat (limited to 'tests/basics')
-rw-r--r--tests/basics/class_contains.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/basics/class_contains.py b/tests/basics/class_contains.py
index b6dd3661cd..5fdb1db4c0 100644
--- a/tests/basics/class_contains.py
+++ b/tests/basics/class_contains.py
@@ -21,3 +21,27 @@ b = B([1, 2])
print(1 in b)
print(2 in b)
print(3 in b)
+
+
+class C:
+ def __contains__(self, arg):
+ return arg
+
+
+print(C().__contains__(0))
+print(C().__contains__(1))
+print(C().__contains__(''))
+print(C().__contains__('foo'))
+print(C().__contains__(None))
+
+print(0 in C())
+print(1 in C())
+print('' in C())
+print('foo' in C())
+print(None in C())
+
+print(0 not in C())
+print(1 not in C())
+print('' not in C())
+print('foo' not in C())
+print(None not in C())