[pypy-svn] commit/pypy: arigo: Write test for all T_xxx modifiers. Fix two bugs.
Bitbucket
commits-noreply at bitbucket.org
Sun Dec 19 17:16:09 CET 2010
1 new changeset in pypy:
http://bitbucket.org/pypy/pypy/changeset/613b8b66fa1c/
changeset: r40133:613b8b66fa1c
user: arigo
date: 2010-12-19 17:14:53
summary: Write test for all T_xxx modifiers. Fix two bugs.
affected #: 3 files (2.3 KB)
--- a/pypy/module/cpyext/structmember.py Sun Dec 19 16:22:15 2010 +0100
+++ b/pypy/module/cpyext/structmember.py Sun Dec 19 17:14:53 2010 +0100
@@ -21,7 +21,7 @@
(T_USHORT, rffi.USHORT, PyInt_AsUnsignedLong),
(T_UINT, rffi.UINT, PyInt_AsUnsignedLong),
(T_ULONG, rffi.ULONG, PyInt_AsUnsignedLong),
- (T_BYTE, rffi.UCHAR, PyInt_AsLong),
+ (T_BYTE, rffi.SIGNEDCHAR, PyInt_AsLong),
(T_UBYTE, rffi.UCHAR, PyInt_AsUnsignedLong),
(T_BOOL, rffi.UCHAR, PyInt_AsLong),
(T_FLOAT, rffi.FLOAT, PyFloat_AsDouble),
@@ -42,7 +42,10 @@
if typ == member_type:
result = rffi.cast(rffi.CArrayPtr(lltyp), addr)
if lltyp is rffi.FLOAT:
- w_result = space.wrap(rffi.cast(rffi.DOUBLE, result[0]))
+ w_result = space.wrap(lltype.cast_primitive(lltype.Float,
+ result[0]))
+ elif typ == T_BOOL:
+ w_result = space.wrap(result[0] != '\x00')
else:
w_result = space.wrap(result[0])
return w_result
--- a/pypy/module/cpyext/test/foo.c Sun Dec 19 16:22:15 2010 +0100
+++ b/pypy/module/cpyext/test/foo.c Sun Dec 19 17:14:53 2010 +0100
@@ -7,6 +7,18 @@
PyObject *foo_object;
char *foo_string;
char foo_string_inplace[5];
+ short foo_short;
+ long foo_long;
+ unsigned short foo_ushort;
+ unsigned int foo_uint;
+ unsigned long foo_ulong;
+ signed char foo_byte;
+ unsigned char foo_ubyte;
+ unsigned char foo_bool;
+ float foo_float;
+ double foo_double;
+ long long foo_longlong;
+ unsigned long long foo_ulonglong;
} fooobject;
static PyTypeObject footype;
@@ -148,6 +160,19 @@
{"string_member_inplace", T_STRING_INPLACE,
offsetof(fooobject, foo_string_inplace), 0, "An inplace string."},
{"char_member", T_CHAR, offsetof(fooobject, foo_string_inplace), 0, NULL},
+
+ {"short_member", T_SHORT, offsetof(fooobject, foo_short), 0, NULL},
+ {"long_member", T_LONG, offsetof(fooobject, foo_long), 0, NULL},
+ {"ushort_member", T_USHORT, offsetof(fooobject, foo_ushort), 0, NULL},
+ {"uint_member", T_UINT, offsetof(fooobject, foo_uint), 0, NULL},
+ {"ulong_member", T_ULONG, offsetof(fooobject, foo_ulong), 0, NULL},
+ {"byte_member", T_BYTE, offsetof(fooobject, foo_byte), 0, NULL},
+ {"ubyte_member", T_UBYTE, offsetof(fooobject, foo_ubyte), 0, NULL},
+ {"bool_member", T_BOOL, offsetof(fooobject, foo_bool), 0, NULL},
+ {"float_member", T_FLOAT, offsetof(fooobject, foo_float), 0, NULL},
+ {"double_member", T_DOUBLE, offsetof(fooobject, foo_double), 0, NULL},
+ {"longlong_member", T_LONGLONG, offsetof(fooobject, foo_longlong), 0, NULL},
+ {"ulonglong_member", T_ULONGLONG, offsetof(fooobject, foo_ulonglong), 0, NULL},
{NULL} /* Sentinel */
};
--- a/pypy/module/cpyext/test/test_typeobject.py Sun Dec 19 16:22:15 2010 +0100
+++ b/pypy/module/cpyext/test/test_typeobject.py Sun Dec 19 17:14:53 2010 +0100
@@ -95,6 +95,22 @@
assert obj.char_member == "a"
raises(TypeError, "obj.char_member = 'spam'")
raises(TypeError, "obj.char_member = 42")
+ #
+ import sys
+ bignum = sys.maxint - 42
+ obj.short_member = -12345; assert obj.short_member == -12345
+ obj.long_member = -bignum; assert obj.long_member == -bignum
+ obj.ushort_member = 45678; assert obj.ushort_member == 45678
+ obj.uint_member = 3000000000; assert obj.uint_member == 3000000000
+ obj.ulong_member = 2*bignum; assert obj.ulong_member == 2*bignum
+ obj.byte_member = -99; assert obj.byte_member == -99
+ obj.ubyte_member = 199; assert obj.ubyte_member == 199
+ obj.bool_member = True; assert obj.bool_member is True
+ obj.float_member = 9.25; assert obj.float_member == 9.25
+ obj.double_member = 9.25; assert obj.double_member == 9.25
+ obj.longlong_member = -2**59; assert obj.longlong_member == -2**59
+ obj.ulonglong_member = 2**63; assert obj.ulonglong_member == 2**63
+ #
self.cleanup_references()
def test_staticmethod(self):
Repository URL: https://bitbucket.org/pypy/pypy/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the Pypy-commit
mailing list