nx_rigbench_motion_gate.nx source
↩ module page · 91 lines · 6428 B
1// Native rigbench temporal and consumer negative controls.
2import "nx_rigbench_motion.nx"
3import "nx_gate_verdict.nx"
4import "nx_readcap_lib.nx"
5const RBG_JOINTS: i64 = 1
6const RBG_ANIM_WORDS: i64 = 8
7const RBG_END: i64 = 1000
8const RBG_MID: i64 = 500
9const RBG_TRANSLATION_MM: i64 = 100
10const RBG_KNIGHT_JOINTS: i64 = 113
11func main() -> i64 {
12 gv_head("=== rigbench temporal readiness and consumer binding ===" as *u8)
13 let c: *i64 = gv_ctr()
14 let anim: *i64 = sys_mmap(RBG_ANIM_WORDS*RBM_BYTES) as *i64
15 anim[0]=1;anim[1]=0;anim[2]=NA_CH2;anim[3]=2
16 anim[4]=0;anim[5]=NA_Q12
17 anim[6]=RBG_END;anim[7]=NA_Q12 | (RBG_TRANSLATION_MM << NA_LANE_B1)
18 let skel: *i64=sys_mmap(NA_SKEL_W*RBM_BYTES) as *i64
19 var k: i64=0
20 while k < NA_SKEL_W { skel[k]=0;k=k+1 }
21 skel[0]=0-1
22 let idx: *i64=sys_mmap(NA_IDX_W*RBM_BYTES) as *i64
23 let rv: *i64=sys_mmap(NA_RV_W*RBM_BYTES) as *i64
24 let a: *i64=sys_mmap(NA_ROW_W*RBM_BYTES) as *i64
25 let b: *i64=sys_mmap(NA_ROW_W*RBM_BYTES) as *i64
26 let neg: *i64=sys_mmap(NA_ROW_W*RBM_BYTES) as *i64
27 let scr: *i64=sys_mmap(NA_SCR_W*RBM_BYTES) as *i64
28 let rep: *i64=sys_mmap(RBM_R_WORDS*RBM_BYTES) as *i64
29 gv_check_eq("authored midpoint pair contains changing motion" as *u8,rb_motion_pair(anim,RBG_ANIM_WORDS,skel,RBG_JOINTS,0,RBG_MID,idx,rv,a,b,scr,rep),RBM_OK,c)
30 gv_check_eq("one changed joint" as *u8,rep[RBM_R_CHANGED],1,c)
31 gv_check_eq("initial identity is explicit" as *u8,rep[RBM_R_NONIDENTITY_A],0,c)
32 gv_check_eq("midpoint nonidentity is explicit" as *u8,rep[RBM_R_NONIDENTITY_B],1,c)
33 gv_check_eq("consumer absent remains unknown" as *u8,rep[RBM_R_CONSUMER_RC],RBM_ABSTAIN,c)
34 gv_check_eq("known midpoint translation dual x" as *u8,b[RBM_QUAT],(RBG_TRANSLATION_MM*NA_DT_MM_TO_MODEL/2)*NA_Q12/2,c)
35 gv_check_eq("matching consumer samples qualify only row agreement" as *u8,rb_motion_consumer(a,b,a,b,RBG_JOINTS,rep),RBM_OK,c)
36 gv_check_eq("identity consumer refuses even when asset moves" as *u8,rb_motion_consumer(a,b,a,a,RBG_JOINTS,rep),RBM_REFUSE,c)
37 k=0
38 while k < NA_ROW_W { neg[k]=0-b[k];k=k+1 }
39 gv_check_eq("simultaneous dual quaternion sign is equivalent" as *u8,rb_motion_row_equal(b,neg,RBG_JOINTS,0),1,c)
40 anim[7]=NA_Q12
41 gv_check_eq("identity clip cannot qualify motion" as *u8,rb_motion_pair(anim,RBG_ANIM_WORDS,skel,RBG_JOINTS,0,RBG_MID,idx,rv,a,b,scr,rep),RBM_ABSTAIN,c)
42 gv_check_eq("static reason retained" as *u8,rep[RBM_R_REASON],RBM_REASON_STATIC,c)
43 gv_check_eq("static matching consumer cannot acquit" as *u8,rb_motion_consumer(a,b,a,b,RBG_JOINTS,rep),RBM_ABSTAIN,c)
44 gv_check_eq("identical sample times refused" as *u8,rb_motion_pair(anim,RBG_ANIM_WORDS,skel,RBG_JOINTS,0,0,idx,rv,a,b,scr,rep),RBM_REFUSE,c)
45 gv_check_eq("truncated animation refused" as *u8,rb_motion_pair(anim,RBG_ANIM_WORDS-1,skel,RBG_JOINTS,0,RBG_MID,idx,rv,a,b,scr,rep),RBM_REFUSE,c)
46 let lp: *i64=sys_mmap(RBM_BYTES) as *i64
47 let knight: *u8=sys_read_file("/volume1/homes/elderwesto/nishihost/sites/nishifamily/world/dark_knight.nxa" as *u8,lp)
48 gv_check("served Knight read" as *u8,((knight as i64)!=0) as i64,c)
49 if (knight as i64)!=0 {
50 gv_check_eq("real Knight absent animation abstains" as *u8,rb_motion_asset(knight,lp[0],0,RBG_MID,RBG_KNIGHT_JOINTS,rep),RBM_ABSTAIN,c)
51 gv_check_eq("real Knight retains absent ANIM reason" as *u8,rep[RBM_R_REASON],RBM_REASON_NO_ANIM,c)
52 gv_check_eq("real Knight joint count measured" as *u8,rep[RBM_R_JOINTS],RBG_KNIGHT_JOINTS,c)
53 }
54 let resident: *u8=sys_read_file("/volume1/homes/elderwesto/nishihost/sites/nishifamily/world/ref9e.nxa" as *u8,lp)
55 gv_check("served resident read" as *u8,((resident as i64)!=0) as i64,c)
56 if (resident as i64)!=0 {
57 let before: i64=nxa_check2(1,resident as *i64,lp[0]/RBM_BYTES)
58 let rc: i64=rb_motion_asset(resident,lp[0],0,RBG_MID,RBG_KNIGHT_JOINTS,rep)
59 gv_check_eq("real resident sampled temporal motion exists" as *u8,rc,RBM_OK,c)
60 gv_check("real resident changed joint population nonempty" as *u8,(rep[RBM_R_CHANGED]>0) as i64,c)
61 gv_kv("real_resident_changed_joints" as *u8,rep[RBM_R_CHANGED])
62 gv_kv("real_resident_tracked_joints" as *u8,rep[RBM_R_TRACKED])
63 gv_kv("real_resident_duration_ms" as *u8,rep[RBM_R_DURATION])
64 gv_check_eq("real asset readiness does not claim scene binding" as *u8,rep[RBM_R_CONSUMER_RC],RBM_ABSTAIN,c)
65 gv_check_eq("real asset bytes unchanged" as *u8,nxa_check2(1,resident as *i64,lp[0]/RBM_BYTES),before,c)
66 gv_check_eq("joint request budget refuses real resident" as *u8,rb_motion_asset(resident,lp[0],0,RBG_MID,1,rep),RBM_REFUSE,c)
67 gv_check_eq("malformed short header refuses" as *u8,rb_motion_asset(resident,31,0,RBG_MID,RBG_KNIGHT_JOINTS,rep),RBM_REFUSE,c)
68 let skentry: i64=nxa_section_entry(resident,lp[0],nxa_tag4("SKEL" as *u8))
69 let rw: *i64=resident as *i64
70 let skoff: i64=rw[skentry+1]/RBM_BYTES
71 let oldcount: i64=rw[skoff]
72 let oldcheck: i64=rw[skentry+3]
73 rw[skoff]=oldcount+1
74 rw[skentry+3]=nxa_check2(1,((resident as i64)+rw[skentry+1]) as *i64,rw[skentry+2])
75 // The TOC checksum also binds the changed section checksum.
76 let oldtoc: i64=rw[3]
77 rw[3]=nxa_check2(1,((resident as i64)+32) as *i64,rw[2]*4)
78 gv_check_eq("checksummed invalid count refuses" as *u8,rb_motion_asset(resident,lp[0],0,RBG_MID,RBG_KNIGHT_JOINTS,rep),RBM_REFUSE,c)
79 rw[skoff]=oldcount;rw[skentry+3]=oldcheck;rw[3]=oldtoc
80 gv_check_eq("malformed fixture restores original asset" as *u8,nxa_check2(1,resident as *i64,lp[0]/RBM_BYTES),before,c)
81 let capbytes: i64=lp[0]-1
82 let limited: *u8=sys_mmap(capbytes)
83 let rst: *i64=sys_mmap(3*RBM_BYTES) as *i64
84 let got: i64=rc_read_file_into("/volume1/homes/elderwesto/nishihost/sites/nishifamily/world/ref9e.nxa" as *u8,limited,capbytes,rst)
85 gv_check_eq("explicit byte budget read stops at cap" as *u8,got,capbytes,c)
86 gv_check_eq("one byte too small is TRUNCATED not exact" as *u8,rst[0],RC_FULL,c)
87 gv_check_eq("truncated budget cannot qualify completeness" as *u8,rc_complete(rst),0,c)
88 sys_munmap(limited,capbytes);sys_munmap(rst as *u8,3*RBM_BYTES)
89 }
90 return gv_verdict("RIGBENCH-MOTION-T21" as *u8,c,"sampled temporal rows; scene visibility unqualified" as *u8)
91}