From 922d233faaa3df26cd2bbd7076b58bdde04bb10d Mon Sep 17 00:00:00 2001 From: Dolpheyn Date: Sat, 9 Oct 2021 07:53:38 +0800 Subject: [PATCH] Add rand, ror, rsub operators in dict_keys --- Lib/test/test_dict.py | 2 -- vm/src/builtins/dict.rs | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index 07c57e2d5..8aef739c0 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -642,8 +642,6 @@ class DictTest(unittest.TestCase): with self.assertRaises(RuntimeError): d3.items() > d2.items() - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_dictview_set_operations_on_keys(self): k1 = {1:1, 2:2}.keys() k2 = {1:1, 2:2, 3:3}.keys() diff --git a/vm/src/builtins/dict.rs b/vm/src/builtins/dict.rs index e22532f94..acf21f631 100644 --- a/vm/src/builtins/dict.rs +++ b/vm/src/builtins/dict.rs @@ -912,7 +912,39 @@ dict_view! { } #[pyimpl(with(DictView, Comparable, Iterable))] -impl PyDictKeys {} +impl PyDictKeys { + #[pymethod(name = "__rxor__")] + #[pymethod(magic)] + fn xor(zelf: PyRef, other: ArgIterable, vm: &VirtualMachine) -> PyResult { + let zelf = Self::to_set(zelf, vm)?; + let inner = zelf.symmetric_difference(other, vm)?; + Ok(PySet { inner }) + } + + #[pymethod(name = "__rand__")] + #[pymethod(magic)] + fn and(zelf: PyRef, other: ArgIterable, vm: &VirtualMachine) -> PyResult { + 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, other: ArgIterable, vm: &VirtualMachine) -> PyResult { + 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, other: ArgIterable, vm: &VirtualMachine) -> PyResult { + let zelf = Self::to_set(zelf, vm)?; + let inner = zelf.difference(other, vm)?; + Ok(PySet { inner }) + } +} #[pyimpl(with(DictView, Comparable, Iterable))] impl PyDictValues {}