Author: Armin Rigo <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit