v2 / vlib / compress / gzip / read_gz_files_test.v
62 lines · 51 sloc · 2.01 KB · 7040514a61b2021d651ae2af896cef650c37c66f
Raw
1import os
2import compress.gzip
3
4const samples_folder = os.join_path(os.dir(@FILE), 'samples')
5
6fn s(fname string) string {
7 return os.join_path(samples_folder, fname)
8}
9
10fn read_and_decode_file(fpath string) !([]u8, string) {
11 compressed := os.read_bytes(fpath)!
12 decoded := gzip.decompress(compressed)!
13 content := decoded.bytestr()
14 return compressed, content
15}
16
17fn test_reading_and_decoding_a_known_gziped_file() {
18 compressed, content := read_and_decode_file(s('known.gz'))!
19 assert compressed#[0..3] == [u8(31), 139, 8]
20 assert compressed#[-5..] == [u8(127), 115, 1, 0, 0]
21 assert content.contains('## Description')
22 assert content.contains('## Examples:')
23 assert content.ends_with('```\n')
24}
25
26fn test_decoding_all_samples_files() {
27 for gz_file in os.walk_ext(samples_folder, '.gz') {
28 _, content := read_and_decode_file(gz_file)!
29 assert content.len > 0, 'decoded content should not be empty: `${content}`'
30 }
31}
32
33fn test_reading_gzip_files_compressed_with_different_options() {
34 _, content1 := read_and_decode_file(s('readme_level_1.gz'))!
35 _, content5 := read_and_decode_file(s('readme_level_5.gz'))!
36 _, content9 := read_and_decode_file(s('readme_level_9.gz'))!
37 _, content9_rsyncable := read_and_decode_file(s('readme_level_9_rsyncable.gz'))!
38 assert content9_rsyncable == content9
39 assert content9 == content5
40 assert content5 == content1
41}
42
43fn test_compress_with_deferent_level() {
44 compressed := os.read_bytes(s('readme_level_9.gz'))!
45 content9 := gzip.decompress(compressed)!
46
47 // compression: Huffman only=0
48 compress_0 := gzip.compress(content9, compression_level: 0)!
49 decompress_0 := gzip.decompress(compress_0)!
50
51 // compression: default_max_probes=128
52 compress_128 := gzip.compress(content9)!
53 decompress_128 := gzip.decompress(compress_128)!
54
55 // compression: Huffman+LZ=4095(slowest/best compression)
56 compress_4095 := gzip.compress(content9, compression_level: 4095)!
57 decompress_4095 := gzip.decompress(compress_4095)!
58
59 assert content9 == decompress_0
60 assert content9 == decompress_128
61 assert content9 == decompress_4095
62}
63