diff --git a/collects/rnrs/bytevectors-6.ss b/collects/rnrs/bytevectors-6.ss index dc26a0e069..d3944e9380 100644 --- a/collects/rnrs/bytevectors-6.ss +++ b/collects/rnrs/bytevectors-6.ss @@ -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) diff --git a/collects/tests/r6rs/bytevectors.sls b/collects/tests/r6rs/bytevectors.sls index f2b00a75a9..87fc507a1b 100644 --- a/collects/tests/r6rs/bytevectors.sls +++ b/collects/tests/r6rs/bytevectors.sls @@ -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))