nx_nxa_garment_bind_gate.nx source
↩ module page · 78 lines · 3968 B
1import "nx_gate_verdict.nx"
2import "nx_nxa_garment_bind_lib.nx"
3
4const BGT_VA: i64=12
5const BGT_GA: i64=28
6const BGT_WORDS: i64=38
7const BGT_QUERY_COUNT: i64=3
8const BGT_SENTINEL: i64=165
9
10func bgt_seal(h: *i64) -> i64 {
11 h[7]=nxa_check2(1,((h as i64)+BGT_VA*8) as *i64,16)
12 h[11]=nxa_check2(1,((h as i64)+BGT_GA*8) as *i64,10)
13 h[3]=nxa_check2(1,((h as i64)+32) as *i64,8)
14 return 0
15}
16func bgt_fixture(c: *i64) -> i64 {
17 let h: *i64=sys_mmap(BGT_WORDS*8) as *i64
18 let b: *u8=h as *u8
19 let out: *i64=sys_mmap((BGT_QUERY_COUNT+1)*8) as *i64
20 let need: i64=BGT_QUERY_COUNT*8
21 h[0]=nxa_magic();h[1]=NXA_VER;h[2]=2
22 h[4]=nxa_tag4("VERT" as *u8);h[5]=BGT_VA*8;h[6]=16
23 h[8]=nxa_tag4("GVRT" as *u8);h[9]=BGT_GA*8;h[10]=10
24 h[BGT_VA]=5;h[BGT_GA]=BGT_QUERY_COUNT
25 h[13]=0-2;h[15]=10;h[18]=10;h[19]=2;h[21]=10;h[27]=20
26 h[31]=9;h[37]=20
27 bgt_seal(h);out[BGT_QUERY_COUNT]=BGT_SENTINEL
28 gv_check_eq("binding byte count",ngb_map(b,BGT_WORDS*8,out as *u8,need,2,10),need,c)
29 gv_check_eq("equal-distance tie chooses first eligible",out[0],0,c)
30 gv_check_eq("below-band query excludes nearer low vertex",out[1],0,c)
31 gv_check_eq("exact high vertex",out[2],4,c)
32 gv_check_eq("destination guard",out[BGT_QUERY_COUNT],BGT_SENTINEL,c)
33 gv_check_eq("all-vertex policy accepted",ngb_map(b,BGT_WORDS*8,out as *u8,need,1,10),need,c)
34 gv_check_eq("all-vertex policy selects closer odd vertex",out[0],1,c)
35 gv_check_eq("zero-band policy accepted",ngb_map(b,BGT_WORDS*8,out as *u8,need,1,0),need,c)
36 gv_check_eq("zero-band exact low candidate",out[1],3,c)
37 out[0]=BGT_SENTINEL
38 gv_check_eq("short output refused",ngb_map(b,BGT_WORDS*8,out as *u8,need-1,2,10),NGP_E_OUTPUT,c)
39 gv_check_eq("source overlap refused",ngb_map(b,BGT_WORDS*8,b,need,2,10),NGP_E_OVERLAP,c)
40 gv_check_eq("zero stride refused",ngb_map(b,BGT_WORDS*8,out as *u8,need,0,10),NGB_E_POLICY,c)
41 gv_check_eq("negative band refused",ngb_map(b,BGT_WORDS*8,out as *u8,need,2,0-1),NGB_E_POLICY,c)
42 gv_check_eq("missing eligible candidate refused",ngb_map(b,BGT_WORDS*8,out as *u8,need,2,21),NGB_E_CANDIDATE,c)
43 gv_check_eq("all refusals preserve destination",out[0],BGT_SENTINEL,c)
44 h[37]=NGB_COORD_LIMIT+1;bgt_seal(h)
45 gv_check_eq("late inexact coordinate refused",ngb_map(b,BGT_WORDS*8,out as *u8,need,2,10),NGB_E_COORD,c)
46 gv_check_eq("late coordinate refusal preserves destination",out[0],BGT_SENTINEL,c)
47 h[37]=20;bgt_seal(h);h[13]=0-3
48 gv_check_eq("corrupt geometry refused",ngb_map(b,BGT_WORDS*8,out as *u8,need,2,10),0-3,c)
49 sys_munmap(b,BGT_WORDS*8);sys_munmap(out as *u8,(BGT_QUERY_COUNT+1)*8)
50 return 0
51}
52func main(argc: i64,argv: *i64) -> i64 {
53 let c: *i64=gv_ctr()
54 bgt_fixture(c)
55 if argc!=2 { gv_puts("usage: nx_nxa_garment_bind_gate <real-resident.nxa>\n");return 2 }
56 let len: *i64=sys_mmap(16) as *i64
57 let b: *u8=sys_map_file(argv[1] as *u8,len)
58 let at: i64=ngp_section(b,len[0],"GVRT" as *u8)
59 if at<0 { gv_check_eq("real garment section valid",at,0,c);return gv_verdict("GARMENT-BIND",c,"real asset missing") }
60 let h: *i64=b as *i64
61 let count: i64=h[at]
62 let need: i64=count*NGB_WORD
63 let output: *u8=sys_mmap(need+NGB_WORD)
64 // These are the incumbent loader's policy inputs, used only as a compatibility fixture.
65 let rc: i64=ngb_map(b,len[0],output,need,2,88000)
66 gv_check_eq("real resident binding prepared",rc,need,c)
67 if rc==need {
68 gv_puts("BIND-MAP count=");gv_num(count)
69 gv_puts(" checksum=");gv_num(nxa_check2(1,output as *i64,count));gv_puts("\n")
70 gv_puts("BIND-INDICES ")
71 let indices: *i64=output as *i64
72 var i: i64=0
73 while i<count { if i>0 { gv_puts(",") };gv_num(indices[i]);i=i+1 }
74 gv_puts("\n")
75 }
76 sys_munmap(output,need+NGB_WORD);sys_munmap(b,len[0]);sys_munmap(len as *u8,16)
77 return gv_verdict("GARMENT-BIND",c,"native binding only; browser integration pending")
78}