diff options
author | Jon Bjarni Bjarnason <jbbjarnason@gmail.com> | 2022-04-12 22:17:38 +0000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2022-04-20 15:44:46 +1000 |
commit | 1ded8a2977a84777f339ea7e7c788b11d75a6cce (patch) | |
tree | c48babcbeea93711fabd3394013b8519f7f8c00c /tests | |
parent | 52c2580a403a8259eabcd1bd1f9911c0ac4efd4c (diff) | |
download | micropython-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')
-rw-r--r-- | tests/basics/class_contains.py | 24 |
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()) |