code wiki / (root) / nx_uv_chart_reuse_gate_t280.nx

nx_uv_chart_reuse_gate_t280.nx source

↩ module page · 26 lines · 2631 B

1import "nx_uv_adaptive_prepare_candidate_t280.nx" 2import "nx_gate_verdict.nx" 3func ur_fixture()->*i64{ 4 let m:*i64=ncp_model_new(6,2);uv_set_vert(m,0,0,0,0);uv_set_vert(m,1,1000,0,0);uv_set_vert(m,2,0,1000,0);uv_set_vert(m,3,2000,0,0);uv_set_vert(m,4,3000,0,0);uv_set_vert(m,5,2000,1000,0);uv_set_tri(m,0,0,1,2);uv_set_tri(m,1,3,4,5);uv_chart_build(m);return m 5} 6func main()->i64{ 7 let ctr:*i64=gv_ctr();let old:*i64=ur_fixture();var next:*i64=ur_fixture() 8 var k:i64=0;while k<old[UV_H_NUV]{old[old[UV_O_WU]+k]=k*19;old[old[UV_O_WV]+k]=k*23;k=k+1};old[UV_H_STAGE]=UV_ST_SOLVED 9 let held:*i64=sys_mmap_try(old[UV_H_NUV]*2*8) as *i64;k=0;while k<old[UV_H_NUV]{held[k]=old[old[UV_O_WU]+k];held[old[UV_H_NUV]+k]=old[old[UV_O_WV]+k];k=k+1} 10 ua_measure_preserving_work(old);var badWork:i64=0;k=0;while k<old[UV_H_NUV]{if held[k]!=old[old[UV_O_WU]+k]{badWork=badWork+1};if held[old[UV_H_NUV]+k]!=old[old[UV_O_WV]+k]{badWork=badWork+1};k=k+1} 11 gv_check_eq("packing preserves original solver domain",badWork,0,ctr) 12 let cuv:*i64=sys_mmap_try(old[UV_H_NCORN]*2*8) as *i64;k=0;while k<old[UV_H_NCORN]*2{cuv[k]=old[old[UV_O_CUV]+k];k=k+1} 13 ua_measure_preserving_work(old);var packDrift:i64=0;k=0;while k<old[UV_H_NCORN]*2{if cuv[k]!=old[old[UV_O_CUV]+k]{packDrift=packDrift+1};k=k+1} 14 gv_check_eq("repeated packing exact corner identity",packDrift,0,ctr) 15 sys_munmap_direct(cuv as *u8,old[UV_H_NCORN]*2*8);sys_munmap_direct(held as *u8,old[UV_H_NUV]*2*8) 16 var ready:*i64=ua_reuse(old,next,0) 17 gv_check("reuse allocation succeeds",ready!=(0 as *i64),ctr);if ready==(0 as *i64){return 2} 18 gv_check_eq("changed chart never reused",ready[0],0,ctr);gv_check_eq("unchanged chart reused",ready[1],1,ctr) 19 var drift:i64=0;k=0;while k<3{let a:i64=uv_corner_class(old,1,k);let b:i64=uv_corner_class(next,1,k);if old[old[UV_O_WU]+a]!=next[next[UV_O_WU]+b]{drift=drift+1};if old[old[UV_O_WV]+a]!=next[next[UV_O_WV]+b]{drift=drift+1};k=k+1} 20 gv_check_eq("reused corner coordinates exact",drift,0,ctr);sys_munmap_direct(ready as *u8,uv_chart_count(next)*8);ncp_model_free(next) 21 next=ur_fixture();next[next[UV_O_VERT]+3*3]=2001;ready=ua_reuse(old,next,0) 22 gv_check_eq("changed geometry refuses reuse",ready[1],0,ctr);sys_munmap_direct(ready as *u8,uv_chart_count(next)*8);ncp_model_free(next) 23 next=ur_fixture();old[UV_H_STAGE]=UV_ST_CHARTS;ready=ua_reuse(old,next,0);gv_check_eq("uncomputed source refuses reuse",ready[1],0,ctr) 24 sys_munmap_direct(ready as *u8,uv_chart_count(next)*8);ncp_model_free(next);ncp_model_free(old) 25 return gv_verdict("UV-REUSE-T280",ctr,"Execution-local unchanged-chart reuse; policy and full UV acceptance remain separate") 26}