nx_gltf_hierarchy_gate_t181.nx source
↩ module page · 27 lines · 3093 B
1import "nx_gltf_pose_candidate_t181.nx"
2func gp(s:*u8)->i64{sys_write(1,s,gll_slen(s));return 0}
3func gn(v:i64)->i64{let b:*u8=sys_mmap(32);var x:i64=v;var i:i64=31;if x<0{gp("-");x=0-x};if x==0{b[i]=48 as u8;i=i-1};while x>0{b[i]=(48+x%10) as u8;x=x/10;i=i-1};sys_write(1,(b as i64+i+1) as *u8,31-i);sys_munmap(b,32);return 0}
4
5func gtesth(j:*u8,expected:i64)->i64 {
6 let jn:i64=gll_slen(j);let padded:i64=(jn+3)/4*4;let n:i64=28+padded+128;let src:*u8=sys_mmap(n)
7 glp_u32(src,0,0x46546c67);glp_u32(src,4,2);glp_u32(src,8,n);glp_u32(src,12,padded);glp_u32(src,16,0x4e4f534a)
8 var i:i64=0;while i<jn{src[20+i]=j[i];i=i+1};while i<padded{src[20+i]=32 as u8;i=i+1}
9 glp_u32(src,20+padded,128);glp_u32(src,24+padded,0x004e4942)
10 let cx:*i64=sys_mmap(GLD_CONTEXT_WORDS*8) as *i64;let view:*i64=sys_mmap(GLD_VIEW_WORDS*8) as *i64
11 var rc:i64=gltf_view_open(src,n,cx);if rc==0{let st:*i64=cx[5] as *i64;let count:i64=st[5];let parents:*i64=sys_mmap(count*8) as *i64;let local:*i64=sys_mmap(count*128) as *i64;let world:*i64=sys_mmap(count*128) as *i64;let done:*i64=sys_mmap(count*8) as *i64;var ni:i64=0;while ni<count{gld_identity((local as i64+ni*128) as *i64);ni=ni+1};rc=gld_parents(cx,count,parents);if rc==0{rc=gld_world_matrices(count,parents,local,world,done)};sys_munmap(parents as *u8,count*8);sys_munmap(local as *u8,count*128);sys_munmap(world as *u8,count*128);sys_munmap(done as *u8,count*8)}
12 var ok:i64=0;if rc==expected{ok=1};gp("fixture rc=");gn(rc);gp(" expected=");gn(expected);gp("
13")
14 gltf_view_close(cx);sys_munmap(cx as *u8,GLD_CONTEXT_WORDS*8);sys_munmap(view as *u8,GLD_VIEW_WORDS*8);sys_munmap(src,n);return ok
15}
16func main()->i64{var passed:i64=0;
17passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{},{}]}",0)
18passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[1]},{\"children\":[2]},{}]}",0)
19passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[1]},{\"children\":[0]}]}",-4)
20passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[0]}]}",-2)
21passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[2]},{}]}",-2)
22passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[1,1]},{}]}",-2)
23passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[2]},{\"children\":[2]},{}]}",-2)
24passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":\"bad\"}]}",-1)
25passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[0.5]}]}",-2)
26passed=passed+gtesth("{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":128}],\"nodes\":[{\"children\":[\"1\"]},{}]}",-2)
27gp("HIERARCHY_FIXTURES=");gn(passed);gp("/10\n");if passed!=10{return 1};return 0}