Author: Armin Rigo <[email protected]>
Branch: static-callback-embedding
Changeset: r2506:1bd9d4b7e959
Date: 2016-01-01 11:45 +0100
http://bitbucket.org/cffi/cffi/changeset/1bd9d4b7e959/

Log:    test for not invoking the init code recursively

diff --git a/testing/embedding/add_recursive-test.c 
b/testing/embedding/add_recursive-test.c
new file mode 100644
--- /dev/null
+++ b/testing/embedding/add_recursive-test.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+
+extern int add_rec(int, int);
+extern int (*my_callback)(int);
+
+static int some_callback(int x)
+{
+    printf("some_callback(%d)\n", x);
+    return add_rec(x, 9);
+}
+
+int main(void)
+{
+    int x, y;
+    my_callback = some_callback;
+    x = add_rec(40, 2);
+    y = add_rec(100, -5);
+    printf("got: %d %d\n", x, y);
+    return 0;
+}
diff --git a/testing/embedding/add_recursive.py 
b/testing/embedding/add_recursive.py
new file mode 100644
--- /dev/null
+++ b/testing/embedding/add_recursive.py
@@ -0,0 +1,26 @@
+import cffi
+
+ffi = cffi.FFI()
+
+ffi.cdef("""
+    int (*my_callback)(int);
+    extern "Python" int add_rec(int, int);
+""", dllexport=True)
+
+ffi.embedding_init_code(r"""
+    print "preparing REC"
+
+    @ffi.def_extern()
+    def add_rec(x, y):
+        print "adding %d and %d" % (x, y)
+        return x + y
+
+    x = lib.my_callback(400)
+    print '<<< %d >>>' % (x,)
+""")
+
+ffi.set_source("_add_recursive_cffi", """
+int (*my_callback)(int);
+""")
+
+ffi.compile()
diff --git a/testing/embedding/test_recursive.py 
b/testing/embedding/test_recursive.py
new file mode 100644
--- /dev/null
+++ b/testing/embedding/test_recursive.py
@@ -0,0 +1,15 @@
+from testing.embedding.test_basic import EmbeddingTests
+
+
+class TestRecursive(EmbeddingTests):
+    def test_recursive(self):
+        self.prepare_module('add_recursive')
+        self.compile('add_recursive-test', ['_add_recursive_cffi'])
+        output = self.execute('add_recursive-test')
+        assert output == ("preparing REC\n"
+                          "some_callback(400)\n"
+                          "adding 400 and 9\n"
+                          "<<< 409 >>>\n"
+                          "adding 40 and 2\n"
+                          "adding 100 and -5\n"
+                          "got: 42 95\n")
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to