code wiki / _hdl_build / _dfl_comp_test.nx

_dfl_comp_test.nx source

↩ module page · 25 lines · 1353 B

1// _dfl_comp_test.nx -- proves rung-2 COMPRESSION: encode a repetitive buffer, assert round-trip 2// bit-exact via our inflate AND compressed size < original (LZ77 back-refs working). Prints sizes. 3import "nx_deflate_fixed.nx" 4import "nx_syscalls.nx" 5func cp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 6func cn(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; var k: i64=0; let t: *u8=sys_mmap(28); if m==0{t[0]=48;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1}; sys_write(1,b,k); return 0 } 7func main() -> i64 { 8 let n: i64 = 512 9 let src: *u8 = sys_mmap(n + 64) 10 var i: i64 = 0 11 while i < n { src[i] = (65 + (i % 4)) as u8; i = i + 1 } // "ABCD" repeating -> highly compressible 12 let enc: *u8 = sys_mmap(n * 4 + 64) 13 let m: i64 = dfl_encode(src, n, enc, n * 4 + 64) 14 let dec: *u8 = sys_mmap(n + 64) 15 let k: i64 = dfl_decode(enc, m, dec, n + 64) 16 var ok: i64 = 1 17 if k != n { ok = 0 } 18 var j: i64 = 0 19 while j < n { if dec[j] != src[j] { ok = 0 } j = j + 1 } 20 cp("DEFLATE rung2: n=" as *u8); cn(n); cp(" compressed=" as *u8); cn(m) 21 cp(" ratio_permil=" as *u8); cn(m * 1000 / n); cp(" roundtrip=" as *u8); cn(ok); cp("\n" as *u8) 22 if ok == 1 { if m < n { sys_exit(0) } } 23 sys_exit(1) 24 return 1 25}