|
|
|
@ -23,9 +23,9 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
'age uint8
|
|
|
|
|
'gender uint8)))])
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes #"\x00\x05roxyb\x15")])
|
|
|
|
|
(check-equal? (decode/hash vstruct) (hasheq 'name "roxyb" 'age 21 'version 0)))
|
|
|
|
|
(check-equal? (decode vstruct) (mhasheq 'name "roxyb" 'age 21 'version 0)))
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes (string->bytes/utf-8 "\x01\x0aroxyb 🤘\x15\x00"))])
|
|
|
|
|
(check-equal? (decode/hash vstruct) (hasheq 'name "roxyb 🤘" 'age 21 'version 1 'gender 0)))))
|
|
|
|
|
(check-equal? (decode vstruct) (mhasheq 'name "roxyb 🤘" 'age 21 'version 1 'gender 0)))))
|
|
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
|
"decode should throw for unknown version"
|
|
|
|
@ -49,12 +49,12 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
1 (dictify 'name (+xstring #:length uint8 #:encoding 'utf8)
|
|
|
|
|
'gender uint8)))])
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes #"\x00\x15\x01\x05roxyb")])
|
|
|
|
|
(check-equal? (decode/hash vstruct) (hasheq 'name "roxyb"
|
|
|
|
|
(check-equal? (decode vstruct) (mhasheq 'name "roxyb"
|
|
|
|
|
'age 21
|
|
|
|
|
'alive 1
|
|
|
|
|
'version 0)))
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes (string->bytes/utf-8 "\x01\x15\x01\x0aroxyb 🤘\x00"))])
|
|
|
|
|
(check-equal? (decode/hash vstruct) (hasheq 'name "roxyb 🤘"
|
|
|
|
|
(check-equal? (decode vstruct) (mhasheq 'name "roxyb 🤘"
|
|
|
|
|
'age 21
|
|
|
|
|
'version 1
|
|
|
|
|
'alive 1
|
|
|
|
@ -70,11 +70,11 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
'age uint8
|
|
|
|
|
'gender uint8)))])
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes #"\x05roxyb\x15")])
|
|
|
|
|
(check-equal? (decode/hash vstruct #:parent (mhash 'version 0))
|
|
|
|
|
(hasheq 'name "roxyb" 'age 21 'version 0)))
|
|
|
|
|
(check-equal? (dict->mutable-hash (xdecode vstruct #:parent (mhash 'version 0)))
|
|
|
|
|
(mhasheq 'name "roxyb" 'age 21 'version 0)))
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes (string->bytes/utf-8 "\x0aroxyb 🤘\x15\x00"))])
|
|
|
|
|
(check-equal? (decode/hash vstruct #:parent (mhash 'version 1))
|
|
|
|
|
(hasheq 'name "roxyb 🤘" 'age 21 'version 1 'gender 0)))))
|
|
|
|
|
(check-equal? (dict->mutable-hash (xdecode vstruct #:parent (mhash 'version 1)))
|
|
|
|
|
(mhasheq 'name "roxyb 🤘" 'age 21 'version 1 'gender 0)))))
|
|
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
|
"decode should support sub versioned structs"
|
|
|
|
@ -88,14 +88,14 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
1 (dictify 'name (+xstring uint8)
|
|
|
|
|
'isDessert uint8)))))])
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes #"\x00\x05roxyb\x15")])
|
|
|
|
|
(check-equal? (decode/hash vstruct #:parent (mhash 'version 0))
|
|
|
|
|
(hasheq 'name "roxyb" 'age 21 'version 0)))
|
|
|
|
|
(check-equal? (dict->mutable-hash (xdecode vstruct #:parent (mhash 'version 0)))
|
|
|
|
|
(mhasheq 'name "roxyb" 'age 21 'version 0)))
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes #"\x01\x00\x05pasta")])
|
|
|
|
|
(check-equal? (decode/hash vstruct #:parent (mhash 'version 0))
|
|
|
|
|
(hasheq 'name "pasta" 'version 0)))
|
|
|
|
|
(check-equal? (dict->mutable-hash (xdecode vstruct #:parent (mhash 'version 0)))
|
|
|
|
|
(mhasheq 'name "pasta" 'version 0)))
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes #"\x01\x01\x09ice cream\x01")])
|
|
|
|
|
(check-equal? (decode/hash vstruct #:parent (mhash 'version 0))
|
|
|
|
|
(hasheq 'name "ice cream" 'isDessert 1 'version 1)))))
|
|
|
|
|
(check-equal? (dict->mutable-hash (xdecode vstruct #:parent (mhash 'version 0)))
|
|
|
|
|
(mhasheq 'name "ice cream" 'isDessert 1 'version 1)))))
|
|
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
|
"decode should support process hook"
|
|
|
|
@ -108,8 +108,8 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
'gender uint8)))])
|
|
|
|
|
(set-post-decode! vstruct (λ (val) (dict-set! val 'processed "true") val))
|
|
|
|
|
(parameterize ([current-input-port (open-input-bytes #"\x00\x05roxyb\x15")])
|
|
|
|
|
(check-equal? (decode/hash vstruct)
|
|
|
|
|
(hasheq 'name "roxyb" 'processed "true" 'age 21 'version 0)))))
|
|
|
|
|
(check-equal? (decode vstruct)
|
|
|
|
|
(mhasheq 'name "roxyb" 'processed "true" 'age 21 'version 0)))))
|
|
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
|
"size should compute the correct size"
|
|
|
|
@ -189,7 +189,7 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
[op (open-output-bytes)])
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb" 'age 21 'version 0) op)
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb 🤘" 'age 21 'gender 0 'version 1) op)
|
|
|
|
|
(check-equal? (dump op) (string->bytes/utf-8 "\x00\x05roxyb\x15\x01\x0aroxyb 🤘\x15\x00"))))
|
|
|
|
|
(check-equal? (get-output-bytes op) (string->bytes/utf-8 "\x00\x05roxyb\x15\x01\x0aroxyb 🤘\x15\x00"))))
|
|
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
|
"encode should throw for unknown version"
|
|
|
|
@ -215,7 +215,7 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
[op (open-output-bytes)])
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb" 'age 21 'alive 1 'version 0) op)
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb 🤘" 'gender 0 'age 21 'alive 1 'version 1) op)
|
|
|
|
|
(check-equal? (dump op) (string->bytes/utf-8 "\x00\x15\x01\x05roxyb\x01\x15\x01\x0aroxyb 🤘\x00"))))
|
|
|
|
|
(check-equal? (get-output-bytes op) (string->bytes/utf-8 "\x00\x15\x01\x05roxyb\x01\x15\x01\x0aroxyb 🤘\x00"))))
|
|
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
|
"encode should encode pointer data after structure"
|
|
|
|
@ -230,7 +230,7 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
[op (open-output-bytes)])
|
|
|
|
|
(encode vstruct (mhasheq 'version 1 'name "roxyb" 'age 21 'ptr "hello") op)
|
|
|
|
|
|
|
|
|
|
(check-equal? (dump op) (string->bytes/utf-8 "\x01\x05roxyb\x15\x09\x05hello"))))
|
|
|
|
|
(check-equal? (get-output-bytes op) (string->bytes/utf-8 "\x01\x05roxyb\x15\x09\x05hello"))))
|
|
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
|
"encode should support preEncode hook"
|
|
|
|
@ -241,8 +241,8 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
|
|
|
|
|
1 (dictify 'name (+xstring #:length uint8 #:encoding 'utf8)
|
|
|
|
|
'age uint8
|
|
|
|
|
'gender uint8)))]
|
|
|
|
|
[stream (open-output-bytes)])
|
|
|
|
|
[op (open-output-bytes)])
|
|
|
|
|
(set-pre-encode! vstruct (λ (val) (dict-set! val 'version (if (dict-ref val 'gender #f) 1 0)) val))
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb" 'age 21 'version 0) stream)
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb 🤘" 'age 21 'gender 0) stream)
|
|
|
|
|
(check-equal? (dump stream) (string->bytes/utf-8 "\x00\x05roxyb\x15\x01\x0aroxyb 🤘\x15\x00"))))
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb" 'age 21 'version 0) op)
|
|
|
|
|
(encode vstruct (mhasheq 'name "roxyb 🤘" 'age 21 'gender 0) op)
|
|
|
|
|
(check-equal? (get-output-bytes op) (string->bytes/utf-8 "\x00\x05roxyb\x15\x01\x0aroxyb 🤘\x15\x00"))))
|