Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r97117:b14e43faf847 Date: 2019-08-09 15:20 +0200 http://bitbucket.org/pypy/pypy/changeset/b14e43faf847/
Log: merge heads diff --git a/pypy/objspace/std/test/apptest_longobject.py b/pypy/objspace/std/test/apptest_longobject.py new file mode 100644 --- /dev/null +++ b/pypy/objspace/std/test/apptest_longobject.py @@ -0,0 +1,409 @@ +from pytest import raises +import sys +import math +import operator + +def test_trunc(): + assert math.trunc(1L) == 1L + assert math.trunc(-1L) == -1L + +def test_add(): + x = 123L + assert int(x + 12443L) == 123 + 12443 + x = -20 + assert x + 2 + 3L + True == -14L + +def test_sub(): + assert int(58543L - 12332L) == 58543 - 12332 + assert int(58543L - 12332) == 58543 - 12332 + assert int(58543 - 12332L) == 58543 - 12332 + x = 237123838281233L + assert x * 12 == x * 12L + +def test_mul(): + x = 363L + assert x * 2 ** 40 == x << 40 + +def test_truediv(): + exec "from __future__ import division; a = 31415926L / 10000000L" + assert a == 3.1415926 + +def test_floordiv(): + x = 31415926L + a = x // 10000000L + assert a == 3L + +def test_int_floordiv(): + x = 3000L + a = x // 1000 + assert a == 3L + + x = 3000L + a = x // -1000 + assert a == -3L + + x = 3000L + raises(ZeroDivisionError, "x // 0") + + n = sys.maxint+1 + assert n / int(-n) == -1L + +def test_numerator_denominator(): + assert (1L).numerator == 1L + assert (1L).denominator == 1L + assert (42L).numerator == 42L + assert (42L).denominator == 1L + +def test_compare(): + Z = 0 + ZL = 0L + + assert Z == ZL + assert not (Z != ZL) + assert ZL == Z + assert not (ZL != Z) + assert Z <= ZL + assert not (Z < ZL) + assert ZL <= ZL + assert not (ZL < ZL) + + for BIG in (1L, 1L << 62, 1L << 9999): + assert not (Z == BIG) + assert Z != BIG + assert not (BIG == Z) + assert BIG != Z + assert not (ZL == BIG) + assert ZL != BIG + assert Z <= BIG + assert Z < BIG + assert not (BIG <= Z) + assert not (BIG < Z) + assert ZL <= BIG + assert ZL < BIG + assert not (BIG <= ZL) + assert not (BIG < ZL) + assert not (Z <= -BIG) + assert not (Z < -BIG) + assert -BIG <= Z + assert -BIG < Z + assert not (ZL <= -BIG) + assert not (ZL < -BIG) + assert -BIG <= ZL + assert -BIG < ZL + # + assert not (BIG < int(BIG)) + assert (BIG <= int(BIG)) + assert (BIG == int(BIG)) + assert not (BIG != int(BIG)) + assert not (BIG > int(BIG)) + assert (BIG >= int(BIG)) + # + assert (BIG < int(BIG)+1) + assert (BIG <= int(BIG)+1) + assert not (BIG == int(BIG)+1) + assert (BIG != int(BIG)+1) + assert not (BIG > int(BIG)+1) + assert not (BIG >= int(BIG)+1) + # + assert not (BIG < int(BIG)-1) + assert not (BIG <= int(BIG)-1) + assert not (BIG == int(BIG)-1) + assert (BIG != int(BIG)-1) + assert (BIG > int(BIG)-1) + assert (BIG >= int(BIG)-1) + # + assert not (int(BIG) < BIG) + assert (int(BIG) <= BIG) + assert (int(BIG) == BIG) + assert not (int(BIG) != BIG) + assert not (int(BIG) > BIG) + assert (int(BIG) >= BIG) + # + assert not (int(BIG)+1 < BIG) + assert not (int(BIG)+1 <= BIG) + assert not (int(BIG)+1 == BIG) + assert (int(BIG)+1 != BIG) + assert (int(BIG)+1 > BIG) + assert (int(BIG)+1 >= BIG) + # + assert (int(BIG)-1 < BIG) + assert (int(BIG)-1 <= BIG) + assert not (int(BIG)-1 == BIG) + assert (int(BIG)-1 != BIG) + assert not (int(BIG)-1 > BIG) + assert not (int(BIG)-1 >= BIG) + +def test_conversion(): + class long2(long): + pass + x = 1L + x = long2(x<<100) + y = int(x) + assert type(y) == long + assert type(+long2(5)) is long + assert type(long2(5) << 0) is long + assert type(long2(5) >> 0) is long + assert type(long2(5) + 0) is long + assert type(long2(5) - 0) is long + assert type(long2(5) * 1) is long + assert type(1 * long2(5)) is long + assert type(0 + long2(5)) is long + assert type(-long2(0)) is long + assert type(long2(5) // 1) is long + +def test_shift(): + assert 65l >> 2l == 16l + assert 65l >> 2 == 16l + assert 65 >> 2l == 16l + assert 65l << 2l == 65l * 4 + assert 65l << 2 == 65l * 4 + assert 65 << 2l == 65l * 4 + raises(ValueError, "1L << -1L") + raises(ValueError, "1L << -1") + raises(OverflowError, "1L << (2 ** 100)") + raises(ValueError, "1L >> -1L") + raises(ValueError, "1L >> -1") + raises(OverflowError, "1L >> (2 ** 100)") + +def test_pow(): + x = 0L + assert pow(x, 0L, 1L) == 0L + assert pow(-1L, -1L) == -1.0 + assert pow(2 ** 68, 0.5) == 2.0 ** 34 + assert pow(2 ** 68, 2) == 2 ** 136 + raises(TypeError, pow, 2l, -1, 3) + raises(ValueError, pow, 2l, 5, 0) + + # some rpow tests + assert pow(0, 0L, 1L) == 0L + assert pow(-1, -1L) == -1.0 + +def test_int_pow(): + x = 2L + assert pow(x, 2) == 4L + assert pow(x, 2, 2) == 0L + assert pow(x, 2, 3L) == 1L + +def test_getnewargs(): + assert 0L .__getnewargs__() == (0L,) + assert (-1L) .__getnewargs__() == (-1L,) + +def test_divmod(): + def check_division(x, y): + q, r = divmod(x, y) + pab, pba = x*y, y*x + assert pab == pba + assert q == x // y + assert r == x % y + assert x == q*y + r + if y > 0: + assert 0 <= r < y + else: + assert y < r <= 0 + for x in [-1L, 0L, 1L, 2L ** 100 - 1, -2L ** 100 - 1]: + for y in [-105566530L, -1L, 1L, 1034522340L]: + print "checking division for %s, %s" % (x, y) + check_division(x, y) + check_division(x, int(y)) + check_division(int(x), y) + # special case from python tests: + s1 = 33 + s2 = 2 + x = 16565645174462751485571442763871865344588923363439663038777355323778298703228675004033774331442052275771343018700586987657790981527457655176938756028872904152013524821759375058141439 + x >>= s1*16 + y = 10953035502453784575 + y >>= s2*16 + x = 0x3FE0003FFFFC0001FFFL + y = 0x9800FFC1L + check_division(x, y) + raises(ZeroDivisionError, "x // 0L") + raises(ZeroDivisionError, "x % 0L") + raises(ZeroDivisionError, divmod, x, 0L) + raises(ZeroDivisionError, "x // 0") + raises(ZeroDivisionError, "x % 0") + raises(ZeroDivisionError, divmod, x, 0) + +def test_int_divmod(): + q, r = divmod(100L, 11) + assert q == 9L + assert r == 1L + +def test_format(): + assert repr(12345678901234567890) == '12345678901234567890L' + assert str(12345678901234567890) == '12345678901234567890' + assert hex(0x1234567890ABCDEFL) == '0x1234567890abcdefL' + assert oct(01234567012345670L) == '01234567012345670L' + +def test_bits(): + x = 0xAAAAAAAAL + assert x | 0x55555555L == 0xFFFFFFFFL + assert x & 0x55555555L == 0x00000000L + assert x ^ 0x55555555L == 0xFFFFFFFFL + assert -x | 0x55555555L == -0xAAAAAAA9L + assert x | 0x555555555L == 0x5FFFFFFFFL + assert x & 0x555555555L == 0x000000000L + assert x ^ 0x555555555L == 0x5FFFFFFFFL + +def test_hash(): + # ints have the same hash as equal longs + for i in range(-4, 14): + assert hash(i) == hash(long(i)) == long(i).__hash__() + # might check too much -- it's ok to change the hashing algorithm + assert hash(123456789L) == 123456789 + assert hash(1234567890123456789L) in ( + -1895067127, # with 32-bit platforms + 1234567890123456789) # with 64-bit platforms + +def test_math_log(): + raises(ValueError, math.log, 0L) + raises(ValueError, math.log, -1L) + raises(ValueError, math.log, -2L) + raises(ValueError, math.log, -(1L << 10000)) + #raises(ValueError, math.log, 0) + raises(ValueError, math.log, -1) + raises(ValueError, math.log, -2) + +def test_long(): + n = -sys.maxint-1 + assert long(n) == n + assert str(long(n)) == str(n) + a = buffer('123') + assert long(a) == 123L + +def test_huge_longs(): + x = 1L + huge = x << 40000L + raises(OverflowError, float, huge) + raises(OverflowError, operator.truediv, huge, 3) + raises(OverflowError, operator.truediv, huge, 3L) + +def test_just_trunc(): + class myint(object): + def __trunc__(self): + return 42 + assert long(myint()) == 42 + +def test_override___long__(): + class mylong(long): + def __long__(self): + return 42L + assert long(mylong(21)) == 42L + class myotherlong(long): + pass + assert long(myotherlong(21)) == 21L + +def test___long__(): + class A(object): + def __long__(self): + return 42 + assert long(A()) == 42L + class B(object): + def __int__(self): + return 42 + raises(TypeError, long, B()) + + class LongSubclass(long): + pass + class ReturnsLongSubclass(object): + def __long__(self): + return LongSubclass(42L) + n = long(ReturnsLongSubclass()) + assert n == 42 + assert type(n) is LongSubclass + +def test_trunc_returns(): + # but!: (blame CPython 2.7) + class Integral(object): + def __int__(self): + return 42 + class TruncReturnsNonLong(object): + def __trunc__(self): + return Integral() + n = long(TruncReturnsNonLong()) + assert type(n) is long + assert n == 42 + + class LongSubclass(long): + pass + class TruncReturnsNonInt(object): + def __trunc__(self): + return LongSubclass(42) + n = long(TruncReturnsNonInt()) + assert n == 42 + assert type(n) is LongSubclass + +def test_long_before_string(): + class A(str): + def __long__(self): + return 42 + assert long(A('abc')) == 42 + +def test_long_errors(): + raises(TypeError, long, 12, 12) + raises(ValueError, long, 'xxxxxx?', 12) + +def test_conjugate(): + assert (7L).conjugate() == 7L + assert (-7L).conjugate() == -7L + + class L(long): + pass + + assert type(L(7).conjugate()) is long + + class L(long): + def __pos__(self): + return 43 + assert L(7).conjugate() == 7L + +def test_bit_length(): + assert 8L.bit_length() == 4 + assert (-1<<40).bit_length() == 41 + assert ((2**31)-1).bit_length() == 31 + +def test_negative_zero(): + x = eval("-0L") + assert x == 0L + +def test_mix_int_and_long(): + class IntLongMixClass(object): + def __int__(self): + return 42L + + def __long__(self): + return 64 + + mixIntAndLong = IntLongMixClass() + as_long = long(mixIntAndLong) + assert type(as_long) is long + assert as_long == 64 + +def test_long_real(): + class A(long): pass + b = A(5).real + assert type(b) is long + +def test__int__(): + class A(long): + def __int__(self): + return 42 + + assert int(long(3)) == long(3) + assert int(A(13)) == 42 + +def test_long_error_msg(): + e = raises(TypeError, long, []) + assert str(e.value) == ( + "long() argument must be a string or a number, not 'list'") + +def test_coerce(): + assert 3L.__coerce__(4L) == (3L, 4L) + assert 3L.__coerce__(4) == (3, 4) + assert 3L.__coerce__(object()) == NotImplemented + +def test_linear_long_base_16(): + # never finishes if long(_, 16) is not linear-time + size = 100000 + n = "a" * size + expected = (2 << (size * 4)) // 3 + assert long(n, 16) == expected diff --git a/pypy/objspace/std/test/test_longobject.py b/pypy/objspace/std/test/test_longobject.py --- a/pypy/objspace/std/test/test_longobject.py +++ b/pypy/objspace/std/test/test_longobject.py @@ -1,4 +1,3 @@ -import py from pypy.objspace.std import longobject as lobj from rpython.rlib.rbigint import rbigint @@ -36,417 +35,3 @@ x &= r.MASK w_obj = space.newlong_from_rarith_int(r(x)) assert space.bigint_w(w_obj).eq(rbigint.fromlong(x)) - - -class AppTestLong: - def test_trunc(self): - import math - assert math.trunc(1L) == 1L - assert math.trunc(-1L) == -1L - - def test_add(self): - x = 123L - assert int(x + 12443L) == 123 + 12443 - x = -20 - assert x + 2 + 3L + True == -14L - - def test_sub(self): - assert int(58543L - 12332L) == 58543 - 12332 - assert int(58543L - 12332) == 58543 - 12332 - assert int(58543 - 12332L) == 58543 - 12332 - x = 237123838281233L - assert x * 12 == x * 12L - - def test_mul(self): - x = 363L - assert x * 2 ** 40 == x << 40 - - def test_truediv(self): - exec "from __future__ import division; a = 31415926L / 10000000L" - assert a == 3.1415926 - - def test_floordiv(self): - x = 31415926L - a = x // 10000000L - assert a == 3L - - def test_int_floordiv(self): - import sys - - x = 3000L - a = x // 1000 - assert a == 3L - - x = 3000L - a = x // -1000 - assert a == -3L - - x = 3000L - raises(ZeroDivisionError, "x // 0") - - n = sys.maxint+1 - assert n / int(-n) == -1L - - def test_numerator_denominator(self): - assert (1L).numerator == 1L - assert (1L).denominator == 1L - assert (42L).numerator == 42L - assert (42L).denominator == 1L - - def test_compare(self): - Z = 0 - ZL = 0L - - assert Z == ZL - assert not (Z != ZL) - assert ZL == Z - assert not (ZL != Z) - assert Z <= ZL - assert not (Z < ZL) - assert ZL <= ZL - assert not (ZL < ZL) - - for BIG in (1L, 1L << 62, 1L << 9999): - assert not (Z == BIG) - assert Z != BIG - assert not (BIG == Z) - assert BIG != Z - assert not (ZL == BIG) - assert ZL != BIG - assert Z <= BIG - assert Z < BIG - assert not (BIG <= Z) - assert not (BIG < Z) - assert ZL <= BIG - assert ZL < BIG - assert not (BIG <= ZL) - assert not (BIG < ZL) - assert not (Z <= -BIG) - assert not (Z < -BIG) - assert -BIG <= Z - assert -BIG < Z - assert not (ZL <= -BIG) - assert not (ZL < -BIG) - assert -BIG <= ZL - assert -BIG < ZL - # - assert not (BIG < int(BIG)) - assert (BIG <= int(BIG)) - assert (BIG == int(BIG)) - assert not (BIG != int(BIG)) - assert not (BIG > int(BIG)) - assert (BIG >= int(BIG)) - # - assert (BIG < int(BIG)+1) - assert (BIG <= int(BIG)+1) - assert not (BIG == int(BIG)+1) - assert (BIG != int(BIG)+1) - assert not (BIG > int(BIG)+1) - assert not (BIG >= int(BIG)+1) - # - assert not (BIG < int(BIG)-1) - assert not (BIG <= int(BIG)-1) - assert not (BIG == int(BIG)-1) - assert (BIG != int(BIG)-1) - assert (BIG > int(BIG)-1) - assert (BIG >= int(BIG)-1) - # - assert not (int(BIG) < BIG) - assert (int(BIG) <= BIG) - assert (int(BIG) == BIG) - assert not (int(BIG) != BIG) - assert not (int(BIG) > BIG) - assert (int(BIG) >= BIG) - # - assert not (int(BIG)+1 < BIG) - assert not (int(BIG)+1 <= BIG) - assert not (int(BIG)+1 == BIG) - assert (int(BIG)+1 != BIG) - assert (int(BIG)+1 > BIG) - assert (int(BIG)+1 >= BIG) - # - assert (int(BIG)-1 < BIG) - assert (int(BIG)-1 <= BIG) - assert not (int(BIG)-1 == BIG) - assert (int(BIG)-1 != BIG) - assert not (int(BIG)-1 > BIG) - assert not (int(BIG)-1 >= BIG) - - def test_conversion(self): - class long2(long): - pass - x = 1L - x = long2(x<<100) - y = int(x) - assert type(y) == long - assert type(+long2(5)) is long - assert type(long2(5) << 0) is long - assert type(long2(5) >> 0) is long - assert type(long2(5) + 0) is long - assert type(long2(5) - 0) is long - assert type(long2(5) * 1) is long - assert type(1 * long2(5)) is long - assert type(0 + long2(5)) is long - assert type(-long2(0)) is long - assert type(long2(5) // 1) is long - - def test_shift(self): - assert 65l >> 2l == 16l - assert 65l >> 2 == 16l - assert 65 >> 2l == 16l - assert 65l << 2l == 65l * 4 - assert 65l << 2 == 65l * 4 - assert 65 << 2l == 65l * 4 - raises(ValueError, "1L << -1L") - raises(ValueError, "1L << -1") - raises(OverflowError, "1L << (2 ** 100)") - raises(ValueError, "1L >> -1L") - raises(ValueError, "1L >> -1") - raises(OverflowError, "1L >> (2 ** 100)") - - def test_pow(self): - x = 0L - assert pow(x, 0L, 1L) == 0L - assert pow(-1L, -1L) == -1.0 - assert pow(2 ** 68, 0.5) == 2.0 ** 34 - assert pow(2 ** 68, 2) == 2 ** 136 - raises(TypeError, pow, 2l, -1, 3) - raises(ValueError, pow, 2l, 5, 0) - - # some rpow tests - assert pow(0, 0L, 1L) == 0L - assert pow(-1, -1L) == -1.0 - - def test_int_pow(self): - x = 2L - assert pow(x, 2) == 4L - assert pow(x, 2, 2) == 0L - assert pow(x, 2, 3L) == 1L - - def test_getnewargs(self): - assert 0L .__getnewargs__() == (0L,) - assert (-1L) .__getnewargs__() == (-1L,) - - def test_divmod(self): - def check_division(x, y): - q, r = divmod(x, y) - pab, pba = x*y, y*x - assert pab == pba - assert q == x // y - assert r == x % y - assert x == q*y + r - if y > 0: - assert 0 <= r < y - else: - assert y < r <= 0 - for x in [-1L, 0L, 1L, 2L ** 100 - 1, -2L ** 100 - 1]: - for y in [-105566530L, -1L, 1L, 1034522340L]: - print "checking division for %s, %s" % (x, y) - check_division(x, y) - check_division(x, int(y)) - check_division(int(x), y) - # special case from python tests: - s1 = 33 - s2 = 2 - x = 16565645174462751485571442763871865344588923363439663038777355323778298703228675004033774331442052275771343018700586987657790981527457655176938756028872904152013524821759375058141439 - x >>= s1*16 - y = 10953035502453784575 - y >>= s2*16 - x = 0x3FE0003FFFFC0001FFFL - y = 0x9800FFC1L - check_division(x, y) - raises(ZeroDivisionError, "x // 0L") - raises(ZeroDivisionError, "x % 0L") - raises(ZeroDivisionError, divmod, x, 0L) - raises(ZeroDivisionError, "x // 0") - raises(ZeroDivisionError, "x % 0") - raises(ZeroDivisionError, divmod, x, 0) - - def test_int_divmod(self): - q, r = divmod(100L, 11) - assert q == 9L - assert r == 1L - - def test_format(self): - assert repr(12345678901234567890) == '12345678901234567890L' - assert str(12345678901234567890) == '12345678901234567890' - assert hex(0x1234567890ABCDEFL) == '0x1234567890abcdefL' - assert oct(01234567012345670L) == '01234567012345670L' - - def test_bits(self): - x = 0xAAAAAAAAL - assert x | 0x55555555L == 0xFFFFFFFFL - assert x & 0x55555555L == 0x00000000L - assert x ^ 0x55555555L == 0xFFFFFFFFL - assert -x | 0x55555555L == -0xAAAAAAA9L - assert x | 0x555555555L == 0x5FFFFFFFFL - assert x & 0x555555555L == 0x000000000L - assert x ^ 0x555555555L == 0x5FFFFFFFFL - - def test_hash(self): - # ints have the same hash as equal longs - for i in range(-4, 14): - assert hash(i) == hash(long(i)) == long(i).__hash__() - # might check too much -- it's ok to change the hashing algorithm - assert hash(123456789L) == 123456789 - assert hash(1234567890123456789L) in ( - -1895067127, # with 32-bit platforms - 1234567890123456789) # with 64-bit platforms - - def test_math_log(self): - import math - raises(ValueError, math.log, 0L) - raises(ValueError, math.log, -1L) - raises(ValueError, math.log, -2L) - raises(ValueError, math.log, -(1L << 10000)) - #raises(ValueError, math.log, 0) - raises(ValueError, math.log, -1) - raises(ValueError, math.log, -2) - - def test_long(self): - import sys - n = -sys.maxint-1 - assert long(n) == n - assert str(long(n)) == str(n) - a = buffer('123') - assert long(a) == 123L - - def test_huge_longs(self): - import operator - x = 1L - huge = x << 40000L - raises(OverflowError, float, huge) - raises(OverflowError, operator.truediv, huge, 3) - raises(OverflowError, operator.truediv, huge, 3L) - - def test_just_trunc(self): - class myint(object): - def __trunc__(self): - return 42 - assert long(myint()) == 42 - - def test_override___long__(self): - class mylong(long): - def __long__(self): - return 42L - assert long(mylong(21)) == 42L - class myotherlong(long): - pass - assert long(myotherlong(21)) == 21L - - def test___long__(self): - class A(object): - def __long__(self): - return 42 - assert long(A()) == 42L - class B(object): - def __int__(self): - return 42 - raises(TypeError, long, B()) - - class LongSubclass(long): - pass - class ReturnsLongSubclass(object): - def __long__(self): - return LongSubclass(42L) - n = long(ReturnsLongSubclass()) - assert n == 42 - assert type(n) is LongSubclass - - def test_trunc_returns(self): - # but!: (blame CPython 2.7) - class Integral(object): - def __int__(self): - return 42 - class TruncReturnsNonLong(object): - def __trunc__(self): - return Integral() - n = long(TruncReturnsNonLong()) - assert type(n) is long - assert n == 42 - - class LongSubclass(long): - pass - class TruncReturnsNonInt(object): - def __trunc__(self): - return LongSubclass(42) - n = long(TruncReturnsNonInt()) - assert n == 42 - assert type(n) is LongSubclass - - def test_long_before_string(self): - class A(str): - def __long__(self): - return 42 - assert long(A('abc')) == 42 - - def test_long_errors(self): - raises(TypeError, long, 12, 12) - raises(ValueError, long, 'xxxxxx?', 12) - - def test_conjugate(self): - assert (7L).conjugate() == 7L - assert (-7L).conjugate() == -7L - - class L(long): - pass - - assert type(L(7).conjugate()) is long - - class L(long): - def __pos__(self): - return 43 - assert L(7).conjugate() == 7L - - def test_bit_length(self): - assert 8L.bit_length() == 4 - assert (-1<<40).bit_length() == 41 - assert ((2**31)-1).bit_length() == 31 - - def test_negative_zero(self): - x = eval("-0L") - assert x == 0L - - def test_mix_int_and_long(self): - class IntLongMixClass(object): - def __int__(self): - return 42L - - def __long__(self): - return 64 - - mixIntAndLong = IntLongMixClass() - as_long = long(mixIntAndLong) - assert type(as_long) is long - assert as_long == 64 - - def test_long_real(self): - class A(long): pass - b = A(5).real - assert type(b) is long - - def test__int__(self): - class A(long): - def __int__(self): - return 42 - - assert int(long(3)) == long(3) - assert int(A(13)) == 42 - - def test_long_error_msg(self): - e = raises(TypeError, long, []) - assert str(e.value) == ( - "long() argument must be a string or a number, not 'list'") - - def test_coerce(self): - assert 3L.__coerce__(4L) == (3L, 4L) - assert 3L.__coerce__(4) == (3, 4) - assert 3L.__coerce__(object()) == NotImplemented - - def test_linear_long_base_16(self): - # never finishes if long(_, 16) is not linear-time - size = 100000 - n = "a" * size - expected = (2 << (size * 4)) // 3 - assert long(n, 16) == expected - _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit