v2 / vlib / compress / deflate / deflate_test.v
63 lines · 55 sloc · 1.77 KB · 96c365159d037716a7097f6b02e4b4b82edd0a8a
Raw
1module deflate
2
3fn test_zlib_roundtrip() {
4 data := 'Hello world!'.bytes()
5 compressed := compress(data)!
6 assert compressed[0] == 0x78 && compressed[1] == 0x9c // zlib header
7 assert decompress(compressed)! == data
8}
9
10fn test_gzip_roundtrip() {
11 data := 'Hello gzip!'.repeat(10).bytes()
12 compressed := compress(data, format: .gzip)!
13 assert compressed[0] == 0x1f && compressed[1] == 0x8b // gzip magic
14 assert decompress(compressed)! == data
15}
16
17fn test_raw_deflate_roundtrip() {
18 data := 'raw deflate'.repeat(20).bytes()
19 raw := compress(data, format: .raw_deflate)!
20 decoded := decompress(raw)! // auto-detected as raw
21 assert decoded == data
22}
23
24fn test_decompress_auto_detects_all_formats() {
25 data := 'multi-format detection test'.repeat(5).bytes()
26 assert decompress(compress(data)!)! == data
27 assert decompress(compress(data, format: .gzip)!)! == data
28 assert decompress(compress(data, format: .raw_deflate)!)! == data
29}
30
31fn test_wrapper_helpers_match_unified_api() {
32 data := 'wrapper compatibility'.repeat(8).bytes()
33 assert compress(data)! == compress(data, format: .zlib)!
34 assert compress_gzip(data)! == compress(data, format: .gzip)!
35 assert compress_raw(data)! == compress(data, format: .raw_deflate)!
36}
37
38fn test_roundtrip_repeated() {
39 data := 'abcabc'.repeat(100).bytes()
40 compressed := compress(data)!
41 assert compressed.len < data.len
42 assert decompress(compressed)! == data
43}
44
45fn test_bad_compression_method_fails() {
46 bad := [u8(0x79), 0x18, 0x00, 0x00, 0x00, 0x00]
47 decompress(bad) or {
48 assert err.msg().len > 0
49 return
50 }
51 assert false
52}
53
54fn test_corrupt_checksum_fails() {
55 mut enc := compress(('hello world').repeat(10).bytes())!
56 // flip a byte in the adler32 footer
57 enc[enc.len - 1] ^= 0xff
58 decompress(enc) or {
59 assert err.msg().contains('adler32')
60 return
61 }
62 assert false
63}
64