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}