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}