diff --git a/extra_tests/snippets/stdlib_array.py b/extra_tests/snippets/stdlib_array.py index cb10c981e..9d9f99695 100644 --- a/extra_tests/snippets/stdlib_array.py +++ b/extra_tests/snippets/stdlib_array.py @@ -112,3 +112,8 @@ assert str(a.__class__.__name__) == "array" # test arrayiterator name i = iter(a) assert str(i.__class__.__name__) == "arrayiterator" + +# teset array.__contains__ +a = array('B', [0]) +assert a.__contains__(0) +assert not a.__contains__(1) diff --git a/stdlib/src/array.rs b/stdlib/src/array.rs index 9e2411cb7..26f5cd39f 100644 --- a/stdlib/src/array.rs +++ b/stdlib/src/array.rs @@ -1160,6 +1160,23 @@ mod array { zelf.as_object().dict(), )) } + + #[pymethod(magic)] + fn contains(&self, value: PyObjectRef, vm: &VirtualMachine) -> bool { + let array = self.array.read(); + for element in array + .iter(vm) + .map(|x| x.expect("Expected to be checked by array.len() and read lock.")) + { + if let Ok(true) = + element.rich_compare_bool(value.as_object(), PyComparisonOp::Eq, vm) + { + return true; + } + } + + false + } } impl Comparable for PyArray {