1(test-group "optional<type>"2 (test-parse 'nothing (parse-optional parse-u8) #u8(0))3 (test-parse 23 (parse-optional parse-u8) #u8(1 23))4 (test-parse-error "invalid option value"5 (parse-optional parse-u8) #u8(23 42)))67(test-group "map[type A]type B"8 (test-parse '((35 2) (5 6))9 (parse-map parse-u8 parse-u8)10 #u8(#x2 #x23 #x2 #x5 #x6))11 (test-parse '()12 (parse-map parse-u16 parse-u32)13 #u8(#x0))1415 (test-parse-error "kons failed"16 (parse-map parse-u8 parse-u8)17 #u8(#x2 #xac #xab #xac #xab)))1819(test-group "[length]type"20 (test-parse '(#x23 #x42)21 (parse-list parse-u8 2)22 #u8(#x23 #x42))2324 ;; length of fixed-length array must be at least 125 (test-error (parse-list parse-u8 0)))2627(test-group "[]type"28 (test-parse '(#x05 #x15)29 (parse-list parse-u8)30 #u8(2 #x05 #x15))31 (test-parse '(#x4223)32 (parse-list parse-u16)33 #u8(#x1 #x23 #x42)))3435(test-group "union"36 (test-parse #t37 (parse-union38 (vector39 parse-bool ;; type id → 040 parse-u16 ;; type id → 141 ))42 #u8(#x00 #x01))4344 (test-parse #x131245 (parse-union46 (vector47 parse-bool ;; type id → 048 parse-u16 ;; type id → 149 ))50 #u8(#x01 #x12 #x13))5152 (test-parse-error53 "unexpected tag in tagged union"54 (parse-union55 (vector parse-u8 parse-u8))56 #u8(#x02 #x23 #x42))5758 ;; unions must have at least one type59 (test-error (parse-union '())))6061(test-group "struct"62 (test-parse '#(#t #xff #f)63 (parse-struct64 parse-bool65 parse-u866 parse-bool)67 #u8(#x01 #xff #x00))6869 (test-parse '#("" "")70 (parse-struct71 parse-string72 parse-string)73 #u8(#x0 #x0))7475 ;; Structs MUST have at least one field.76 (test-error (parse-struct '()))77 (test-error (parse-struct)))