code wiki / _hdl_build / nx_prepared_motion_emit_gate_t316_gate.nx
nx_prepared_motion_emit_gate_t316_gate.nx source
↩ module page · 8 lines · 1328 B
1// nx_prepared_motion_emit_gate_t316_gate.nx -- independent contract gate for the prepared-motion emitter.
2// It verifies the generated API contains the required native-boundary and playback surface.
3import "nx_prepared_motion_candidate_t316.nx"
4import "nx_syscalls.nx"
5import "nx_gate_verdict.nx"
6const PMG_TESTS:i64 = 7
7func contains(h:*u8, hn:i64, n:*u8)->i64 { var nn:i64=0; while n[nn]!=(0 as u8){nn=nn+1}; if nn<=0||hn<nn{return 0}; var i:i64=0; while i<=hn-nn { var j:i64=0; while j<nn&&h[i+j]==n[j]{j=j+1}; if j==nn{return 1}; i=i+1 }; return 0 }
8func main(argc:i64,argv:*i64)->i64 { let s:*u8=nx_prepared_motion_js(); var n:i64=0; while s[n]!=(0 as u8){n=n+1}; var pass:i64=0; if n>0 {pass=pass+1}; if contains(s,n,"class NishiPreparedMotion" as *u8)==1 {pass=pass+1}; if contains(s,n,"gltf_pose_frame" as *u8)==1 {pass=pass+1}; if contains(s,n,"gltf_pose_bounds" as *u8)==1 {pass=pass+1}; if contains(s,n,"gltf_pose_broad_bounds" as *u8)==1 {pass=pass+1}; if contains(s,n,"rootMotion" as *u8)==1 {pass=pass+1}; if contains(s,n,"groundContact" as *u8)==1 {pass=pass+1}; let ctr:*i64=gv_ctr(); ctr[0]=pass; ctr[1]=PMG_TESTS; let rc:i64=gv_verdict("PREPARED-MOTION-EMIT-GATE" as *u8,ctr,"generated prepared-motion API is nonempty and exposes native pose, playback and contact contract" as *u8); sys_exit(rc); return rc }