code wiki / (root) / nx_gm_xpbd_audit_t138.nx

nx_gm_xpbd_audit_t138.nx source

↩ module page · 55 lines · 3031 B

1// Private observation gate; GREEN means defects reproduced, NOT solver acceptance. 2import "nx_gm_cloth_lib.nx" 3import "nx_gate_verdict.nx" 4func ca_reset(v: *i64, w: *i64) -> i64 { 5 var i:i64=0 6 while i<6 {v[i]=0;w[i]=0;i=i+1} 7 v[3]=2000 8 return 0 9} 10func ca_print(s:*u8,n:i64)->i64 {gv_puts(s);gv_num(n);gv_puts("\n" as *u8);return 0} 11func main()->i64 { 12 let ctr:*i64=gv_ctr() 13 let v:*i64=sys_mmap(48) as *i64 14 let w:*i64=sys_mmap(48) as *i64 15 let bank:*i64=sys_mmap(48) as *i64 16 let e:*i64=sys_mmap(32) as *i64 17 let p:*i64=sys_mmap(8) as *i64 18 e[0]=0;e[1]=1;e[2]=1000;e[3]=GM_C_STRUCT;p[0]=0 19 ca_reset(v,w) 20 gm_xpbd_step_banked(v,w,2,e,1,p,0,0,ST_DT_REF_US,1,0,0,bank) 21 let rigid:i64=gm_dist(v,0,1) 22 ca_print("rigid_free_free_actual=" as *u8,rigid) 23 gv_check("OBS rigid one-edge distance1500 versus analytic1000" as *u8,rigid==1500,ctr) 24 ca_reset(v,w) 25 gm_xpbd_step_banked(v,w,2,e,1,p,1,0,ST_DT_REF_US,1,0,0,bank) 26 ca_print("rigid_pin_free_actual=" as *u8,gm_dist(v,0,1)) 27 gv_check("OBS pinned/free denominator still2 gives1500 versus1000" as *u8,gm_dist(v,0,1)==1500 && v[0]==0,ctr) 28 ca_print("alpha_relative1_dsum2=" as *u8,st_alpha_tilde(4096,2,ST_DT_REF_US)) 29 ca_print("alpha_relative1_dsum8192=" as *u8,st_alpha_tilde(4096,8192,ST_DT_REF_US)) 30 gv_check("OBS helper returns dsum units2 not8192" as *u8,st_alpha_tilde(4096,2,ST_DT_REF_US)==2,ctr) 31 ca_reset(v,w) 32 gm_xpbd_step_banked(v,w,2,e,1,p,0,0,ST_DT_REF_US,1,4096,4096,bank) 33 let soft1:i64=gm_dist(v,0,1) 34 ca_print("soft_iteration1=" as *u8,soft1) 35 ca_reset(v,w) 36 gm_xpbd_step_banked(v,w,2,e,1,p,0,0,ST_DT_REF_US,8,4096,4096,bank) 37 let soft8:i64=gm_dist(v,0,1) 38 ca_print("soft_iteration8=" as *u8,soft8) 39 gv_check("OBS compliant equilibrium shrinks with iterations; analytic1500 remains" as *u8,soft1>soft8 && soft8<1500,ctr) 40 ca_reset(v,w);v[3]=1000 41 gm_xpbd_step_banked(v,w,2,e,1,p,0,0,ST_DT_REF_US,8,4096,4096,bank) 42 gv_check("CONTROL rest edge stays1000" as *u8,gm_dist(v,0,1)==1000,ctr) 43 v[0]=0;v[1]=0;v[2]=0;w[0]=0;w[1]=7;w[2]=0 44 let hit0:i64=gm_capsule_project(v,w,1,0,0,0-1000,0,0,1000,100) 45 ca_print("axis_hit=" as *u8,hit0);ca_print("axis_radial_squared=" as *u8,v[0]*v[0]+v[1]*v[1]) 46 gv_check("OBS capsule axis reports hit but remains inside" as *u8,hit0==1 && v[0]==0 && v[1]==0,ctr) 47 v[0]=50;v[1]=0;v[2]=0;w[0]=7;w[1]=11;w[2]=0 48 let hit1:i64=gm_capsule_project(v,w,1,0,0,0-1000,0,0,1000,100) 49 ca_print("nonaxis_projected_x=" as *u8,v[0]);ca_print("outward_velocity_after=" as *u8,w[0]);ca_print("tangent_velocity_after=" as *u8,w[1]) 50 gv_check("OBS contact zeroes outward and tangent velocity" as *u8,hit1==1 && v[0]==102 && w[0]==0 && w[1]==0,ctr) 51 v[0]=200;v[1]=0;v[2]=0;w[0]=7;w[1]=11;w[2]=0 52 let hit2:i64=gm_capsule_project(v,w,1,0,0,0-1000,0,0,1000,100) 53 gv_check("CONTROL outside contact leaves position and velocity" as *u8,hit2==0 && v[0]==200 && w[0]==7 && w[1]==11,ctr) 54 return gv_verdict("GM-XPBD-AUDIT-DEFECT-OBSERVATION" as *u8,ctr,"Observation fixture only. XPBD and complete contact acceptance remain RED; unchanged canonical owner." as *u8) 55}