Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,97 @@
|
||||
module deflate
|
||||
|
||||
fn test_zlib_roundtrip() {
|
||||
data := 'Hello world!'.bytes()
|
||||
compressed := compress(data)!
|
||||
assert compressed[0] == 0x78 && compressed[1] == 0x9c // zlib header
|
||||
assert decompress(compressed)! == data
|
||||
}
|
||||
|
||||
fn test_gzip_roundtrip() {
|
||||
data := 'Hello gzip!'.repeat(10).bytes()
|
||||
compressed := compress(data, format: .gzip)!
|
||||
assert compressed[0] == 0x1f && compressed[1] == 0x8b // gzip magic
|
||||
assert decompress(compressed)! == data
|
||||
}
|
||||
|
||||
fn test_raw_deflate_roundtrip() {
|
||||
data := 'raw deflate'.repeat(20).bytes()
|
||||
raw := compress(data, format: .raw_deflate)!
|
||||
decoded := decompress(raw)! // auto-detected as raw
|
||||
assert decoded == data
|
||||
}
|
||||
|
||||
fn test_decompress_auto_detects_all_formats() {
|
||||
data := 'multi-format detection test'.repeat(5).bytes()
|
||||
assert decompress(compress(data)!)! == data
|
||||
assert decompress(compress(data, format: .gzip)!)! == data
|
||||
assert decompress(compress(data, format: .raw_deflate)!)! == data
|
||||
}
|
||||
|
||||
fn test_wrapper_helpers_match_unified_api() {
|
||||
data := 'wrapper compatibility'.repeat(8).bytes()
|
||||
assert compress(data)! == compress(data, format: .zlib)!
|
||||
assert compress_gzip(data)! == compress(data, format: .gzip)!
|
||||
assert compress_raw(data)! == compress(data, format: .raw_deflate)!
|
||||
}
|
||||
|
||||
fn test_roundtrip_repeated() {
|
||||
data := 'abcabc'.repeat(100).bytes()
|
||||
compressed := compress(data)!
|
||||
assert compressed.len < data.len
|
||||
assert decompress(compressed)! == data
|
||||
}
|
||||
|
||||
fn test_bad_compression_method_fails() {
|
||||
bad := [u8(0x79), 0x18, 0x00, 0x00, 0x00, 0x00]
|
||||
decompress(bad) or {
|
||||
assert err.msg().len > 0
|
||||
return
|
||||
}
|
||||
assert false
|
||||
}
|
||||
|
||||
fn test_corrupt_checksum_fails() {
|
||||
mut enc := compress(('hello world').repeat(10).bytes())!
|
||||
// flip a byte in the adler32 footer
|
||||
enc[enc.len - 1] ^= 0xff
|
||||
decompress(enc) or {
|
||||
assert err.msg().contains('adler32')
|
||||
return
|
||||
}
|
||||
assert false
|
||||
}
|
||||
|
||||
fn test_truncated_zlib_payload_fails() {
|
||||
decompress([u8(0x78), 0x9c, 0x03, 0x00, 0x00, 0x00, 0x01]) or {
|
||||
assert err.msg().contains('unexpected end of stream')
|
||||
return
|
||||
}
|
||||
assert false
|
||||
}
|
||||
|
||||
fn test_zlib_inserted_bytes_before_adler_fails() {
|
||||
enc := compress('zlib injected trailer bytes'.repeat(4).bytes())!
|
||||
mut bad := []u8{cap: enc.len + 2}
|
||||
bad << enc[..enc.len - 4]
|
||||
bad << [u8(0xaa), 0x55]
|
||||
bad << enc[enc.len - 4..]
|
||||
decompress(bad) or {
|
||||
assert err.msg() == 'invalid zlib stream: trailing data before adler32'
|
||||
return
|
||||
}
|
||||
assert false
|
||||
}
|
||||
|
||||
fn test_gzip_inserted_bytes_before_trailer_fails() {
|
||||
enc := compress('gzip injected trailer bytes'.repeat(4).bytes(), format: .gzip)!
|
||||
mut bad := []u8{cap: enc.len + 1}
|
||||
bad << enc[..enc.len - 8]
|
||||
bad << u8(0x42)
|
||||
bad << enc[enc.len - 8..]
|
||||
decompress(bad) or {
|
||||
assert err.msg() == 'invalid gzip stream: trailing data before trailer'
|
||||
return
|
||||
}
|
||||
assert false
|
||||
}
|
||||
Reference in new issue
Block a user