summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsonots <sonots@gmail.com>2017-10-24 16:28:12 +0900
committersonots <sonots@gmail.com>2017-10-31 16:57:23 +0900
commit4920f701758e36a724eefd5840ab7106c23a51e2 (patch)
tree6e8f17e894b71e06d6c92d8db3b34df34ce54d95
parent3c3829c569855b5d1b918240d5736a186547d36e (diff)
downloadcython-4920f701758e36a724eefd5840ab7106c23a51e2.tar.gz
Add tests/run/tss.pyx
-rw-r--r--tests/run/tss.pyx51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/run/tss.pyx b/tests/run/tss.pyx
new file mode 100644
index 000000000..c21b869a6
--- /dev/null
+++ b/tests/run/tss.pyx
@@ -0,0 +1,51 @@
+# mode: run
+
+from cpython.pythread cimport *
+
+def tss_create_delete():
+ """
+ >>> tss_create_delete()
+ (True, False)
+ """
+ cdef Py_tss_t tss_key = Py_tss_NEEDS_INIT
+ cdef bint after_create, after_delete
+ if PyThread_tss_create(&tss_key) > 0:
+ # handle key creation failure
+ pass
+ after_create = PyThread_tss_is_created(&tss_key) != 0
+ PyThread_tss_delete(&tss_key)
+ after_delete = PyThread_tss_is_created(&tss_key) != 0
+ return (after_create, after_delete)
+
+def tss_alloc_free():
+ """
+ >>> tss_alloc_free()
+ (True, False)
+ """
+ cdef Py_tss_t *ptr_key
+ cdef bint after_alloc, after_free
+ ptr_key = PyThread_tss_alloc()
+ if ptr_key == NULL:
+ # handle key allocation failure
+ pass
+ after_alloc = PyThread_tss_is_created(ptr_key) != 0
+ PyThread_tss_free(ptr_key)
+ after_free = PyThread_tss_is_created(ptr_key) != 0
+ return (after_alloc, after_free)
+
+def tss_set_get():
+ """
+ >>> tss_set_get()
+ 1
+ """
+ cdef Py_tss_t tss_key = Py_tss_NEEDS_INIT
+ cdef int the_value = 1
+ cdef int ret_value
+ if PyThread_tss_create(&tss_key) > 0:
+ # handle key creation failure
+ pass
+ if PyThread_tss_get(&tss_key) == NULL:
+ PyThread_tss_set(&tss_key, <void *>&the_value)
+ ret_value = (<int *>PyThread_tss_get(&tss_key))[0]
+ PyThread_tss_delete(&tss_key)
+ return ret_value