nx_uv_harmonic_gate_t280.nx source
↩ module page · 35 lines · 2335 B
1import "nx_uv_harmonic_candidate_t280.nx"
2import "nx_gate_verdict.nx"
3func ucp_fixture(kind:i64)->*i64{
4 var nv:i64=4;var nt:i64=2;if kind==1{nv=5;nt=4}
5 let m:*i64=ncp_model_new(nv,nt);if m==(0 as *i64){return m}
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 if kind==0{uv_set_tri(m,0,0,1,2);uv_set_tri(m,1,0,2,3);uv_seam_set(m,0,2)}
8 if kind==1{uv_set_vert(m,4,500,500,1000);uv_set_tri(m,0,0,1,4);uv_set_tri(m,1,1,2,4);uv_set_tri(m,2,2,3,4);uv_set_tri(m,3,3,0,4)}
9 if uv_chart_build(m)!=UV_OK{ncp_model_free(m);return 0 as *i64};return m
10}
11
12func main(argc:i64,argv:*i64)->i64{
13 let ctr:*i64=gv_ctr();var kind:i64=0
14 while kind<2{
15 let m:*i64=ucp_fixture(kind);let q:*i64=uds_prepare(m);if q==(0 as *i64){return 3}
16 gv_check("missing validated cut topology refused",ulh_begin(m,0 as *i64,0,0.00000001)==(0 as *UvGramSolve),ctr)
17 var c:i64=0
18 while c<uv_chart_count(m){
19 let s:*UvGramSolve=ulh_begin(m,q,c,0.00000001);if s==(0 as *UvGramSolve){return 4}
20 let held:*f64=sys_mmap_try(s.n*2*8) as *f64;if (held as i64)<=0{return 5}
21 var i:i64=0;while i<s.n*2{held[i]=s.x[i];i=i+1}
22 var rc:i64=s.result;if rc==UV_E_NOTRUN{rc=uls_step(s,256)}
23 gv_check_eq("positive Laplacian fixture converges",rc,UV_OK,ctr)
24 var drift:i64=0;i=0;while i<s.n{if s.boundary[i]>0{if s.x[i]!=held[i]{drift=drift+1};if s.x[s.n+i]!=held[s.n+i]{drift=drift+1}};i=i+1}
25 gv_check_eq("all Dirichlet boundary coordinates remain fixed",drift,0,ctr)
26 gv_check_eq("converged work coordinates exported",uls_export(s),UV_OK,ctr)
27 if kind==1{i=0;while i<s.n{if m[m[UV_O_UVSRC]+s.classes[i]]==4{gv_check("symmetric pyramid apex maps to circle center",s.x[i]==0.0&&s.x[s.n+i]==0.0,ctr)};i=i+1}}
28 sys_munmap_direct(held as *u8,s.n*2*8);uls_free(s);c=c+1
29 }
30 let packed:i64=uvi_atlas(m);gv_check_eq("fixture atlas packs",packed,UV_OK,ctr)
31 if packed==UV_OK{m[UV_H_STAGE]=UV_ST_SOLVED;gv_check_eq("fixture atlas distortion gate accepts",uv_distortion(m),UV_OK,ctr);gv_check_eq("fixture no flipped triangles",uv_flipped(m),0,ctr);gv_check_eq("fixture no collapsed triangles",uv_uvdegen(m),0,ctr)}
32 ncp_model_free(q);ncp_model_free(m);kind=kind+1
33 }
34 return gv_verdict("UV-HARMONIC-T280",ctr,"Development fixtures and fixed-boundary contracts; actual resident acceptance remains separate")
35}