code wiki / (root) / nx_nxa_corner_prepare_gate_t280.nx

nx_nxa_corner_prepare_gate_t280.nx source

↩ module page · 50 lines · 3923 B

1import "nx_nxa_corner_prepare_candidate_t280.nx" 2import "nx_gate_verdict.nx" 3func main(argc:i64,argv:*i64)->i64{ 4 let ctr:*i64=gv_ctr() 5 let m:*i64=ncp_model_new(4,2);if m==(0 as *i64){return 3} 6 uv_set_vert(m,0,0,0,0);uv_set_vert(m,1,1000,0,0);uv_set_vert(m,2,1000,1000,0);uv_set_vert(m,3,0,1000,0) 7 uv_set_tri(m,0,0,1,2);uv_set_tri(m,1,0,2,3) 8 let s:*i64=sys_mmap_try(24) as *i64;s[0]=1;s[1]=0;s[2]=2 9 gv_check_eq("explicit diagonal seam accepted",ncp_seams(m,s,3),UV_OK,ctr) 10 let rc:i64=uv_unwrap(m);gv_check_eq("two chart fixture solves",rc,UV_OK,ctr) 11 let len:*i64=sys_mmap_try(16) as *i64 12 let b:*u8=ncp_emit(m,"fixture" as *u8,7,rc,len);if b==(0 as *u8){return 4} 13 let p:*i64=b as *i64 14 gv_check_eq("all six corners retained",p[6],6,ctr) 15 gv_check_eq("all six corners qualified",p[10],6,ctr) 16 gv_check_eq("first source corner",p[NCP_HEADER+2],0,ctr) 17 gv_check_eq("second chart preserves shared source vertex",p[NCP_HEADER+3*NCP_ROW+2],0,ctr) 18 gv_check("shared source vertex has separate chart IDs",p[NCP_HEADER+3]!=p[NCP_HEADER+3*NCP_ROW+3],ctr) 19 gv_check_eq("anatomical assignment remains unknown",p[27],0,ctr) 20 gv_check_eq("source bytes unchanged length",p[21],7,ctr) 21 sys_munmap_direct(b,len[0]);ncp_model_free(m) 22 let bad:*i64=ncp_model_new(4,1);uv_set_vert(bad,0,0,0,0);uv_set_vert(bad,1,1000,0,0);uv_set_vert(bad,2,0,1000,0);uv_set_vert(bad,3,0,0,1000);uv_set_tri(bad,0,0,1,2) 23 s[2]=3;gv_check_eq("nonexistent source edge rejected",ncp_seams(bad,s,3),UV_E_ARGS,ctr) 24 s[0]=2;gv_check_eq("truncated seam payload rejected",ncp_seams(bad,s,3),UV_E_ARGS,ctr) 25 uv_set_tri(bad,0,0,0,2);let badrc:i64=uv_unwrap(bad) 26 gv_check_eq("actual degenerate triangle refuses",badrc,UV_E_TOPOLOGY,ctr) 27 let refused:*u8=ncp_emit(bad,"fixture" as *u8,7,badrc,len) 28 let r:*i64=refused as *i64;gv_check_eq("failed solver retains all corners",r[6],3,ctr);gv_check_eq("failed solver qualifies no UVs",r[10],0,ctr);gv_check_eq("unmeasured metrics remain unknown",r[14],0-1,ctr) 29 sys_munmap_direct(refused,len[0]);ncp_model_free(bad) 30 if argc>=3{ 31 let source:*u8=sys_read_file(argv[1] as *u8,len);let n:i64=len[0] 32 if source==(0 as *u8){return 5} 33 gv_puts("NCP stage=source-load\n");let real:*i64=ncp_model_nxa(source,n);if real==(0 as *i64){return 6} 34 if argc>=4{let sb:*u8=sys_read_file(argv[3] as *u8,len);if sb==(0 as *u8){return 7};if len[0]%8!=0{return 7};if ncp_seams(real,sb as *i64,len[0]/8)!=UV_OK{return 7}} 35 gv_puts("NCP stage=chart-build\n");var result:i64=uv_chart_build(real) 36 gv_puts("NCP chart-build-result=");gv_num(result);gv_puts("\n") 37 if argc==5{if result==UV_OK{gv_puts("NCP stage=conformal\n");result=uv_conformal(real)};if result==UV_OK{gv_puts("NCP stage=distortion\n");result=uv_distortion(real)};if result==UV_OK{result=uv_overlap_check(real)}} 38 let packet:*u8=ncp_emit(real,source,n,result,len);if packet==(0 as *u8){return 8} 39 let q:*i64=packet as *i64 40 gv_puts("NCP actual triangles=");gv_num(q[5]);gv_puts(" corners=");gv_num(q[6]);gv_puts(" validCorners=");gv_num(q[10]);gv_puts(" stage=");gv_num(q[7]);gv_puts(" verdict=");gv_num(q[8]);gv_puts(" topology=");gv_num(q[12]);gv_puts(" charts=");gv_num(q[9]);gv_puts("\n") 41 gv_check_eq("actual every triangle retained",q[6],real[UV_H_NT]*3,ctr) 42 var same:i64=1;var t:i64=0;while t<real[UV_H_NT]{var k:i64=0;while k<3{if q[NCP_HEADER+(t*3+k)*NCP_ROW+2]!=uv_ti(real,t,k){same=0};k=k+1};t=t+1} 43 gv_check_eq("actual exact source indices",same,1,ctr) 44 let fd:i64=sys_openat_exclusive(argv[2] as *u8,MODE_0600);if fd<0{return 9} 45 var wrote:i64=0;while wrote<len[0]{let c:i64=sys_write(fd,((packet as i64)+wrote) as *u8,len[0]-wrote);if c<=0{sys_close(fd);return 10};wrote=wrote+c};sys_close(fd) 46 sys_munmap_direct(packet,len[0]);ncp_model_free(real) 47 } 48 sys_munmap_direct(s as *u8,24);sys_munmap_direct(len as *u8,16) 49 return gv_verdict("NCP-T280",ctr,"Per-corner source preservation; actual solver refusal is retained, not a whole-atlas pass") 50}