From 0527c4eae62a0aa22e4557353990ecce44c54a58 Mon Sep 17 00:00:00 2001 From: Moreal Date: Sun, 22 Jan 2023 17:11:21 +0900 Subject: [PATCH 1/2] Implement `array.array.__contains__` --- stdlib/src/array.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 { From a866d881e561cd2632bf1e2fdb860622cdbc8e1e Mon Sep 17 00:00:00 2001 From: Moreal Date: Mon, 23 Jan 2023 02:18:45 +0900 Subject: [PATCH 2/2] Add extra_tests for `array.__contains__` --- extra_tests/snippets/stdlib_array.py | 5 +++++ 1 file changed, 5 insertions(+) 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)