Author: Armin Rigo <ar...@tunes.org> Branch: gmp Changeset: r48272:d81a2c7c6ca1 Date: 2011-10-20 17:58 +0200 http://bitbucket.org/pypy/pypy/changeset/d81a2c7c6ca1/
Log: in-progress. diff --git a/pypy/rlib/_rbigint_gmp.py b/pypy/rlib/_rbigint_gmp.py --- a/pypy/rlib/_rbigint_gmp.py +++ b/pypy/rlib/_rbigint_gmp.py @@ -36,9 +36,15 @@ # ____________________________________________________________ +@specialize.argtype(0) def _fromint(value): r = lltype.malloc(RBIGINT) - mpz_init_set_si(r.mpz, value) + # + T = type(value) + if T is int or T is r_int: + mpz_init_set_si(r.mpz, value) + elif ... + return r def _str_base_10(r): @@ -60,6 +66,11 @@ return _fromint(int(b)) # maybe do some caching? @typeMethod + @specialize.argtype(1) + def fromrarith_int(RBIGINT, i): + return _fromint(widen(i)) + + @typeMethod def fromlong(RBIGINT, l): "NOT_RPYTHON" r = lltype.malloc(RBIGINT) diff --git a/pypy/rlib/test/test_rbigint_gmp.py b/pypy/rlib/test/test_rbigint_gmp.py --- a/pypy/rlib/test/test_rbigint_gmp.py +++ b/pypy/rlib/test/test_rbigint_gmp.py @@ -117,7 +117,6 @@ yield -s def bigint(lst, sign): - XXX for digit in lst: assert digit & MASK == digit # wrongly written test! return rbigint(map(_store_digit, lst), sign) @@ -126,6 +125,7 @@ class Test_rbigint(object): def test_args_from_long(self): + py.test.skip("not valid") BASE = 1 << SHIFT assert rbigint.fromlong(0).eq(bigint([0], 0)) assert rbigint.fromlong(17).eq(bigint([17], 1)) @@ -139,7 +139,17 @@ # assert rbigint.fromlong(-sys.maxint-1).eq( # rbigint.digits_for_most_neg_long(-sys.maxint-1), -1) + def test_args_from_int_simple(self): + IMAX = sys.maxint + LLMAX = r_longlong(2**63 - 1) + assert rbigint.fromrarith_int(-17).eq(rbigint.fromlong(-17)) + assert rbigint.fromrarith_int(IMAX).eq(rbigint.fromlong(IMAX)) + assert rbigint.fromrarith_int(LLMAX).eq(rbigint.fromlong(LLMAX)) + assert rbigint.fromrarith_int(-IMAX-1).eq(rbigint.fromlong(-IMAX)) + assert rbigint.fromrarith_int(-LLMAX-1).eq(rbigint.fromlong(-LLMAX-1)) + def test_args_from_int(self): + py.test.skip("not valid") BASE = 1 << SHIFT MAX = int(BASE-1) assert rbigint.fromrarith_int(0).eq(bigint([0], 0)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit