code wiki / (root) / nx_png_capacity_baseline_t278.nx

nx_png_capacity_baseline_t278.nx source

↩ module page · 28 lines · 1420 B

1import "nx_png.nx" 2import "nx_sha256.nx" 3import "nx_lib_std.nx" 4func pg_hash(b:*u8,n:i64)->i64 { 5 let d:*u8=sys_mmap_try(SHA256_DIGEST_BYTES);if (d as i64)<=0{return 0} 6 if sha256_digest_checked_native(b,n,d)!=0{return 0} 7 let hex:*u8="0123456789abcdef" as *u8;var i:i64=0 8 while i<SHA256_DIGEST_BYTES{let v:i64=d[i] as i64;sys_write(1,((hex as i64)+v/16) as *u8,1);sys_write(1,((hex as i64)+v%16) as *u8,1);i=i+1} 9 sys_munmap(d,SHA256_DIGEST_BYTES);return 1 10} 11func pg_case(w:i64,h:i64)->i64{ 12 let cap:i64=png_buf_cap(w,h);if cap<=0{return 0} 13 let n:i64=w*h;let fb:*i64=sys_mmap_try(n*8) as *i64;let b:*u8=sys_mmap_try(cap+2) 14 if (fb as i64)<=0 || (b as i64)<=0{return 0} 15 var i:i64=0;var seed:i64=17;while i<n{seed=(seed*1103515245+12345)&2147483647;fb[i]=seed&16777215;i=i+1} 16 b[0]=165 as u8;b[cap+1]=90 as u8;let out:*u8=((b as i64)+1) as *u8 17 let result:i64=write_png_buf(fb,w,h,out) 18 var ok:i64=1;if result<=0 || result>cap || b[0]!=(165 as u8) || b[cap+1]!=(90 as u8){ok=0} 19 std_puts("PNG-SHA " as *u8);pg_hash(out,result);std_putln("" as *u8) 20 out[0]=77 as u8 21 sys_munmap(fb as *u8,n*8);sys_munmap(b,cap+2);return ok 22} 23func main()->i64{ 24 var pass:i64=0;pass=pass+pg_case(1,1);pass=pass+pg_case(3,5);pass=pass+pg_case(64,65);pass=pass+pg_case(480,1) 25 if png_buf_cap(2048,2048)==18877631{pass=pass+1} 26 if pass!=5{std_putln("PNG-CAPACITY FAIL" as *u8);return 1} 27 std_putln("PNG-CAPACITY 5/5 PASS" as *u8);return 0 28}