code wiki / _hdl_build / nx_craft_journal_repair_gate_t20.nx

nx_craft_journal_repair_gate_t20.nx source

↩ module page · 64 lines · 5720 B

1// Actual estate engine over a private arena; no filesystem/network operations. 2import "nx_wasm_craft_recovery_t20.nx" 3import "nx_gate_verdict.nx" 4func jg_copy(dst: *u8,src: *u8,n: i64) -> i64 { var i: i64=0;while i<n { dst[i]=src[i];i=i+1 };return n } 5func jg_equal(a: *u8,b: *u8,n: i64) -> i64 { var i: i64=0;while i<n { if a[i]!=b[i] { return 0 };i=i+1 };return 1 } 6func jg_clear(base: i64) -> i64 { let e: *i64=ejp(base);var i: i64=0;while i<EJRN_SLOTS { e[i]=0;i=i+1 };return 0 } 7func jg_count(base: i64) -> i64 { let e: *i64=ejp(base);var i: i64=0;var n: i64=0;while i<EJRN_SLOTS { if e[i]!=0 { n=n+1 };i=i+1 };return n } 8func jg_refused(base: i64,copy: *u8,x: i64,y: i64,z: i64,b: i64) -> i64 { 9 jg_copy(copy,(base+O_EJRN) as *u8,EJRN_BYTES) 10 let rc: i64=ej_put(base,x,y,z,b) 11 return rc==(0-2)&&jg_equal(copy,(base+O_EJRN) as *u8,EJRN_BYTES)==1 12} 13func main() -> i64 { 14 let arena: *u8=sys_mmap(CRAFT_EXT_TOTAL);let copy: *u8=sys_mmap(EJRN_BYTES);let save: *u8=sys_mmap(SAVE_LEN) 15 if (arena as i64)<=0||(copy as i64)<=0||(save as i64)<=0 { return 3 } 16 let base: i64=arena as i64;let e: *i64=ejp(base);let ctr: *i64=gv_ctr() 17 gv_head("EDIT JOURNAL / packed tag, retained duplicate and wire bounds" as *u8) 18 init_impl_v(base,2,123) 19 var coord: i64=0-1 20 while coord<=1 { 21 jg_clear(base) 22 gv_check("negative/zero/positive coordinates roundtrip" as *u8,ej_put(base,coord,24,coord,6)==1&&ej_get(base,coord,24,coord)==6,ctr) 23 gv_check("repeated update reuses slot and supports air" as *u8,ej_put(base,coord,24,coord,0)==1&&ej_get(base,coord,24,coord)==0&&jg_count(base)==1,ctr) 24 coord=coord+1 25 } 26 jg_clear(base) 27 gv_check("minimum coordinate wire roundtrip" as *u8,ej_put(base,0-WATER_MAGIC_16777216,0,0-WATER_MAGIC_16777216,0)==1&&ej_get(base,0-WATER_MAGIC_16777216,0,0-WATER_MAGIC_16777216)==0,ctr) 28 gv_check("upper representable key retains signed packed tag and air" as *u8,ej_put(base,WATER_MAGIC_16777216-1,62,WATER_MAGIC_16777216-1,255)==1&&ej_get(base,WATER_MAGIC_16777216-1,62,WATER_MAGIC_16777216-1)==255&&ej_put(base,WATER_MAGIC_16777216-1,62,WATER_MAGIC_16777216-1,0)==1&&ej_get(base,WATER_MAGIC_16777216-1,62,WATER_MAGIC_16777216-1)==0,ctr) 29 gv_check("all-ones coordinate key cannot alias empty sentinel" as *u8,jg_refused(base,copy,WATER_MAGIC_16777216-1,63,WATER_MAGIC_16777216-1,0)&&jg_refused(base,copy,WATER_MAGIC_16777216-1,63,WATER_MAGIC_16777216-1,6),ctr) 30 gv_check("x outside packed range refused without mutation" as *u8,jg_refused(base,copy,0-WATER_MAGIC_16777216-1,0,0,6)&&jg_refused(base,copy,WATER_MAGIC_16777216,0,0,6),ctr) 31 gv_check("z outside packed range refused without mutation" as *u8,jg_refused(base,copy,0,0,0-WATER_MAGIC_16777216-1,6)&&jg_refused(base,copy,0,0,WATER_MAGIC_16777216,6),ctr) 32 gv_check("y outside six-bit range refused without mutation" as *u8,jg_refused(base,copy,0,0-1,0,6)&&jg_refused(base,copy,0,64,0,6),ctr) 33 gv_check("block outside byte range refused without mutation" as *u8,jg_refused(base,copy,0,0,0,0-1)&&jg_refused(base,copy,0,0,0,256),ctr) 34 jg_clear(base);jg_copy(copy,(base+O_EJRN) as *u8,EJRN_BYTES) 35 gv_check("off-window player edit cannot journal an unapplied voxel" as *u8,wc_edit(base,WX,0,0,6)==0&&jg_equal(copy,(base+O_EJRN) as *u8,EJRN_BYTES)==1,ctr) 36 let key: i64=ej_key(48,43,101) 37 let bucket: i64=(key*EJRN_HASH_MUL)&(EJRN_SLOTS-1) 38 gv_check("fixture really hashes to wrapping bucket8189" as *u8,bucket==EJRN_SLOTS-3,ctr) 39 e[EJRN_SLOTS-3]=((key+1)<<8)|6 40 e[EJRN_SLOTS-2]=((key+1)<<8)|7 41 e[EJRN_SLOTS-1]=((key+1)<<8)|9 42 e[0]=((key+1)<<8)|3 43 let unrelated: i64=((ej_key(12,24,12)+1)<<8)|5 44 e[17]=unrelated 45 vset(base,48,43,101,0);ej_overlay(base,0,WX,0,WZ) 46 gv_check("legacy wrapped duplicates preserve highest-slot overlay winner" as *u8,ej_get(base,48,43,101)==9&&vget(base,48,43,101)==9,ctr) 47 gv_check("update touches all retained duplicate slots and no unrelated row" as *u8,ej_put(base,48,43,101,11)==1&&jg_count(base)==5&&e[17]==unrelated&&(e[0]&255)==11&&(e[EJRN_SLOTS-3]&255)==11&&(e[EJRN_SLOTS-2]&255)==11&&(e[EJRN_SLOTS-1]&255)==11,ctr) 48 vset(base,48,43,101,0);ej_overlay(base,0,WX,0,WZ) 49 gv_check("lookup and overlay agree after duplicate update" as *u8,ej_get(base,48,43,101)==11&&vget(base,48,43,101)==11,ctr) 50 let n: i64=wc_save_build(base);jg_copy(save,(base+O_SAVE) as *u8,n);jg_copy(copy,(base+O_EJRN) as *u8,EJRN_BYTES) 51 init_impl_v(base,2,123);jg_copy((base+O_SAVE) as *u8,save,n) 52 gv_check("authentic reload retains every legacy slot and resolved lookup" as *u8,wc_save_apply(base)==0&&jg_equal(copy,(base+O_EJRN) as *u8,EJRN_BYTES)==1&&ej_get(base,48,43,101)==11,ctr) 53 vset(base,48,43,101,0);ej_overlay(base,0,WX,0,WZ) 54 gv_check("post-reload overlay retains newest duplicate value" as *u8,vget(base,48,43,101)==11,ctr) 55 gv_check("air edit updates retained duplicate slots without deletion" as *u8,ej_put(base,48,43,101,0)==1&&jg_count(base)==5&&ej_get(base,48,43,101)==0,ctr) 56 vset(base,48,43,101,6);ej_overlay(base,0,WX,0,WZ) 57 gv_check("air overlay removes voxel while keeping journal evidence" as *u8,vget(base,48,43,101)==0&&jg_count(base)==5,ctr) 58 var i: i64=0;while i<EJRN_SLOTS { e[i]=((ej_key(i,0,0)+1)<<8)|6;i=i+1 } 59 jg_copy(copy,(base+O_EJRN) as *u8,EJRN_BYTES) 60 gv_check("full unrelated journal refuses insertion atomically" as *u8,ej_put(base,0-1,24,1,6)==(0-1)&&jg_equal(copy,(base+O_EJRN) as *u8,EJRN_BYTES)==1,ctr) 61 gv_check("existing key remains updateable in full journal" as *u8,ej_put(base,1,0,0,3)==1&&ej_get(base,1,0,0)==3&&jg_count(base)==EJRN_SLOTS,ctr) 62 sys_munmap(arena,CRAFT_EXT_TOTAL);sys_munmap(copy,EJRN_BYTES);sys_munmap(save,SAVE_LEN) 63 return gv_verdict("EDIT-JOURNAL" as *u8,ctr,"format unchanged; maximum all-ones key refused; full8192-slot scan cost requires separate measurement" as *u8) 64}