fix {s,u}int-list->bytevector (PR 9916)

svn: r12459
This commit is contained in:
Matthew Flatt 2008-11-15 18:54:30 +00:00
parent 015503bde3
commit 69fdabf0a0
2 changed files with 19 additions and 3 deletions

View File

@ -311,16 +311,17 @@
(bytevector->int-list 'bytevector->sint-list bytevector-sint-ref bv endianness size))
(define (int-list->bytevector who signed? set l endianness size)
(unless (list? l)
(unless (mlist? l)
(raise-type-error who "list" l))
(check-endian endianness)
(unless (exact-positive-integer? size)
(raise-type-error who "exact positive integer" size))
(let* ([len (length l)]
(let* ([l (mlist->list l)]
[len (length l)]
[bv (make-bytes (* size len))])
(for ([v (in-list l)]
[k (in-naturals)])
(set l k v endianness size))
(set bv (* k size) v endianness size))
bv))
(define (uint-list->bytevector l endianness size)

View File

@ -277,6 +277,21 @@
(test (let ((b (u8-list->bytevector '(1 2 3 255 1 2 1 2))))
(bytevector->uint-list b 'little 2))
'(513 65283 513 513))
(test (bytevector->u8-list
(uint-list->bytevector '(513 65283 513 513) 'little 2))
'(1 2 3 255 1 2 1 2))
(test (bytevector->u8-list
(uint-list->bytevector '(513 65283 513 513) 'big 2))
'(2 1 255 3 2 1 2 1))
(test (let ((b (u8-list->bytevector '(1 2 3 255 1 2 1 2))))
(bytevector->sint-list b 'little 2))
'(513 -253 513 513))
(test (let ((b (u8-list->bytevector '(2 1 255 3 2 1 2 1))))
(bytevector->sint-list b 'big 2))
'(513 -253 513 513))
(test (bytevector->u8-list
(sint-list->bytevector '(513 -253 513 513) 'little 2))
'(1 2 3 255 1 2 1 2))
(test (let ((b (u8-list->bytevector '(1 2 3 255 1 2 1 2))))
(bytevector->sint-list b 'little 2))
'(513 -253 513 513))