Carp/test/function.carp

21 lines
777 B
Plaintext
Raw Normal View History

(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"))