code wiki / (root) / nx_deflate_bytes_consumed_test.nx

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}