[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