nx_deflate_bytes_consumed_test.nx source
↩ module page · 90 lines · 2674 B
1// nx_deflate_bytes_consumed_test.nx -- check whether bytes_consumed
2// is correct for the 61-byte dynamic-Huffman fixture.
3//
4// nx_zlib_inflate uses bytes_consumed to compute the trailer offset:
5// trailer_off = 2 + def_r.bytes_consumed
6// If this is wrong by N, nx_zlib reads adler32 bytes from the wrong
7// position and reports MISMATCH.
8//
9// Expected: bytes_consumed == 61.
10
11import "nx_syscalls.nx"
12import "nx_deflate.nx"
13
14func main() -> i64 {
15 let dyn_in: *u8 = (sys_mmap(64)) as *u8
16 dyn_in[0] = 0xed as u8
17 dyn_in[1] = 0xce as u8
18 dyn_in[2] = 0x41 as u8
19 dyn_in[3] = 0x0d as u8
20 dyn_in[4] = 0x00 as u8
21 dyn_in[5] = 0x20 as u8
22 dyn_in[6] = 0x0c as u8
23 dyn_in[7] = 0x00 as u8
24 dyn_in[8] = 0xb1 as u8
25 dyn_in[9] = 0xf9 as u8
26 dyn_in[10] = 0x17 as u8
27 dyn_in[11] = 0x80 as u8
28 dyn_in[12] = 0x08 as u8
29 dyn_in[13] = 0x94 as u8
30 dyn_in[14] = 0x4c as u8
31 dyn_in[15] = 0x16 as u8
32 dyn_in[16] = 0x32 as u8
33 dyn_in[17] = 0xb8 as u8
34 dyn_in[18] = 0x47 as u8
35 dyn_in[19] = 0x93 as u8
36 dyn_in[20] = 0x0a as u8
37 dyn_in[21] = 0xe8 as u8
38 dyn_in[22] = 0xec as u8
39 dyn_in[23] = 0x3d as u8
40 dyn_in[24] = 0x41 as u8
41 dyn_in[25] = 0xf3 as u8
42 dyn_in[26] = 0x7d as u8
43 dyn_in[27] = 0xa0 as u8
44 dyn_in[28] = 0xa5 as u8
45 dyn_in[29] = 0xa5 as u8
46 dyn_in[30] = 0xa5 as u8
47 dyn_in[31] = 0xa5 as u8
48 dyn_in[32] = 0xa5 as u8
49 dyn_in[33] = 0xd5 as u8
50 dyn_in[34] = 0xa0 as u8
51 dyn_in[35] = 0xa5 as u8
52 dyn_in[36] = 0xa5 as u8
53 dyn_in[37] = 0x55 as u8
54 dyn_in[38] = 0xa0 as u8
55 dyn_in[39] = 0xa5 as u8
56 dyn_in[40] = 0xa5 as u8
57 dyn_in[41] = 0x55 as u8
58 dyn_in[42] = 0xa0 as u8
59 dyn_in[43] = 0xa5 as u8
60 dyn_in[44] = 0xa5 as u8
61 dyn_in[45] = 0x55 as u8
62 dyn_in[46] = 0xa0 as u8
63 dyn_in[47] = 0xa5 as u8
64 dyn_in[48] = 0xa5 as u8
65 dyn_in[49] = 0x55 as u8
66 dyn_in[50] = 0xa0 as u8
67 dyn_in[51] = 0xa5 as u8
68 dyn_in[52] = 0xa5 as u8
69 dyn_in[53] = 0x55 as u8
70 dyn_in[54] = 0xa0 as u8
71 dyn_in[55] = 0xa5 as u8
72 dyn_in[56] = 0xa5 as u8
73 dyn_in[57] = 0x55 as u8
74 dyn_in[58] = 0x10 as u8
75 dyn_in[59] = 0x6d as u8
76 dyn_in[60] = 0x3d as u8
77
78 let r: *NxDeflateResult = nx_deflate_inflate(dyn_in, 61, 8192)
79 if r == (0 as *NxDeflateResult) { return 200 }
80 if r.error_code != NX_DEF_OK { return 201 }
81
82 let bc: i64 = r.bytes_consumed
83 // Return the actual bytes_consumed value (0..199 is fine here
84 // since we expect ~61). +50 offset to distinguish from "no result"
85 // codes above.
86 if bc == 61 { return 0 }
87 if bc < 50 { return 50 }
88 if bc > 199 { return 199 }
89 return bc
90}