You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/xenomorph/xenomorph/test/lazy-array-test.rkt

75 lines
2.6 KiB
Racket

#lang racket/base
(require rackunit
6 years ago
racket/class
6 years ago
racket/stream
"../array.rkt"
"../helper.rkt"
"../number.rkt"
6 years ago
"../lazy-array.rkt"
"../generic.rkt")
#|
approximates
https://github.com/mbutterick/restructure/blob/master/test/LazyArray.coffee
|#
6 years ago
(test-case
6 years ago
"lazy-array: decode should decode items lazily"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 1 2 3 4 5))])
(define xla (+xlazy-array uint8 4))
(define arr (decode xla))
(check-equal? (stream-length arr) 4)
(check-equal? (pos (current-input-port)) 4)
(check-equal? (stream-ref arr 0) 1)
(check-equal? (stream-ref arr 1) 2)
(check-equal? (stream-ref arr 2) 3)
(check-equal? (stream-ref arr 3) 4)))
(test-case
6 years ago
"lazy-array: decode should decode items lazily with post-decode"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 1 2 3 4 5))])
(define xla (+xlazy-array uint8 4 #:post-decode (λ (str) (stream-map (λ (i) (* 2 i)) str))))
6 years ago
(define arr (decode xla))
(check-false (xarray? arr))
(check-equal? (stream-length arr) 4)
(check-equal? (pos (current-input-port)) 4)
(check-equal? (stream-ref arr 0) 2)
(check-equal? (stream-ref arr 1) 4)
(check-equal? (stream-ref arr 2) 6)
(check-equal? (stream-ref arr 3) 8)))
(test-case
6 years ago
"lazy-array: should be able to convert to an array"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 1 2 3 4 5))])
(define xla (+xlazy-array uint8 4))
(define arr (decode xla))
(check-equal? (stream->list arr) '(1 2 3 4))))
(test-case
6 years ago
"lazy-array: decode should decode length as number before array"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 4 1 2 3 4 5))])
(define xla (+xlazy-array uint8 uint8))
(define arr (decode xla))
(check-equal? (stream->list arr) '(1 2 3 4))))
(test-case
6 years ago
"lazy-array: size should work with xlazy-arrays"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 1 2 3 4 5))])
(define xla (+xlazy-array uint8 4))
(define arr (decode xla))
(check-equal? (size xla arr) 4)))
(test-case
6 years ago
"lazy-array: encode should work with xlazy-arrays"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 1 2 3 4 5))])
(define xla (+xlazy-array uint8 4))
(define arr (decode xla))
(check-equal? (encode xla arr #f) (bytes 1 2 3 4))))
(test-case
6 years ago
"lazy-array: encode should work with xlazy-arrays with pre-encode"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 1 2 3 4 5))])
(define xla (+xlazy-array uint8 4 #:pre-encode (λ (str) (stream-map (λ (val) (* 2 val)) str))))
6 years ago
(define arr (decode xla))
(check-equal? (encode xla arr #f) (bytes 2 4 6 8))))