code wiki / (root) / nx_obj_exact_gate_t284.nx

nx_obj_exact_gate_t284.nx source

↩ module page · 97 lines · 8070 B

1// nx_obj_exact_gate_t284.nx -- Validates polygon and decimal data structures within the Nishi sovereign ecosystem. 2 3import "nx_obj_import.nx" 4import "nx_gate_verdict.nx" 5import "nx_meshcheck.nx" 6import "nx_sha256.nx" 7import "nx_fs_create_lib.nx" 8func oe_hash(p:*u8,n:i64)->i64{var d:*u8=sys_mmap_try(32);if (d as i64)==0{return -1};sha256_digest(p,n,d);let h:*u8="0123456789abcdef";var i:i64=0;while i<32{let b:i64=d[i] as i64;sys_write(1,(h as i64+b/16) as *u8,1);sys_write(1,(h as i64+b%16) as *u8,1);i=i+1};sys_munmap_direct(d,32);return 0} 9func oe_decimal(s:*u8,want:i64,exp:i64,rc:i64)->i64{var v:i64=991;var e:i64=992;let r:i64=oi_decimal_exact(s,vw_slen(s),&v,&e);if r!=rc{return 0};if r==0{if v!=want||e!=exp{return 0}}else{if v!=991||e!=992{return 0}};return 1} 10func oe_text(s:*u8,want:i64,vcap:i64,fcap:i64)->i64{ 11 var o:OiExactView;let v:*i64=sys_mmap_try(32*__size_of(i64)) as *i64;let f:*i64=sys_mmap_try(32*__size_of(i64)) as *i64 12 if (v as i64)==0||(f as i64)==0{return 0};v[31]=7123;f[31]=7124 13 let rc:i64=oi_read_exact_bytes(s,vw_slen(s),v,f,vcap,fcap,&o) 14 var ok:i64=1;if rc!=want||o.status!=want||v[31]!=7123||f[31]!=7124{ok=0} 15 sys_munmap_direct(v as *u8,32*__size_of(i64));sys_munmap_direct(f as *u8,32*__size_of(i64));return ok 16} 17 18func oe_polygon()->i64 { 19 let s:*u8="v 0 0 0\nv 1 0 0\nv 2 0 0\nv 3 0 0\nv 4 0 0\nv 5 0 0\nv 6 0 0\nv 7 0 0\nv 8 0 0\nv 9 0 0\nv 10 0 0\nv 11 0 0\nv 12 0 0\nv 13 0 0\nv 14 0 0\nv 15 0 0\nv 16 0 0\nv 17 0 0\nv 18 0 0\nv 19 0 0\nv 20 0 0\nv 21 0 0\nv 22 0 0\nv 23 0 0\nv 24 0 0\nv 25 0 0\nv 26 0 0\nv 27 0 0\nv 28 0 0\nv 29 0 0\nv 30 0 0\nv 31 0 0\nv 32 0 0\nv 33 0 0\nv 34 0 0\nv 35 0 0\nv 36 0 0\nv 37 0 0\nv 38 0 0\nv 39 0 0\nv 40 0 0\nv 41 0 0\nv 42 0 0\nv 43 0 0\nv 44 0 0\nv 45 0 0\nv 46 0 0\nv 47 0 0\nv 48 0 0\nv 49 0 0\nv 50 0 0\nv 51 0 0\nv 52 0 0\nv 53 0 0\nv 54 0 0\nv 55 0 0\nv 56 0 0\nv 57 0 0\nv 58 0 0\nv 59 0 0\nv 60 0 0\nv 61 0 0\nv 62 0 0\nv 63 0 0\nv 64 0 0\nf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65\n" 20 var o:OiExactView 21 let rc:i64=oi_read_exact_bytes(s,vw_slen(s),0 as *i64,0 as *i64,0,0,&o) 22 if rc!=-3||o.nv!=65||o.nt!=63||o.sourceFaces!=1||o.polygonFaces!=1||o.fanTriangles!=63||o.triangulation!=OIE_FAN_UNQUALIFIED{return 0} 23 let vb:i64=o.nv*3*__size_of(i64);let fb:i64=o.nt*3*__size_of(i64) 24 let v:*i64=sys_mmap_try(vb) as *i64;let f:*i64=sys_mmap_try(fb) as *i64 25 if (v as i64)==0||(f as i64)==0{return 0} 26 var ok:i64=1 27 if oi_read_exact_bytes(s,vw_slen(s),v,f,65,63,&o)!=0{ok=0} 28 var i:i64=0;while i<63{if f[i*3]!=0||f[i*3+1]!=i+1||f[i*3+2]!=i+2{ok=0};i=i+1} 29 sys_munmap_direct(v as *u8,vb);sys_munmap_direct(f as *u8,fb);return ok 30} 31 32func main(argc:i64,argv:*i64)->i64{ 33 let ctr:*i64=gv_ctr() 34 gv_check("polygon beyond legacy64 retains63 triangles",oe_polygon(),ctr) 35 gv_check("decimal negative overflow",oe_decimal("-9223372036854775809",0,0,OIE_RANGE),ctr) 36 gv_check("decimal exponent adjustment overflow",oe_decimal("100e9223372036854775807",0,0,OIE_RANGE),ctr) 37 gv_check("decimal double point",oe_decimal("1..2",0,0,OIE_SYNTAX),ctr) 38 gv_check("decimal malformed full token",oe_decimal("1e2x",0,0,OIE_SYNTAX),ctr) 39 gv_check("face index overflow",oe_text("v 0 0 0\nf 9223372036854775808 1 1\n",OIE_RANGE,1,1),ctr) 40 gv_check("truncated vertex token",oe_text("v",OIE_SYNTAX,1,1),ctr) 41 gv_check("CRLF and slash reference",oe_text("v 0 0 0\r\nv 1 0 0\r\nv 0 1 0\r\nf 1//1 2/1/1 3/1/1\r\n",0,3,1),ctr) 42 gv_check("sign-only positive vt refused",oe_text("v 0 0 0\nv 1 0 0\nv 0 1 0\nf 1/+/1 2//1 3//1\n",OIE_SYNTAX,3,1),ctr) 43 gv_check("sign-only negative vt refused",oe_text("v 0 0 0\nv 1 0 0\nv 0 1 0\nf 1/-/1 2//1 3//1\n",OIE_SYNTAX,3,1),ctr) 44 gv_check("sign-only final normal refused",oe_text("v 0 0 0\nv 1 0 0\nv 0 1 0\nf 1/1/+ 2//1 3//1\n",OIE_SYNTAX,3,1),ctr) 45 gv_check("decimal full precision",oe_decimal("+.0000012300",123,-8,0),ctr) 46 gv_check("decimal exponent",oe_decimal("-1.234567890123456789e+2",-1234567890123456789,-16,0),ctr) 47 gv_check("decimal trailing point",oe_decimal("1.",1,0,0),ctr) 48 gv_check("decimal signed min",oe_decimal("-9223372036854775808",OIE_MIN,0,0),ctr) 49 gv_check("decimal signed max",oe_decimal("9223372036854775807",OIE_MAX,0,0),ctr) 50 gv_check("decimal zero",oe_decimal("-0.000e20",0,0,0),ctr) 51 gv_check("decimal overflow",oe_decimal("9223372036854775808",0,0,OIE_RANGE),ctr) 52 gv_check("decimal exponent overflow",oe_decimal("1e9223372036854775808",0,0,OIE_RANGE),ctr) 53 gv_check("decimal malformed exponent",oe_decimal("1e-",0,0,OIE_SYNTAX),ctr) 54 gv_check("decimal underscore refused",oe_decimal("1_2",0,0,OIE_SYNTAX),ctr) 55 gv_check("decimal suffix refused",oe_decimal("1.2f64",0,0,OIE_SYNTAX),ctr) 56 gv_check("decimal no digits",oe_decimal(".",0,0,OIE_SYNTAX),ctr) 57 let tri:*u8="v 0 0 0\nv .000001 0 0\nv 0 .000001 0\nf -3 -2 -1" 58 gv_check("triangle exact and no newline",oe_text(tri,0,3,1),ctr) 59 gv_check("vertex capacity",oe_text(tri,-3,2,1),ctr) 60 gv_check("face capacity",oe_text(tri,-4,3,0),ctr) 61 gv_check("missing axis",oe_text("v 0 0\n",-6,3,1),ctr) 62 gv_check("invalid index",oe_text("v 0 0 0\nf 1 2 3\n",-5,3,1),ctr) 63 gv_check("homogeneous coordinate unsupported",oe_text("v 0 0 0 1\n",-6,3,1),ctr) 64 gv_check("precision dynamic range",oe_text("v 1e100 1e-100 0\n",-7,1,0),ctr) 65 if argc!=2{return 2} 66 var sn:i64=0;let src:*u8=sys_map_file(argv[1] as *u8,&sn);if (src as i64)==0{return 3} 67 var o:OiExactView 68 let sizing:i64=oi_read_exact_bytes(src,sn,0 as *i64,0 as *i64,0,0,&o) 69 if sizing!=-3{return 4} 70 let vb:i64=o.nv*3*__size_of(i64);let fb:i64=o.nt*3*__size_of(i64) 71 let v:*i64=sys_mmap_try(vb) as *i64;let f:*i64=sys_mmap_try(fb) as *i64 72 if (v as i64)==0||(f as i64)==0{return 5} 73 let nv:i64=o.nv;let nt:i64=o.nt 74 let rc:i64=oi_read_exact(argv[1] as *u8,v,f,nv,nt,&o) 75 gv_check("Bunny exact import",rc==0&&o.nv==35947&&o.nt==69451&&o.exponent10==-6&&o.sourceFaces==69451&&o.polygonFaces==0&&o.fanTriangles==0&&o.triangulation==OIE_TRIANGLES_ONLY,ctr) 76 var maximum:i64=0;var i:i64=0;var safe:i64=1 77 while i<nv*3{var a:i64=v[i];if a==OIE_MIN{safe=0}else{if a<0{a=0-a};if a>maximum{maximum=a}};i=i+1} 78 // Every cross component <= 2*(2M)^2 = 8*M*M. Check via divisions before products. 79 if maximum>0{if maximum>OIE_MAX/maximum/8{safe=0}} 80 gv_check("Bunny cross-product range proved",safe==1,ctr) 81 if safe!=1{return 6} 82 let out:*i64=sys_mmap_try(MC_O_SLOTS*__size_of(i64)) as *i64 83 let list:*i64=sys_mmap_try(mc_list_slots()*__size_of(i64)) as *i64 84 if (out as i64)==0||(list as i64)==0{return 7} 85 let verdict:i64=mc_check(v,nv,f,nt,out,list) 86 gv_check("Bunny zero introduced collapsed faces",out[MC_O_DEGEN_AREA]==0,ctr) 87 fsx_puts("EXACT sourceSha256=");oe_hash(src,sn);fsx_puts(" verticesSha256=");oe_hash(v as *u8,vb);fsx_puts(" indicesSha256=");oe_hash(f as *u8,fb) 88 fsx_puts(" sourceFaces=");fsx_putn(o.sourceFaces);fsx_puts(" polygonFaces=");fsx_putn(o.polygonFaces);fsx_puts(" fanTriangles=");fsx_putn(o.fanTriangles);fsx_puts(" triangulation=");fsx_putn(o.triangulation);fsx_puts(" exponent10=");fsx_putn(o.exponent10);fsx_puts(" maxAbs=");fsx_putn(maximum);fsx_puts(" topologySlots=") 89 i=0;while i<MC_O_SLOTS{if i>0{fsx_puts(",")};fsx_putn(out[i]);i=i+1};fsx_puts("\n") 90 var counts0:i64=0;let counts:*i64=sys_mmap_try(2*__size_of(i64)) as *i64 91 let legacy:i64=oi_read(argv[1] as *u8,v,f,nv,nt,counts) 92 gv_check("legacy still callable",legacy==0&&counts[0]==nv&&counts[1]==nt&&OI_FX==1024,ctr) 93 mc_check(v,nv,f,nt,out,list);gv_check("legacy collapse remains explicit",out[MC_O_DEGEN_AREA]==2011,ctr) 94 fsx_puts("LEGACY verticesSha256=");oe_hash(v as *u8,vb);fsx_puts(" indicesSha256=");oe_hash(f as *u8,fb);fsx_puts("\n") 95 sys_munmap_direct(src,sn);sys_munmap_direct(v as *u8,vb);sys_munmap_direct(f as *u8,fb);sys_munmap_direct(out as *u8,MC_O_SLOTS*__size_of(i64));sys_munmap_direct(list as *u8,mc_list_slots()*__size_of(i64));sys_munmap_direct(counts as *u8,2*__size_of(i64)) 96 return gv_verdict("OBJ-EXACT",ctr,"source-space precision only; units UV materials normals occlusion unqualified") 97}