[pypy-commit] pypy py3.6: merge default
cfbolz
pypy.commits at gmail.com
Thu Jan 30 06:01:50 EST 2020
Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: py3.6
Changeset: r98600:75200e919c58
Date: 2020-01-30 11:59 +0100
http://bitbucket.org/pypy/pypy/changeset/75200e919c58/
Log: merge default
diff --git a/pypy/objspace/std/setobject.py b/pypy/objspace/std/setobject.py
--- a/pypy/objspace/std/setobject.py
+++ b/pypy/objspace/std/setobject.py
@@ -247,10 +247,16 @@
return space.w_NotImplemented
return self.difference(w_other)
+ def descr_rsub(self, space, w_other):
+ if not isinstance(w_other, W_BaseSetObject):
+ return space.w_NotImplemented
+ return w_other.difference(self)
+
def descr_and(self, space, w_other):
if not isinstance(w_other, W_BaseSetObject):
return space.w_NotImplemented
return self.intersect(w_other)
+ descr_rand = descr_and # symmetric
def descr_or(self, space, w_other):
if not isinstance(w_other, W_BaseSetObject):
@@ -258,11 +264,13 @@
w_copy = self.copy_real()
w_copy.update(w_other)
return w_copy
+ descr_ror = descr_or # symmetric
def descr_xor(self, space, w_other):
if not isinstance(w_other, W_BaseSetObject):
return space.w_NotImplemented
return self.symmetric_difference(w_other)
+ descr_rxor = descr_xor # symmetric
def descr_inplace_sub(self, space, w_other):
if not isinstance(w_other, W_BaseSetObject):
@@ -528,9 +536,13 @@
__iter__ = gateway.interp2app(W_BaseSetObject.descr_iter),
__contains__ = gateway.interp2app(W_BaseSetObject.descr_contains),
__sub__ = gateway.interp2app(W_BaseSetObject.descr_sub),
+ __rsub__ = gateway.interp2app(W_BaseSetObject.descr_rsub),
__and__ = gateway.interp2app(W_BaseSetObject.descr_and),
+ __rand__ = gateway.interp2app(W_BaseSetObject.descr_rand),
__or__ = gateway.interp2app(W_BaseSetObject.descr_or),
+ __ror__ = gateway.interp2app(W_BaseSetObject.descr_ror),
__xor__ = gateway.interp2app(W_BaseSetObject.descr_xor),
+ __rxor__ = gateway.interp2app(W_BaseSetObject.descr_rxor),
# mutating operators
__isub__ = gateway.interp2app(W_BaseSetObject.descr_inplace_sub),
@@ -644,9 +656,13 @@
__iter__ = gateway.interp2app(W_BaseSetObject.descr_iter),
__contains__ = gateway.interp2app(W_BaseSetObject.descr_contains),
__sub__ = gateway.interp2app(W_BaseSetObject.descr_sub),
+ __rsub__ = gateway.interp2app(W_BaseSetObject.descr_rsub),
__and__ = gateway.interp2app(W_BaseSetObject.descr_and),
+ __rand__ = gateway.interp2app(W_BaseSetObject.descr_rand),
__or__ = gateway.interp2app(W_BaseSetObject.descr_or),
+ __ror__ = gateway.interp2app(W_BaseSetObject.descr_ror),
__xor__ = gateway.interp2app(W_BaseSetObject.descr_xor),
+ __rxor__ = gateway.interp2app(W_BaseSetObject.descr_rxor),
# non-mutating methods
__reduce__ = gateway.interp2app(W_BaseSetObject.descr_reduce),
diff --git a/pypy/objspace/std/test/test_setobject.py b/pypy/objspace/std/test/test_setobject.py
--- a/pypy/objspace/std/test/test_setobject.py
+++ b/pypy/objspace/std/test/test_setobject.py
@@ -650,6 +650,40 @@
assert type(t) is base
assert not hasattr(t, 'x')
+ def test_reverse_ops(self):
+ assert set.__rxor__
+ assert frozenset.__rxor__
+ assert set.__ror__
+ assert frozenset.__ror__
+ assert set.__rand__
+ assert frozenset.__rand__
+ assert set.__rsub__
+ assert frozenset.__rsub__
+
+ # actual behaviour test
+ for base in [set, frozenset]:
+ class S(base):
+ def __xor__(self, other):
+ if type(other) is not S:
+ return NotImplemented
+ return 1
+ __or__ = __and__ = __sub__ = __xor__
+ assert S([1, 2, 3]) ^ S([2, 3, 4]) == 1
+ assert S([1, 2, 3]) ^ {2, 3, 4} == {1, 4}
+ assert {1, 2, 3} ^ S([2, 3, 4]) == {1, 4}
+
+ assert S([1, 2, 3]) & S([2, 3, 4]) == 1
+ assert S([1, 2, 3]) & {2, 3, 4} == {2, 3}
+ assert {1, 2, 3} & S([2, 3, 4]) == {2, 3}
+
+ assert S([1, 2, 3]) | S([2, 3, 4]) == 1
+ assert S([1, 2, 3]) | {2, 3, 4} == {1, 2, 3, 4}
+ assert {1, 2, 3} | S([2, 3, 4]) == {1, 2, 3, 4}
+
+ assert S([1, 2, 3]) - S([2, 3, 4]) == 1
+ assert S([1, 2, 3]) - {2, 3, 4} == {1}
+ assert {1, 2, 3} - S([2, 3, 4]) == {1}
+
def test_isdisjoint(self):
assert set([1,2,3]).isdisjoint(set([4,5,6]))
assert set([1,2,3]).isdisjoint(frozenset([4,5,6]))
More information about the pypy-commit
mailing list