Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
updated intersection_update and difference_update
  • Loading branch information
branai committed Jan 6, 2023
commit 2c6a44db84cf14673a05f920b1164c8d8e2bf747
26 changes: 15 additions & 11 deletions vm/src/builtins/set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -383,16 +383,15 @@ impl PySetInner {
others: impl std::iter::Iterator<Item = ArgIterable>,
vm: &VirtualMachine,
) -> PyResult<()> {
let mut temp_inner = self.copy();
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)?;
// For each set in other
// remove all elements from LHS (self) that are not in set
for other_set_iter in others {
let other_set = Self::from_iter(other_set_iter.iter(vm)?, vm)?;
for item in self.elements().into_iter() {
if !other_set.contains(&item, vm)? {
self.remove(item, vm)?;
}
}
temp_inner = self.copy()
}
Ok(())
}
Expand All @@ -402,9 +401,14 @@ impl PySetInner {
others: impl std::iter::Iterator<Item = ArgIterable>,
vm: &VirtualMachine,
) -> PyResult<()> {
for iterable in others {
for item in iterable.iter(vm)? {
self.content.delete_if_exists(vm, &*item?)?;
// For each set in other
// remove all elements from LHS (self) that are also in set
for other_set_iter in others {
let other_set = Self::from_iter(other_set_iter.iter(vm)?, vm)?;
for item in self.elements().into_iter() {
if other_set.contains(&item, vm)? {
self.remove(item, vm)?;
}
}
}
Ok(())
Expand Down