nx_adler32_real_test.nx source
↩ module page · 55 lines · 2007 B
1// nx_adler32_real_test.nx -- isolate whether adler32 OR deflate output
2// is wrong for the 50x50 PNG roundtrip.
3//
4// Setup: build the EXPECTED 7550-byte raw output (50 scanlines, each
5// = 0x00 filter + 50 RGB (200,170,150) triples) in nx. Compute
6// adler32 over it. Expected value per Python: 0xAC61D73E.
7//
8// If nx_adler32 returns 0xAC61D73E -> adler is fine, the bug is in
9// nx_deflate output (it produces subtly wrong bytes somewhere we
10// didn't sample). If it returns something else -> nx_adler32 is the
11// bug.
12
13import "nx_syscalls.nx"
14import "nx_adler32.nx"
15
16func main() -> i64 {
17 // Build 7550-byte expected raw: 50 * (1 + 50*3) = 7550
18 let expected_size: i64 = 7550
19 let buf: *u8 = (sys_mmap(expected_size as nx_size)) as *u8
20 let stride: i64 = 1 + 50 * 3 // 151
21 var y: i64 = 0
22 while y < 50 {
23 let row_off: i64 = y * stride
24 buf[row_off] = 0 as u8 // filter byte
25 var x: i64 = 0
26 while x < 50 {
27 let p: i64 = row_off + 1 + x * 3
28 buf[p] = 200 as u8 // R = 0xc8
29 buf[p + 1] = 170 as u8 // G = 0xaa
30 buf[p + 2] = 150 as u8 // B = 0x96
31 x = x + 1
32 }
33 y = y + 1
34 }
35
36 let got: i64 = adler32(buf, expected_size)
37 let expected: i64 = 0xAC61D73E
38
39 if got == expected { return 0 }
40
41 // Disambiguate so we can see WHAT it returned.
42 // Map common bug patterns to distinct exit codes.
43 if got == 1 { return 11 } // unchanged seed -> didn't iterate at all
44 if got == 0 { return 12 } // wrong reset
45 // Otherwise return high vs low half mismatch markers:
46 let exp_a: i64 = expected & 0xFFFF
47 let exp_b: i64 = (expected >> 16) & 0xFFFF
48 let got_a: i64 = got & 0xFFFF
49 let got_b: i64 = (got >> 16) & 0xFFFF
50 if got_a != exp_a {
51 if got_b == exp_b { return 21 } // only s1 (a) wrong
52 return 22 // both wrong
53 }
54 return 23 // only s2 (b) wrong
55}