code wiki / (root) / nx_uv_gram_solver_gate_t280.nx

nx_uv_gram_solver_gate_t280.nx source

↩ module page · 37 lines · 2390 B

1import "nx_uv_gram_solver_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} 11func ucp_budget(s:*u8)->i64{ 12 var i:i64=0;var v:i64=0 13 while s[i]!=(0 as u8){let c:i64=(s[i] as i64)-48;if c<0{return 0-1};if c>9{return 0-1};if v>(NCP_MAX-c)/10{return 0-1};v=v*10+c;i=i+1} 14 if v<1{return 0-1};return v 15} 16 17func main(argc:i64,argv:*i64)->i64{ 18 let ctr:*i64=gv_ctr();gv_check("native sqrt four is two",uls_sqrt(4.0)==2.0,ctr);gv_check("native finite classifier",uls_finite(4.0)==1,ctr);gv_check_eq("numeric float-to-int conversion",__f64_to_i64(uls_sqrt(4.0)),2,ctr);gv_check("numeric int-to-float conversion",__f64_from_i64(1000)==1000.0,ctr);var kind:i64=0 19 while kind<2{ 20 let m:*i64=ucp_fixture(kind);if m==(0 as *i64){return 3} 21 gv_check("zero tolerance refused",uls_begin(m,0,0.0)==(0 as *UvGramSolve),ctr) 22 var c:i64=0 23 while c<uv_chart_count(m){ 24 let s:*UvGramSolve=uls_begin(m,c,0.00000001);if s==(0 as *UvGramSolve){return 4} 25 gv_puts("GRAM state matvecs=");gv_num(s.matvecs);gv_puts(" n=");gv_num(s.n);gv_puts(" nt=");gv_num(s.nt);gv_puts("\n");var rc:i64=s.result;if rc==UV_E_NOTRUN{rc=uls_step(s,256)} 26 gv_puts("GRAM fixture=");gv_num(kind);gv_puts(" chart=");gv_num(c);gv_puts(" iterations=");gv_num(s.iterations);gv_puts(" result=");gv_num(rc);gv_puts("\n") 27 gv_check_eq("fixture converges",rc,UV_OK,ctr) 28 gv_check("true residual meets RHS relative contract",s.trueNorm2<=s.rhsNorm2*s.tolerance2,ctr) 29 gv_check("first pin unchanged",s.x[s.pa]==0.0,ctr);gv_check("second pin unchanged",s.x[s.pb]==__f64_from_i64(UV_PIN_SPAN),ctr) 30 gv_check_eq("converged export succeeds",uls_export(s),UV_OK,ctr) 31 gv_check_eq("zero work budget refused",uls_step(s,0),UV_E_ARGS,ctr) 32 uls_free(s);c=c+1 33 } 34 ncp_model_free(m);kind=kind+1 35 } 36 return gv_verdict("UV-GRAM-T280",ctr,"Development fixtures; convergence is not complete atlas qualification") 37}