code wiki / (root) / nx_adler32_real_test.nx

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}