Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de>
Branch: py3.7
Changeset: r98606:c5c4cd76ef44
Date: 2020-01-30 14:45 +0100
http://bitbucket.org/pypy/pypy/changeset/c5c4cd76ef44/

Log:    merge py3.6

diff --git a/pypy/objspace/std/newformat.py b/pypy/objspace/std/newformat.py
--- a/pypy/objspace/std/newformat.py
+++ b/pypy/objspace/std/newformat.py
@@ -802,7 +802,7 @@
                     digits = self._upcase_string(digits)
                 out.append(digits)
             if spec.n_decimal:
-                out.append(self._lit(".")[0])
+                out.append(self._lit(self._loc_dec)[0])
             if spec.n_remainder:
                 out.append(num[to_remainder:])
             if spec.n_rpadding:
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_newformat.py 
b/pypy/objspace/std/test/test_newformat.py
--- a/pypy/objspace/std/test/test_newformat.py
+++ b/pypy/objspace/std/test/test_newformat.py
@@ -404,6 +404,24 @@
         finally:
             locale.setlocale(locale.LC_NUMERIC, 'C')
 
+    def test_locale_german(self):
+        import locale
+        for name in ['de_DE', 'de_DE.utf8']:
+            try:
+                locale.setlocale(locale.LC_NUMERIC, name)
+                break
+            except locale.Error:
+                pass
+        else:
+            skip("no german locale")
+        x = 1234.567890
+        try:
+            assert locale.format('%g', x, grouping=True) == '1.234,57'
+            assert format(x, 'n') == '1.234,57'
+            assert format(12345678901234, 'n') == '12.345.678.901.234'
+        finally:
+            locale.setlocale(locale.LC_NUMERIC, 'C')
+
     def test_dont_switch_to_g(self):
         skip("must fix when float formatting is figured out")
         assert len(format(1.1234e90, "f")) == 98
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]))
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to