mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-19 05:39:17 +02:00
57 lines
1.7 KiB
Scheme
57 lines
1.7 KiB
Scheme
;; Unit tests for the (cyclone foreign) module.
|
|
;;
|
|
(import
|
|
(scheme base)
|
|
(scheme write)
|
|
(cyclone test)
|
|
(cyclone foreign)
|
|
(scheme cyclone util)
|
|
(scheme cyclone pretty-print)
|
|
)
|
|
|
|
(define *my-global* #f)
|
|
|
|
(c-define-type my-string string)
|
|
(c-define-type my-integer integer)
|
|
(c-define-type my-integer-as-string integer string->number number->string)
|
|
(c-define-type string-as-integer string number->string string->number)
|
|
|
|
(test-group "foreign value"
|
|
(test 3 (c-value "1 + 2" integer))
|
|
(test 4 (c-value "2 + 2" my-integer))
|
|
(test "4" (c-value "2 + 2" my-integer-as-string))
|
|
(test "test" (c-value "\"test\"" string))
|
|
)
|
|
|
|
(test-group "foreign code"
|
|
(test #f *my-global*)
|
|
(c-code
|
|
"printf(\"test %d %d \\n\", 1, 2);"
|
|
"printf(\"test %d %d %d\\n\", 1, 2, 3);"
|
|
"__glo__85my_91global_85 = boolean_t;")
|
|
(test #t *my-global*)
|
|
(set! *my-global* 1)
|
|
(test 1 *my-global*)
|
|
)
|
|
|
|
;; Must be top-level
|
|
|
|
;TODO: support custom types (arg and ret) for c-define.
|
|
; Also need to be able to support arg/ret convert optional type arguments
|
|
; Would need to generate scheme wrappers to handle these conversions
|
|
|
|
(c-define scm-strlen my-integer "strlen" string)
|
|
(c-define scm-strlen-str my-integer-as-string "strlen" string)
|
|
;(c-define scm-strlen "int" "strlen" string)
|
|
(c-define scm-strlend double "strlen" string)
|
|
(c-define scm-strlen2 integer "strlen" my-string)
|
|
(c-define scm-strlen3 integer "strlen" string-as-integer)
|
|
|
|
(test-group "foreign lambda"
|
|
(test 15 (scm-strlen "testing 1, 2, 3"))
|
|
(test 15 (scm-strlen2 "testing 1, 2, 3"))
|
|
(test 15.0 (scm-strlend "testing 1, 2, 3"))
|
|
(test "15" (scm-strlen-str "testing 1, 2, 3"))
|
|
(test 3 (scm-strlen3 255))
|
|
)
|
|
(test-exit)
|