Author: Armin Rigo <ar...@tunes.org> Branch: ffi-backend Changeset: r55823:20d7d5c1e9e1 Date: 2012-06-25 18:29 +0200 http://bitbucket.org/pypy/pypy/changeset/20d7d5c1e9e1/
Log: Test and fix. diff --git a/pypy/module/_ffi_backend/misc.py b/pypy/module/_ffi_backend/misc.py --- a/pypy/module/_ffi_backend/misc.py +++ b/pypy/module/_ffi_backend/misc.py @@ -103,8 +103,7 @@ try: return bigint.tolonglong() except OverflowError: - raise OperationError(space.w_OverflowError, - space.wrap("long too big to convert")) + raise OperationError(space.w_OverflowError, space.wrap(ovf_msg)) def as_unsigned_long_long(space, w_ob, strict): # (possibly) convert and cast a Python object to an unsigned long long. @@ -129,7 +128,10 @@ return bigint.toulonglong() except ValueError: raise OperationError(space.w_OverflowError, space.wrap(neg_msg)) + except OverflowError: + raise OperationError(space.w_OverflowError, space.wrap(ovf_msg)) else: return bigint.ulonglongmask() neg_msg = "can't convert negative number to unsigned" +ovf_msg = "long too big to convert" diff --git a/pypy/module/_ffi_backend/test/_backend_test_c.py b/pypy/module/_ffi_backend/test/_backend_test_c.py --- a/pypy/module/_ffi_backend/test/_backend_test_c.py +++ b/pypy/module/_ffi_backend/test/_backend_test_c.py @@ -188,6 +188,27 @@ assert int(cast(p, 4.2)) == 4 py.test.raises(TypeError, newp, new_pointer_type(p), 4.2) +def test_newp_integer_types(): + for name in ['signed char', 'short', 'int', 'long', 'long long']: + p = new_primitive_type(name) + pp = new_pointer_type(p) + size = sizeof(p) + min = -(1 << (8*size-1)) + max = (1 << (8*size-1)) - 1 + assert newp(pp, min)[0] == min + assert newp(pp, max)[0] == max + py.test.raises(OverflowError, newp, pp, min - 1) + py.test.raises(OverflowError, newp, pp, max + 1) + for name in ['char', 'short', 'int', 'long', 'long long']: + p = new_primitive_type('unsigned ' + name) + pp = new_pointer_type(p) + size = sizeof(p) + max = (1 << (8*size)) - 1 + assert newp(pp, 0)[0] == 0 + assert newp(pp, max)[0] == max + py.test.raises(OverflowError, newp, pp, -1) + py.test.raises(OverflowError, newp, pp, max + 1) + def test_reading_pointer_to_char(): BChar = new_primitive_type("char") py.test.raises(TypeError, newp, BChar, None) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit