[pypy-commit] cffi default: Complete the tests

arigo noreply at buildbot.pypy.org
Tue Jun 26 10:02:38 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r512:785d80b94cfe
Date: 2012-06-25 21:08 +0200
http://bitbucket.org/cffi/cffi/changeset/785d80b94cfe/

Log:	Complete the tests

diff --git a/c/_ffi_backend.c b/c/_ffi_backend.c
--- a/c/_ffi_backend.c
+++ b/c/_ffi_backend.c
@@ -2909,11 +2909,11 @@
     PyObject *fargs;
     CTypeDescrObject *fresult;
     CTypeDescrObject *fct;
-    int ellipsis;
+    int ellipsis = 0;
     struct funcbuilder_s funcbuilder;
     Py_ssize_t i;
 
-    if (!PyArg_ParseTuple(args, "O!O!i:new_function_type",
+    if (!PyArg_ParseTuple(args, "O!O!|i:new_function_type",
                           &PyTuple_Type, &fargs,
                           &CTypeDescr_Type, &fresult,
                           &ellipsis))
diff --git a/c/test_c.py b/c/test_c.py
--- a/c/test_c.py
+++ b/c/test_c.py
@@ -964,12 +964,41 @@
     py.test.raises(OverflowError, newp, new_pointer_type(BUInt), -1)
     py.test.raises(OverflowError, newp, new_pointer_type(BUInt), 2**32)
 
-def test_newp_copying_struct_and_union():
+def test_newp_copying():
+    """Test that we can do newp(<type>, <cdata of the given type>) for most
+    types, with the exception of arrays, like in C.
+    """
     BInt = new_primitive_type("int")
+    p = newp(new_pointer_type(BInt), cast(BInt, 42))
+    assert p[0] == 42
+    #
+    BUInt = new_primitive_type("unsigned int")
+    p = newp(new_pointer_type(BUInt), cast(BUInt, 42))
+    assert p[0] == 42
+    #
+    BChar = new_primitive_type("char")
+    p = newp(new_pointer_type(BChar), cast(BChar, '!'))
+    assert p[0] == '!'
+    #
+    BFloat = new_primitive_type("float")
+    p = newp(new_pointer_type(BFloat), cast(BFloat, 12.25))
+    assert p[0] == 12.25
+    #
     BStruct = new_struct_type("foo_s")
     BStructPtr = new_pointer_type(BStruct)
     complete_struct_or_union(BStruct, [('a1', BInt, -1)])
     s1 = newp(BStructPtr, [42])
+    p1 = newp(new_pointer_type(BStructPtr), s1)
+    assert p1[0] == s1
+    #
+    BArray = new_array_type(new_pointer_type(BInt), None)
+    a1 = newp(BArray, [1, 2, 3, 4])
+    py.test.raises(TypeError, newp, BArray, a1)
+    BArray6 = new_array_type(new_pointer_type(BInt), 6)
+    a1 = newp(BArray6, None)
+    py.test.raises(TypeError, newp, BArray6, a1)
+    #
+    s1 = newp(BStructPtr, [42])
     s2 = newp(BStructPtr, s1[0])
     assert s2.a1 == 42
     #
@@ -979,6 +1008,11 @@
     u1 = newp(BUnionPtr, 42)
     u2 = newp(BUnionPtr, u1[0])
     assert u2.a1 == 42
+    #
+    BFunc = new_function_type((BInt,), BUInt)
+    p1 = cast(BFunc, 42)
+    p2 = newp(new_pointer_type(BFunc), p1)
+    assert p2[0] == p1
 
 def test_str():
     BChar = new_primitive_type("char")


More information about the pypy-commit mailing list