next: unit tests for restructure

main
Matthew Butterick 8 years ago
parent 98550e43f2
commit 7fa2496a66

@ -0,0 +1,82 @@
#lang restructure/racket
(require "array.rkt" "stream.rkt" "number.rkt" rackunit)
#|
approximates
https://github.com/mbutterick/restructure/blob/master/test/Array.coffee
|#
;; it 'should decode fixed length', ->
(let ([stream (+DecodeStream (bytes 1 2 3 4 5))]
[array (+Array uint8 4)])
(check-equal? (send array decode stream) '(1 2 3 4)))
;; todo
;; it 'should decode fixed amount of bytes', ->
#;(let ([stream (+DecodeStream (bytes 1 2 3 4 5))]
[array (+Array uint16be 4 'bytes)])
(check-equal? (send array decode stream) '(258 772)))
;; todo
;; it 'should decode length from parent key', ->
#;(let ([stream (+DecodeStream (bytes 1 2 3 4 5))]
[array (+Array uint8 4 'len)])
(check-equal? (send array decode stream (mhash 'len 4)) '(1 2 3 4)))
;; todo
;; it 'should decode amount of bytes from parent key', ->
#;(let ([stream (+DecodeStream (bytes 1 2 3 4 5))]
[array (+Array uint16be 'len 'bytes)])
(check-equal? (send array decode stream (mhash 'len 4)) '(258 772)))
;; todo
;; it 'should decode length as number before array', ->
#;(let ([stream (+DecodeStream (bytes 1 2 3 4 5))]
[array (+Array uint8 uint8)])
(check-equal? (send array decode stream (mhash 'len 4)) '(1 2 3 4)))
;; todo
;; it 'should decode amount of bytes as number before array', ->
#;(let ([stream (+DecodeStream (bytes 4 1 2 3 4 5))]
[array (+Array uint16be uint8 'bytes)])
(check-equal? (send array decode stream) '(258 772)))
;; it 'should decode length from function', ->
(let ([stream (+DecodeStream (bytes 1 2 3 4 5))]
[array (+Array uint8 (λ _ 4))])
(check-equal? (send array decode stream) '(1 2 3 4)))
;; todo
;; it 'should decode amount of bytes from function', ->
#;(let ([stream (+DecodeStream (bytes 4 1 2 3 4 5))]
[array (+Array uint16be (λ _ 4) 'bytes)])
(check-equal? (send array decode stream) '(258 772)))
;; todo
;; it 'should decode to the end of the parent if no length is given', ->
#;(let ([stream (+DecodeStream (bytes 1 2 3 4 5))]
[array (+Array uint8)])
(check-equal? (send array decode stream (mhash '_length 4 '_startOffset 0)) '(1 2 3 4)))
;; it 'should decode to the end of the stream if no parent and length is given', ->
(let ([stream (+DecodeStream (bytes 1 2 3 4))]
[array (+Array uint8)])
(check-equal? (send array decode stream) '(1 2 3 4)))
;; it 'should use array length', ->
(let ([array (+Array uint8 10)])
(check-equal? (send array size '(1 2 3 4)) 4))
;; todo
;; it 'should add size of length field before string', ->
#;(let ([array (+Array uint8 uint8)])
(check-equal? (send array size '(1 2 3 4)) 5))
;; it 'should use defined length if no value given', ->
(let ([array (+Array uint8 10)])
(check-equal? (send array size) 10))

@ -17,7 +17,11 @@ https://github.com/mbutterick/restructure/blob/master/src/Pointer.coffee
(define offset (send offsetType decode stream ctx))
(report scope 'pointer-scope)
(define relative (caseq scope
[(local) (or (· ctx res _startOffset) (· ctx _startOffset))]
[(local) (when (and (· ctx res _startOffset) (· ctx _startOffset)
(not (= (· ctx res _startOffset) (· ctx _startOffset))))
(report* ctx (· ctx res _startOffset) (· ctx _startOffset))
(error 'bazongas))
(· ctx _startOffset)]
[(parent) (· ctx parent _startOffset)]
[(immediate) (- (· stream pos) (send offsetType size))]
[(global)

@ -52,7 +52,8 @@ https://github.com/mbutterick/restructure/blob/master/src/Struct.coffee
(if (procedure? type)
(type res)
(send type decode stream this)))
(hash-set! res key val)))
(hash-set! res key val)
(hash-set! res '_currentOffset (- (· stream pos) (· res _startOffset)))))
(define/override (size [input-hash (mhash)] [parent #f] [includePointers #t])
(for/sum ([(key type) (in-dict fields)])

Loading…
Cancel
Save