nx_wflow_bind_event_gate_t282.nx source
↩ module page · 36 lines · 2192 B
1import "nx_wflow_engine.nx"
2import "nx_gate_verdict.nx"
3func main(argc:i64,argv:*i64)->i64{
4 if argc!=3{return 2}
5 let kn:i64=wf_atoi(argv[1] as *u8);let vn:i64=wf_atoi(argv[2] as *u8)
6 if kn<=0||vn<=0{return 2}
7 let key:*u8=sys_mmap_try(kn+1);let value:*u8=sys_mmap_try(vn+1)
8 if (key as i64)<=0||(value as i64)<=0{return 3}
9 var i:i64=0;while i<kn{key[i]=(97+i%26) as u8;i=i+1};key[kn]=0
10 i=0;while i<vn{value[i]=(65+i%26) as u8;i=i+1};value[vn]=0
11 let event:*u8=sys_mmap_try(slen("event~=" as *u8)+kn+vn+1)
12 var o:i64=wf_cat(event,0,"event~" as *u8);o=wf_cat(event,o,key);o=wf_cat(event,o,"=" as *u8);o=wf_cat(event,o,value);event[o]=0
13 let prefix:*u8="knowledge/gates/wflow-event-t282-"
14 let path:*u8=sys_mmap_try(slen(prefix)+__size_of(i64)*3+1)
15 o=wf_cat(path,0,prefix);o=wf_catn(path,o,__syscall(39,0,0,0,0,0,0));path[o]=0
16 let cx:*i64=sys_mmap_try(__size_of(i64)*3) as *i64;cx[2]=path as i64
17 let beforeSize:*i64=sys_mmap_try(__size_of(i64)) as *i64
18 let before:*u8=wf_readall(path,beforeSize)
19 var prior:i64=0;if (before as i64)>0{prior=beforeSize[0]}
20 let c:*i64=gv_ctr()
21 gv_check_eq("bind full event",wf_bind_event(cx,"review",event),1,c)
22 let size:*i64=sys_mmap_try(__size_of(i64)) as *i64
23 let actual:*u8=wf_readall(path,size)
24 let expected:*u8=sys_mmap_try(slen("WFVAR rid=review k= v=\n" as *u8)+kn+vn+1)
25 o=wf_cat(expected,0,"WFVAR rid=review k=" as *u8);o=wf_cat(expected,o,key);o=wf_cat(expected,o," v=" as *u8);o=wf_cat(expected,o,value);o=wf_cat(expected,o,"\n" as *u8);expected[o]=0
26 gv_check("journal readable",(actual as i64)>0,c)
27 if (actual as i64)>0{
28 gv_check_eq("full key and value record extent",size[0],prior+o,c)
29 var equal:i64=1;i=0;while i<o&&prior+i<size[0]{if actual[prior+i]!=expected[i]{equal=0};i=i+1}
30 gv_check("all event bytes retained",equal==1&&size[0]==prior+o,c)
31 }
32 gv_check_eq("empty event",wf_bind_event(cx,"review",""),0,c)
33 gv_check_eq("non assignment fields",wf_bind_event(cx,"review","event~unused~~=ignored"),0,c)
34 gv_check_eq("empty and embedded-equals values",wf_bind_event(cx,"review","event~empty=~other=a=b"),2,c)
35 return gv_verdict("WFLOW-EVENT-OWNED-T282",c,"Actual journal bytes; downstream substitution qualification separate")
36}