summaryrefslogtreecommitdiff
path: root/test-suite/tests/foreign.test
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2010-11-11 16:09:22 +0100
committerLudovic Courtès <ludo@gnu.org>2010-11-11 16:41:15 +0100
commitfb636a1cce4444928ab313574fa150a06baae54b (patch)
tree022b79663061ee74e3a73272a04f57daff3a392a /test-suite/tests/foreign.test
parent1f864a1685eac0fd62b4d573ca0ae98c90679e9e (diff)
downloadguile-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.test21
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))))