code wiki / (root) / nx_texr_chart_gate_t279.nx

nx_texr_chart_gate_t279.nx source

↩ module page · 66 lines · 4642 B

1// nx_texr_chart_gate_t279.nx -- Validates and processes chart data, checking vertex and triangle integrity before exporting to a file. 2import "nx_texr_chart_candidate_t279.nx" 3import "nx_gate_verdict.nx" 4func main(argc:i64,argv:*i64)->i64{ 5 if argc!=3{return 2} 6 let lp:*i64=sys_mmap_try(16) as *i64 7 let b:*u8=sys_read_file(argv[1] as *u8,lp);if b==(0 as *u8){return 3} 8 let c:*NtrChartContext=sys_mmap_try(__size_of(NtrChartContext)) as *NtrChartContext 9 let points:*NtrChartPoint=sys_mmap_try(3*__size_of(NtrChartPoint)) as *NtrChartPoint 10 let count:*i64=gv_ctr() 11 gv_check_eq("ratio half",ntr_chart_ratio_q16(1,2),32768,count) 12 gv_check_eq("ratio unwrapped repeats",ntr_chart_ratio_q16(5,2),163840,count) 13 gv_check_eq("zero denominator refuses",ntr_chart_ratio_q16(1,0),NTR_CHART_BAD,count) 14 gv_check_eq("overflow refuses",ntr_chart_ratio_q16(NTR_CHART_MAX,1),NTR_CHART_OVERFLOW,count) 15 gv_check_eq("regional floor pixel math",ntr_px_sub(32768,0,0,1,2,9,227,8,2048),32688,count) 16 let rc:i64=ntr_chart_init(b,lp[0],c) 17 gv_check_eq("actual source initializes",rc,0,count);if rc!=0{return 4} 18 var ok:i64=0;var rejected:i64=0;var micro:i64=0;var i:i64=0 19 while i<c.nv{ 20 let pr:i64=ntr_chart_point(c,i,points) 21 if pr==0{ok=ok+1;if points.micro_valid==1{micro=micro+1}}else{rejected=rejected+1} 22 i=i+1 23 } 24 nt_outs("CHART vertices=");nt_outn(c.nv);nt_outs(" mapped=");nt_outn(ok);nt_outs(" rejected=");nt_outn(rejected);nt_outs(" micro=");nt_outn(micro);nt_outs("\n") 25 gv_check_eq("vertex coverage complete",ok+rejected,c.nv,count) 26 gv_check("actual mapped vertices",ok>0,count) 27 var interiors:i64=0;var straddle:i64=0;var seam:i64=0;var bad:i64=0;i=0 28 while i<c.nt{ 29 let tr:i64=ntr_chart_triangle(c,i,points) 30 if tr==0{interiors=interiors+1}else{if tr==NTR_CHART_STRADDLE{straddle=straddle+1}else{if tr==NTR_CHART_SEAM{seam=seam+1}else{bad=bad+1}}} 31 i=i+1 32 } 33 nt_outs("CHART triangles=");nt_outn(c.nt);nt_outs(" interiors=");nt_outn(interiors);nt_outs(" straddle=");nt_outn(straddle);nt_outs(" seam=");nt_outn(seam);nt_outs(" invalid=");nt_outn(bad);nt_outs("\n") 34 gv_check_eq("triangle coverage complete",interiors+straddle+seam+bad,c.nt,count) 35 gv_check("interior witness",interiors>0,count) 36 gv_check("cross chart explicit witness",straddle>0,count) 37 gv_check_eq("negative vertex refuses",ntr_chart_point(c,0-1,points),NTR_CHART_BAD,count) 38 gv_check_eq("failed point not valid",points.joint,NTR_MISS,count) 39 let rowbytes:i64=__size_of(NtrChartPoint) 40 let data:*u8=sys_mmap_try(c.nv*rowbytes) 41 if (data as i64)<=0{return 3} 42 i=0;while i<c.nv{if ntr_chart_point(c,i,((data as i64)+i*rowbytes) as *NtrChartPoint)!=0{return 5};i=i+1} 43 let fd:i64=sys_openat_exclusive(argv[2] as *u8,MODE_0600);if fd<0{return 6} 44 var written:i64=0;while written<c.nv*rowbytes{let n:i64=sys_write(fd,((data as i64)+written) as *u8,c.nv*rowbytes-written);if n<=0{return 7};written=written+n};sys_close(fd);sys_munmap_direct(data,c.nv*rowbytes) 45 let w:*i64=b as *i64;let x:i64=c.x;let saved:i64=w[x+3] 46 let xe:i64=nxa_section_entry(b,lp[0],nxa_tag4("TEXC")) 47 w[x+3]=1 48 w[xe+3]=nxa_check2(1,((b as i64)+w[xe+1]) as *i64,w[xe+2]);w[3]=nxa_check2(1,((b as i64)+NT_HDR) as *i64,w[2]*4) 49 gv_check_eq("rectangle mode rejected",ntr_chart_init(b,lp[0],c),NTR_CHART_LAYOUT,count) 50 gv_check("failed init clears context",c.w==(0 as *i64),count) 51 w[x+3]=saved 52 w[xe+3]=nxa_check2(1,((b as i64)+w[xe+1]) as *i64,w[xe+2]);w[3]=nxa_check2(1,((b as i64)+NT_HDR) as *i64,w[2]*4) 53 gv_check_eq("restored source initializes",ntr_chart_init(b,lp[0],c),0,count) 54 let rr:i64=c.r;let re:i64=nxa_section_entry(b,lp[0],nxa_tag4("TEXR")) 55 let original_rank:i64=w[rr+NTR_HDR_WORDS+NTR_JOINT_WORDS+1] 56 let original_region:i64=w[rr+NTR_HDR_WORDS+NTR_JOINT_WORDS] 57 w[rr+NTR_HDR_WORDS+NTR_JOINT_WORDS]=w[rr+NTR_HDR_WORDS] 58 w[rr+NTR_HDR_WORDS+NTR_JOINT_WORDS+1]=w[rr+NTR_HDR_WORDS+1] 59 w[re+3]=nxa_check2(1,((b as i64)+w[re+1]) as *i64,w[re+2]);w[3]=nxa_check2(1,((b as i64)+NT_HDR) as *i64,w[2]*4) 60 gv_check_eq("duplicate region rank rejected",ntr_chart_init(b,lp[0],c),NTR_CHART_BAD,count) 61 w[rr+NTR_HDR_WORDS+NTR_JOINT_WORDS]=original_region;w[rr+NTR_HDR_WORDS+NTR_JOINT_WORDS+1]=original_rank 62 w[re+3]=nxa_check2(1,((b as i64)+w[re+1]) as *i64,w[re+2]);w[3]=nxa_check2(1,((b as i64)+NT_HDR) as *i64,w[2]*4) 63 gv_check_eq("null input rejected",ntr_chart_init(0 as *u8,lp[0],c),NTR_CHART_BAD,count) 64 sys_munmap_direct(points as *u8,3*__size_of(NtrChartPoint));sys_munmap_direct(c as *u8,__size_of(NtrChartContext));sys_munmap_direct(lp as *u8,16) 65 return gv_verdict("TEXR-CHART-T279",count,"Chart-interior coordinate mapping only; straddles and cylindrical seam interpolation unsupported") 66}