mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Fix symmetric_difference
This commit is contained in:
1 parent
f21e35c31a
commit
be9d8a4a56
2 files changed
+9
-7
No files matched your search
@@ -172,7 +172,6 @@ class TestJointOps:
|
||||
else:
|
||||
self.fail("s-t did not screen-out general iterables")
|
||||
|
||||
@unittest.skip("TODO: RUSTPYTHON")
|
||||
def test_symmetric_difference(self):
|
||||
i = self.s.symmetric_difference(self.otherword)
|
||||
for c in self.letters:
|
||||
@@ -187,7 +186,6 @@ class TestJointOps:
|
||||
self.assertEqual(self.thetype('abcba').symmetric_difference(C('ccb')), set('a'))
|
||||
self.assertEqual(self.thetype('abcba').symmetric_difference(C('ef')), set('abcef'))
|
||||
|
||||
@unittest.skip("TODO: RUSTPYTHON")
|
||||
def test_xor(self):
|
||||
i = self.s.symmetric_difference(self.otherword)
|
||||
self.assertEqual(self.s ^ set(self.otherword), i)
|
||||
@@ -582,7 +580,6 @@ class TestSet(TestJointOps, unittest.TestCase):
|
||||
else:
|
||||
self.assertNotIn(c, self.s)
|
||||
|
||||
@unittest.skip("TODO: RUSTPYTHON")
|
||||
def test_symmetric_difference_update(self):
|
||||
retval = self.s.symmetric_difference_update(self.otherword)
|
||||
self.assertEqual(retval, None)
|
||||
|
||||
@@ -206,8 +206,11 @@ impl PySetInner {
|
||||
fn symmetric_difference(&self, other: PyIterable, vm: &VirtualMachine) -> PyResult<PySetInner> {
|
||||
let mut new_inner = self.clone();
|
||||
|
||||
for item in other.iter(vm)? {
|
||||
new_inner.content.delete_or_insert(vm, &item?, ())?
|
||||
// We want to remove duplicates in other
|
||||
let other_set = Self::new(other, vm)?;
|
||||
|
||||
for item in other_set.content.keys() {
|
||||
new_inner.content.delete_or_insert(vm, &item, ())?
|
||||
}
|
||||
|
||||
Ok(new_inner)
|
||||
@@ -322,8 +325,10 @@ impl PySetInner {
|
||||
vm: &VirtualMachine,
|
||||
) -> PyResult<()> {
|
||||
for iterable in others {
|
||||
for item in iterable.iter(vm)? {
|
||||
self.content.delete_or_insert(vm, &item?, ())?;
|
||||
// We want to remove duplicates in iterable
|
||||
let iterable_set = Self::new(iterable, vm)?;
|
||||
for item in iterable_set.content.keys() {
|
||||
self.content.delete_or_insert(vm, &item, ())?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
||||
Reference in new issue
Block a user