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/reserved-test.rkt

48 lines
1.5 KiB
Racket

#lang racket/base
(require rackunit
6 years ago
racket/class
6 years ago
"../number.rkt"
"../base.rkt"
6 years ago
"../reserved.rkt"
"../base.rkt")
#|
approximates
https://github.com/mbutterick/restructure/blob/master/test/Reserved.coffee
|#
6 years ago
(test-case
6 years ago
"reserved: size should have a default count of 1"
(check-equal? (send (x:reserved uint8) x:size) 1))
6 years ago
(test-case
6 years ago
"reserved: size should allow custom counts and types"
(check-equal? (send (x:reserved uint16be 10) x:size) 20))
6 years ago
(test-case
6 years ago
"reserved: should decode"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 0 0))])
6 years ago
(define reserved (x:reserved uint16be))
6 years ago
(check-equal? (decode reserved) (void))
(check-equal? (pos (current-input-port)) 2)))
(test-case
6 years ago
"reserved: should decode with post-decode"
6 years ago
(parameterize ([current-input-port (open-input-bytes (bytes 0 0))])
6 years ago
(define reserved (x:reserved uint16be #:post-decode (λ (val) 42)))
6 years ago
(check-equal? (decode reserved) 42)
(check-equal? (pos (current-input-port)) 2)))
(test-case
6 years ago
"reserved: should encode"
6 years ago
(parameterize ([current-output-port (open-output-bytes)])
6 years ago
(define reserved (x:reserved uint16be))
6 years ago
(encode reserved #f)
6 years ago
(check-equal? (get-output-bytes (current-output-port)) (bytes 0 0))))
6 years ago
(test-case
6 years ago
"reserved: should encode with pre-encode"
6 years ago
(parameterize ([current-output-port (open-output-bytes)])
6 years ago
(define reserved (x:reserved uint32be #:pre-encode (λ (val) 42)))
6 years ago
(encode reserved #f)
6 years ago
(check-equal? (get-output-bytes (current-output-port)) (bytes 0 0 0 0))))