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}