[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