code wiki / _hdl_build / nx_craft_journal_index_gate_t21.nx

nx_craft_journal_index_gate_t21.nx source

↩ module page · 125 lines · 9417 B

1// Actual estate engine over a private arena; no filesystem/network operations. 2import "nx_wasm_craft_journal_index_t21.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 jg_reference_put(base: i64, ax: i64, ay: i64, az: i64, b: i64) -> i64 { 14 if ej_key_representable(ax,ay,az) == 0 { return 0-2 } 15 if b < 0 || b > 255 { return 0-2 } 16 let e: *i64 = ejp(base) 17 let k: i64 = ej_key(ax, ay, az) 18 let kv: i64 = ((k + 1) << 8) | b 19 var i: i64 = (k * EJRN_HASH_MUL) & (EJRN_SLOTS - 1) 20 var n: i64 = 0 21 var empty: i64 = 0-1 22 var matched: i64 = 0 23 // Old writers could duplicate a key because of signed comparison. Retain every slot, 24 // updating matching duplicates together so the existing ascending overlay stays coherent. 25 while n < EJRN_SLOTS { 26 let cur: i64 = e[i] 27 if cur == 0 { if empty < 0 { empty=i } } 28 if ej_tag_matches(cur,k) == 1 { e[i]=kv;matched=1 } 29 i = (i + 1) & (EJRN_SLOTS - 1) 30 n = n + 1 31 } 32 if matched == 1 { return 1 } 33 if empty < 0 { return 0-1 } 34 e[empty]=kv 35 return 1 36} 37func main() -> i64 { 38 let arena: *u8=sys_mmap(CRAFT_EXT_TOTAL);let copy: *u8=sys_mmap(EJRN_BYTES);let save: *u8=sys_mmap(SAVE_LEN) 39 if (arena as i64)<=0||(copy as i64)<=0||(save as i64)<=0 { return 3 } 40 let base: i64=arena as i64;let e: *i64=ejp(base);let ctr: *i64=gv_ctr() 41 gv_head("EDIT JOURNAL / packed tag, retained duplicate and wire bounds" as *u8) 42 init_impl_v(base,2,123) 43 var coord: i64=0-1 44 while coord<=1 { 45 jg_clear(base) 46 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) 47 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) 48 coord=coord+1 49 } 50 jg_clear(base) 51 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) 52 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) 53 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) 54 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) 55 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) 56 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) 57 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) 58 jg_clear(base);jg_copy(copy,(base+O_EJRN) as *u8,EJRN_BYTES) 59 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) 60 let key: i64=ej_key(48,43,101) 61 let bucket: i64=(key*EJRN_HASH_MUL)&(EJRN_SLOTS-1) 62 gv_check("fixture really hashes to wrapping bucket8189" as *u8,bucket==EJRN_SLOTS-3,ctr) 63 e[EJRN_SLOTS-3]=((key+1)<<8)|6 64 e[EJRN_SLOTS-2]=((key+1)<<8)|7 65 e[EJRN_SLOTS-1]=((key+1)<<8)|9 66 e[0]=((key+1)<<8)|3 67 let unrelated: i64=((ej_key(12,24,12)+1)<<8)|5 68 e[17]=unrelated 69 vset(base,48,43,101,0);ej_overlay(base,0,WX,0,WZ) 70 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) 71 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) 72 vset(base,48,43,101,0);ej_overlay(base,0,WX,0,WZ) 73 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) 74 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) 75 init_impl_v(base,2,123);jg_copy((base+O_SAVE) as *u8,save,n) 76 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) 77 vset(base,48,43,101,0);ej_overlay(base,0,WX,0,WZ) 78 gv_check("post-reload overlay retains newest duplicate value" as *u8,vget(base,48,43,101)==11,ctr) 79 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) 80 vset(base,48,43,101,6);ej_overlay(base,0,WX,0,WZ) 81 gv_check("air overlay removes voxel while keeping journal evidence" as *u8,vget(base,48,43,101)==0&&jg_count(base)==5,ctr) 82 var i: i64=0;while i<EJRN_SLOTS { e[i]=((ej_key(i,0,0)+1)<<8)|6;i=i+1 } 83 jg_copy(copy,(base+O_EJRN) as *u8,EJRN_BYTES) 84 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) 85 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) 86 87 let guard_left: *i64 = (base+O_EJ_INDEX-8) as *i64 88 let guard_right: *i64 = (base+CRAFT_TOTAL) as *i64 89 guard_left[0]=173;guard_right[0]=173 90 jg_copy(copy,(base+O_EJRN) as *u8,EJRN_BYTES) 91 gv_check("index reservation fits below static and leaves animation offsets" as *u8,CRAFT_TOTAL<=CRAFT_STATIC_BASE&&O_NXA==CRAFT_STATIC_LIMIT&&CRAFT_TOTAL-O_EJ_INDEX==(EJ_INDEX_BUCKETS+EJRN_SLOTS)*8,ctr) 92 gv_check("insufficient scratch capacity refuses before any write" as *u8,(ej_batch_begin(base,CRAFT_TOTAL-1) as i64)==0&&guard_left[0]==173&&guard_right[0]==173&&jg_equal(copy,(base+O_EJRN) as *u8,EJRN_BYTES)==1,ctr) 93 let context: *i64=ej_batch_begin(base,CRAFT_EXT_TOTAL) 94 gv_check("index build preserves persisted slots and both boundary guards" as *u8,(context as i64)>0&&jg_equal(copy,(base+O_EJRN) as *u8,EJRN_BYTES)==1&&guard_left[0]==173&&guard_right[0]==173,ctr) 95 gv_check("full-store indexed update and refusal preserve lookup" as *u8,ej_index_put(base,context,1,0,0,7)==1&&ej_index_get(base,context,1,0,0)==7&&ej_index_put(base,context,0-1,24,1,6)==(0-1),ctr) 96 jg_clear(base) 97 let collision: *i64=ej_batch_begin(base,CRAFT_EXT_TOTAL) 98 gv_check("negative and high-X fixture really collide in transient index" as *u8,ej_index_bucket((ej_key(0-1,24,1)+1)<<8)==ej_index_bucket((ej_key(4163,24,1)+1)<<8),ctr) 99 gv_check("colliding new inserts remain distinct across repeated updates" as *u8,ej_index_put(base,collision,0-1,24,1,6)==1&&ej_index_put(base,collision,4163,24,1,7)==1&&ej_index_put(base,collision,0-1,24,1,0)==1&&ej_index_get(base,collision,0-1,24,1)==0&&ej_index_get(base,collision,4163,24,1)==7&&jg_count(base)==2,ctr) 100 let reference: *u8=sys_mmap(CRAFT_EXT_TOTAL) 101 if (reference as i64)<=0 { return 3 } 102 let rb: i64=reference as i64 103 jg_clear(base);jg_clear(rb) 104 e[0]=((ej_key(48,43,101)+1)<<8)|3 105 e[EJRN_SLOTS-1]=((ej_key(48,43,101)+1)<<8)|9 106 jg_copy((rb+O_EJRN) as *u8,(base+O_EJRN) as *u8,EJRN_BYTES) 107 let batch: *i64=ej_batch_begin(base,CRAFT_EXT_TOTAL) 108 var agrees: i64=1 109 var step: i64=0 110 while step<512 { 111 let x: i64=(step*37)%129-64 112 let y: i64=step%48 113 let z: i64=(step*19)%127-63 114 let b: i64=step%17 115 if ej_index_put(base,batch,x,y,z,b)!=jg_reference_put(rb,x,y,z,b) { agrees=0 } 116 if ej_index_put(base,batch,48,43,101,b)!=jg_reference_put(rb,48,43,101,b) { agrees=0 } 117 if jg_equal((rb+O_EJRN) as *u8,(base+O_EJRN) as *u8,EJRN_BYTES)!=1 { agrees=0 } 118 step=step+1 119 } 120 gv_check("1024 indexed mutations equal full-scan reference byte for byte after every operation pair" as *u8,agrees==1,ctr) 121 gv_values_head();gv_kv("index_bytes" as *u8,CRAFT_TOTAL-O_EJ_INDEX);gv_kv("craft_total" as *u8,CRAFT_TOTAL);gv_kv("static_base" as *u8,CRAFT_STATIC_BASE);gv_kv("remaining_arena_slack" as *u8,CRAFT_STATIC_BASE-CRAFT_TOTAL) 122 sys_munmap(reference,CRAFT_EXT_TOTAL) 123 sys_munmap(arena,CRAFT_EXT_TOTAL);sys_munmap(copy,EJRN_BYTES);sys_munmap(save,SAVE_LEN) 124 return gv_verdict("EDIT-JOURNAL" as *u8,ctr,"persisted format unchanged; bounded batch index; actual WASM workload and layout qualification required" as *u8) 125}