cyclone/libs/test-foreign.scm
Justin Ethier 12ed7e7813 WIP
2020-05-13 22:29:14 -04:00

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)