Carp/test/function.carp
Tim Dévé 36f41e39a7
Adds Function.unsafe-ptr & Function.unsafe-env-ptr (#1026)
This functions are useful with binding callback based C APIs
2020-11-27 10:17:29 +01:00

21 lines
777 B
Plaintext

(load-and-use Test)
(deftemplate runner (Fn [(Ptr ()) (Ptr ())] a)
"$a $NAME(void* fn, void* args)"
"$a $NAME(void* fnptr, void* args) {
return (($a(*)(void*))fnptr)(args);
}")
(deftest test
(assert-equal test
(let [x 42 fnfn (fn [] @&x)]
(runner (Function.unsafe-ptr &fnfn) (Function.unsafe-env-ptr &fnfn)))
42
"Function.unsafe-ptr & Function.unsafe-env-ptr works as expected")
(assert-equal test
(let [x 42 fnfn (fn [y] (Int.copy y))]
(runner (Function.unsafe-ptr &fnfn) (Unsafe.coerce &x)))
42
"Function.unsafe-ptr & Unsafe.coerce works as expected"))