File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -659,8 +659,6 @@ def test_dictview_set_operations_on_keys(self):
659659 self .assertEqual (k1 ^ k2 , {3 })
660660 self .assertEqual (k1 ^ k3 , {1 ,2 ,4 })
661661
662- # TODO: RUSTPYTHON
663- @unittest .expectedFailure
664662 def test_dictview_set_operations_on_items (self ):
665663 k1 = {1 :1 , 2 :2 }.items ()
666664 k2 = {1 :1 , 2 :2 , 3 :3 }.items ()
Original file line number Diff line number Diff line change @@ -926,6 +926,30 @@ impl PyDictItems {
926926 let inner = zelf. symmetric_difference ( other, vm) ?;
927927 Ok ( PySet { inner } )
928928 }
929+
930+ #[ pymethod( name = "__rand__" ) ]
931+ #[ pymethod( magic) ]
932+ fn and ( zelf : PyRef < Self > , other : ArgIterable , vm : & VirtualMachine ) -> PyResult < PySet > {
933+ let zelf = Self :: to_set ( zelf, vm) ?;
934+ let inner = zelf. intersection ( other, vm) ?;
935+ Ok ( PySet { inner } )
936+ }
937+
938+ #[ pymethod( name = "__ror__" ) ]
939+ #[ pymethod( magic) ]
940+ fn or ( zelf : PyRef < Self > , other : ArgIterable , vm : & VirtualMachine ) -> PyResult < PySet > {
941+ let zelf = Self :: to_set ( zelf, vm) ?;
942+ let inner = zelf. union ( other, vm) ?;
943+ Ok ( PySet { inner } )
944+ }
945+
946+ #[ pymethod( name = "__rsub__" ) ]
947+ #[ pymethod( magic) ]
948+ fn sub ( zelf : PyRef < Self > , other : ArgIterable , vm : & VirtualMachine ) -> PyResult < PySet > {
949+ let zelf = Self :: to_set ( zelf, vm) ?;
950+ let inner = zelf. difference ( other, vm) ?;
951+ Ok ( PySet { inner } )
952+ }
929953}
930954
931955pub ( crate ) fn init ( context : & PyContext ) {
Original file line number Diff line number Diff line change @@ -126,7 +126,7 @@ impl PySetInner {
126126 Ok ( true )
127127 }
128128
129- fn union ( & self , other : ArgIterable , vm : & VirtualMachine ) -> PyResult < PySetInner > {
129+ pub ( super ) fn union ( & self , other : ArgIterable , vm : & VirtualMachine ) -> PyResult < PySetInner > {
130130 let set = self . clone ( ) ;
131131 for item in other. iter ( vm) ? {
132132 set. add ( item?, vm) ?;
@@ -135,7 +135,11 @@ impl PySetInner {
135135 Ok ( set)
136136 }
137137
138- fn intersection ( & self , other : ArgIterable , vm : & VirtualMachine ) -> PyResult < PySetInner > {
138+ pub ( super ) fn intersection (
139+ & self ,
140+ other : ArgIterable ,
141+ vm : & VirtualMachine ,
142+ ) -> PyResult < PySetInner > {
139143 let set = PySetInner :: default ( ) ;
140144 for item in other. iter ( vm) ? {
141145 let obj = item?;
@@ -146,7 +150,11 @@ impl PySetInner {
146150 Ok ( set)
147151 }
148152
149- fn difference ( & self , other : ArgIterable , vm : & VirtualMachine ) -> PyResult < PySetInner > {
153+ pub ( super ) fn difference (
154+ & self ,
155+ other : ArgIterable ,
156+ vm : & VirtualMachine ,
157+ ) -> PyResult < PySetInner > {
150158 let set = self . copy ( ) ;
151159 for item in other. iter ( vm) ? {
152160 set. content . delete_if_exists ( vm, & item?) ?;
You can’t perform that action at this time.
0 commit comments