diff options
author | Ludovic Courtès <ludo@gnu.org> | 2010-11-11 16:09:22 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2010-11-11 16:41:15 +0100 |
commit | fb636a1cce4444928ab313574fa150a06baae54b (patch) | |
tree | 022b79663061ee74e3a73272a04f57daff3a392a /test-suite/tests/foreign.test | |
parent | 1f864a1685eac0fd62b4d573ca0ae98c90679e9e (diff) | |
download | guile-fb636a1cce4444928ab313574fa150a06baae54b.tar.gz |
Have `parse-c-struct' and `make-c-struct' support `int', pointers, etc.
Reported by Tristan Colgate <tcolgate@gmail.com>.
* module/system/foreign.scm: Call `load-extension' at compile-time too.
(compile-time-value): New macro.
(integer-ref, integer-set): New procedures.
(define-integer-reader, define-integer-writer): New macros.
(%read-int, %read-long, %write-int!, %write-long!, %read-unsigned-int,
%read-unsigned-long, %write-unsigned-int!, %write-unsigned-long!,
%read-size_t, %write-size_t!, %read-pointer, %write-pointer!): New
procedures.
(*writers*): Add writers for `int', `unsigned-int', `long',
`unsigned-long', `size_t', and `*'.
(*readers*): Likewise.
* test-suite/tests/foreign.test ("structs")["int8, pointer",
"unsigned-long, int8, size_t", "long, int, pointer"]: New tests.
Diffstat (limited to 'test-suite/tests/foreign.test')
-rw-r--r-- | test-suite/tests/foreign.test | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test-suite/tests/foreign.test b/test-suite/tests/foreign.test index 05846eda7..d741b7e44 100644 --- a/test-suite/tests/foreign.test +++ b/test-suite/tests/foreign.test @@ -189,4 +189,25 @@ (data (list -7 3.14))) (equal? (parse-c-struct (make-c-struct layout data) layout) + data))) + + (pass-if "int8, pointer" + (let ((layout (list uint8 '*)) + (data (list 222 (make-pointer 7777)))) + (equal? (parse-c-struct (make-c-struct layout data) + layout) + data))) + + (pass-if "unsigned-long, int8, size_t" + (let ((layout (list unsigned-long int8 size_t)) + (data (list (expt 2 17) -128 (expt 2 18)))) + (equal? (parse-c-struct (make-c-struct layout data) + layout) + data))) + + (pass-if "long, int, pointer" + (let ((layout (list long int '*)) + (data (list (- (expt 2 17)) -222 (make-pointer 777)))) + (equal? (parse-c-struct (make-c-struct layout data) + layout) data)))) |