mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-02 19:39:49 +09:00
Add rand, ror, rsub operators in dict_items, remove test annotation
This commit is contained in:
2
Lib/test/test_dict.py
vendored
2
Lib/test/test_dict.py
vendored
@@ -659,8 +659,6 @@ class DictTest(unittest.TestCase):
|
||||
self.assertEqual(k1 ^ k2, {3})
|
||||
self.assertEqual(k1 ^ k3, {1,2,4})
|
||||
|
||||
# TODO: RUSTPYTHON
|
||||
@unittest.expectedFailure
|
||||
def test_dictview_set_operations_on_items(self):
|
||||
k1 = {1:1, 2:2}.items()
|
||||
k2 = {1:1, 2:2, 3:3}.items()
|
||||
|
||||
@@ -926,6 +926,30 @@ impl PyDictItems {
|
||||
let inner = zelf.symmetric_difference(other, vm)?;
|
||||
Ok(PySet { inner })
|
||||
}
|
||||
|
||||
#[pymethod(name = "__rand__")]
|
||||
#[pymethod(magic)]
|
||||
fn and(zelf: PyRef<Self>, other: ArgIterable, vm: &VirtualMachine) -> PyResult<PySet> {
|
||||
let zelf = Self::to_set(zelf, vm)?;
|
||||
let inner = zelf.intersection(other, vm)?;
|
||||
Ok(PySet { inner })
|
||||
}
|
||||
|
||||
#[pymethod(name = "__ror__")]
|
||||
#[pymethod(magic)]
|
||||
fn or(zelf: PyRef<Self>, other: ArgIterable, vm: &VirtualMachine) -> PyResult<PySet> {
|
||||
let zelf = Self::to_set(zelf, vm)?;
|
||||
let inner = zelf.union(other, vm)?;
|
||||
Ok(PySet { inner })
|
||||
}
|
||||
|
||||
#[pymethod(name = "__rsub__")]
|
||||
#[pymethod(magic)]
|
||||
fn sub(zelf: PyRef<Self>, other: ArgIterable, vm: &VirtualMachine) -> PyResult<PySet> {
|
||||
let zelf = Self::to_set(zelf, vm)?;
|
||||
let inner = zelf.difference(other, vm)?;
|
||||
Ok(PySet { inner })
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn init(context: &PyContext) {
|
||||
|
||||
@@ -126,7 +126,7 @@ impl PySetInner {
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
fn union(&self, other: ArgIterable, vm: &VirtualMachine) -> PyResult<PySetInner> {
|
||||
pub(super) fn union(&self, other: ArgIterable, vm: &VirtualMachine) -> PyResult<PySetInner> {
|
||||
let set = self.clone();
|
||||
for item in other.iter(vm)? {
|
||||
set.add(item?, vm)?;
|
||||
@@ -135,7 +135,11 @@ impl PySetInner {
|
||||
Ok(set)
|
||||
}
|
||||
|
||||
fn intersection(&self, other: ArgIterable, vm: &VirtualMachine) -> PyResult<PySetInner> {
|
||||
pub(super) fn intersection(
|
||||
&self,
|
||||
other: ArgIterable,
|
||||
vm: &VirtualMachine,
|
||||
) -> PyResult<PySetInner> {
|
||||
let set = PySetInner::default();
|
||||
for item in other.iter(vm)? {
|
||||
let obj = item?;
|
||||
@@ -146,7 +150,11 @@ impl PySetInner {
|
||||
Ok(set)
|
||||
}
|
||||
|
||||
fn difference(&self, other: ArgIterable, vm: &VirtualMachine) -> PyResult<PySetInner> {
|
||||
pub(super) fn difference(
|
||||
&self,
|
||||
other: ArgIterable,
|
||||
vm: &VirtualMachine,
|
||||
) -> PyResult<PySetInner> {
|
||||
let set = self.copy();
|
||||
for item in other.iter(vm)? {
|
||||
set.content.delete_if_exists(vm, &item?)?;
|
||||
|
||||
Reference in New Issue
Block a user