[pypy-commit] cffi default: Add test from the recent ctypes fix bpo-29565 (may fail on win64)

arigo pypy.commits at gmail.com
Sun Aug 5 03:42:48 EDT 2018


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r3133:7b305f61d0e0
Date: 2018-08-05 09:42 +0200
http://bitbucket.org/cffi/cffi/changeset/7b305f61d0e0/

Log:	Add test from the recent ctypes fix bpo-29565 (may fail on win64)

diff --git a/testing/cffi0/backend_tests.py b/testing/cffi0/backend_tests.py
--- a/testing/cffi0/backend_tests.py
+++ b/testing/cffi0/backend_tests.py
@@ -1945,3 +1945,30 @@
         # only works with the Python FFI instances
         ffi = FFI(backend=self.Backend())
         assert ffi.sizeof("struct{int a;}") == ffi.sizeof("int")
+
+    def test_callback_large_struct(self):
+        ffi = FFI(backend=self.Backend())
+        # more than 8 bytes
+        ffi.cdef("struct foo_s { unsigned long a, b, c; };")
+        #
+        @ffi.callback("void(struct foo_s)")
+        def cb(s):
+            seen.append(ffi.typeof(s))
+            s.a += 1
+            s.b += 2
+            s.c += 3
+            seen.append(s.a)
+            seen.append(s.b)
+            seen.append(s.c)
+        #
+        s1 = ffi.new("struct foo_s *", {'a': 100, 'b': 200, 'c': 300})
+        seen = []
+        cb(s1[0])
+        assert len(seen) == 4
+        assert s1.a == 100     # unmodified
+        assert s1.b == 200
+        assert s1.c == 300
+        assert seen[0] == ffi.typeof("struct foo_s")
+        assert seen[1] == 101
+        assert seen[2] == 202
+        assert seen[3] == 303


More information about the pypy-commit mailing list