diff --git a/Lib/test/test_weakset.py b/Lib/test/test_weakset.py index 587b17b34c..6c4cb05a5f 100644 --- a/Lib/test/test_weakset.py +++ b/Lib/test/test_weakset.py @@ -322,8 +322,6 @@ def test_ixor(self): else: self.assertNotIn(c, self.s) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_inplace_on_self(self): t = self.s.copy() t |= t diff --git a/vm/src/builtins/set.rs b/vm/src/builtins/set.rs index 65f4338bc6..fd001500d8 100644 --- a/vm/src/builtins/set.rs +++ b/vm/src/builtins/set.rs @@ -391,16 +391,10 @@ impl PySetInner { others: impl std::iter::Iterator, vm: &VirtualMachine, ) -> PyResult<()> { - let mut temp_inner = self.copy(); + let temp_inner = self.fold_op(others, PySetInner::intersection, vm)?; self.clear(); - for iterable in others { - for item in iterable.iter(vm)? { - let obj = item?; - if temp_inner.contains(&obj, vm)? { - self.add(obj, vm)?; - } - } - temp_inner = self.copy() + for obj in temp_inner.elements() { + self.add(obj, vm)?; } Ok(()) }