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