summaryrefslogtreecommitdiff
path: root/test cases/python/3 cython
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2018-12-10 14:33:58 -0800
committerDylan Baker <dylan@pnwbakers.com>2018-12-12 12:23:37 -0800
commit978e6fb88f926da14314a3563de13197a092cc9f (patch)
tree00d6d6d73d812561b4f778ccedfad109dc24a3ad /test cases/python/3 cython
parentf6405adc2de0c6cc494b4957df9d796b76195ec4 (diff)
downloadmeson-978e6fb88f926da14314a3563de13197a092cc9f.tar.gz
tests: Add tests for the python module
This doesn't touch everything as it's just based on the python3 module tests, ported to the python module. It's still better than the one very basic test in the unit test module.
Diffstat (limited to 'test cases/python/3 cython')
-rwxr-xr-xtest cases/python/3 cython/cytest.py23
-rw-r--r--test cases/python/3 cython/libdir/cstorer.pxd9
-rw-r--r--test cases/python/3 cython/libdir/meson.build11
-rw-r--r--test cases/python/3 cython/libdir/storer.c24
-rw-r--r--test cases/python/3 cython/libdir/storer.h8
-rw-r--r--test cases/python/3 cython/libdir/storer.pyx16
-rw-r--r--test cases/python/3 cython/meson.build20
7 files changed, 111 insertions, 0 deletions
diff --git a/test cases/python/3 cython/cytest.py b/test cases/python/3 cython/cytest.py
new file mode 100755
index 000000000..43443dc66
--- /dev/null
+++ b/test cases/python/3 cython/cytest.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python3
+
+from storer import Storer
+import sys
+
+s = Storer()
+
+if s.get_value() != 0:
+ print('Initial value incorrect.')
+ sys.exit(1)
+
+s.set_value(42)
+
+if s.get_value() != 42:
+ print('Setting value failed.')
+ sys.exit(1)
+
+try:
+ s.set_value('not a number')
+ print('Using wrong argument type did not fail.')
+ sys.exit(1)
+except TypeError:
+ pass
diff --git a/test cases/python/3 cython/libdir/cstorer.pxd b/test cases/python/3 cython/libdir/cstorer.pxd
new file mode 100644
index 000000000..7b730fc75
--- /dev/null
+++ b/test cases/python/3 cython/libdir/cstorer.pxd
@@ -0,0 +1,9 @@
+
+cdef extern from "storer.h":
+ ctypedef struct Storer:
+ pass
+
+ Storer* storer_new();
+ void storer_destroy(Storer *s);
+ int storer_get_value(Storer *s);
+ void storer_set_value(Storer *s, int v);
diff --git a/test cases/python/3 cython/libdir/meson.build b/test cases/python/3 cython/libdir/meson.build
new file mode 100644
index 000000000..2b6ebc7af
--- /dev/null
+++ b/test cases/python/3 cython/libdir/meson.build
@@ -0,0 +1,11 @@
+pyx_c = custom_target('storer_pyx',
+ output : 'storer_pyx.c',
+ input : 'storer.pyx',
+ command : [cython, '@INPUT@', '-o', '@OUTPUT@'],
+)
+
+slib = py3.extension_module('storer',
+ 'storer.c', pyx_c,
+ dependencies : py3_dep)
+
+pydir = meson.current_build_dir()
diff --git a/test cases/python/3 cython/libdir/storer.c b/test cases/python/3 cython/libdir/storer.c
new file mode 100644
index 000000000..0199bb850
--- /dev/null
+++ b/test cases/python/3 cython/libdir/storer.c
@@ -0,0 +1,24 @@
+#include"storer.h"
+#include<stdlib.h>
+
+struct _Storer {
+ int value;
+};
+
+Storer* storer_new() {
+ Storer *s = malloc(sizeof(struct _Storer));
+ s->value = 0;
+ return s;
+}
+
+void storer_destroy(Storer *s) {
+ free(s);
+}
+
+int storer_get_value(Storer *s) {
+ return s->value;
+}
+
+void storer_set_value(Storer *s, int v) {
+ s->value = v;
+}
diff --git a/test cases/python/3 cython/libdir/storer.h b/test cases/python/3 cython/libdir/storer.h
new file mode 100644
index 000000000..4f7191711
--- /dev/null
+++ b/test cases/python/3 cython/libdir/storer.h
@@ -0,0 +1,8 @@
+#pragma once
+
+typedef struct _Storer Storer;
+
+Storer* storer_new();
+void storer_destroy(Storer *s);
+int storer_get_value(Storer *s);
+void storer_set_value(Storer *s, int v);
diff --git a/test cases/python/3 cython/libdir/storer.pyx b/test cases/python/3 cython/libdir/storer.pyx
new file mode 100644
index 000000000..ed551dc5f
--- /dev/null
+++ b/test cases/python/3 cython/libdir/storer.pyx
@@ -0,0 +1,16 @@
+cimport cstorer
+
+cdef class Storer:
+ cdef cstorer.Storer* _c_storer
+
+ def __cinit__(self):
+ self._c_storer = cstorer.storer_new()
+
+ def __dealloc__(self):
+ cstorer.storer_destroy(self._c_storer)
+
+ cpdef int get_value(self):
+ return cstorer.storer_get_value(self._c_storer)
+
+ cpdef set_value(self, int value):
+ cstorer.storer_set_value(self._c_storer, value)
diff --git a/test cases/python/3 cython/meson.build b/test cases/python/3 cython/meson.build
new file mode 100644
index 000000000..194920bd8
--- /dev/null
+++ b/test cases/python/3 cython/meson.build
@@ -0,0 +1,20 @@
+project('cython', 'c',
+ default_options : ['warning_level=3'])
+
+cython = find_program('cython3', required : false)
+py3_dep = dependency('python3', required : false)
+
+if cython.found() and py3_dep.found()
+ py_mod = import('python')
+ py3 = py_mod.find_installation()
+ py3_dep = py3.dependency()
+ subdir('libdir')
+
+ test('cython tester',
+ py3,
+ args : files('cytest.py'),
+ env : ['PYTHONPATH=' + pydir]
+ )
+else
+ error('MESON_SKIP_TEST: Cython3 or Python3 libraries not found, skipping test.')
+endif