code wiki / _hdl_build / nx_chat_unicode_gate_t59.nx
nx_chat_unicode_gate_t59.nx source
↩ module page · 22 lines · 1608 B
1import "../nx_chat_demo_unicode_t59.nx"
2import "nx_gate_verdict.nx"
3func main(argc:i64,argv:*i64)->i64{
4 let c:*i64=gv_ctr()
5 let out:*u8=sys_mmap(CDA_TEXT_MAX+2)
6 let jp:*u8="こんにちは";let ru:*u8="Привет";let emoji:*u8="🌊";let ascii:*u8="Beach"
7 gv_check("Japanese preserved",cda_text(jp,out,CDA_TEXT_MAX)==cda_len(jp)&&cda_eq(jp,out)==1,c)
8 gv_check("Cyrillic preserved",cda_text(ru,out,CDA_TEXT_MAX)==cda_len(ru)&&cda_eq(ru,out)==1,c)
9 gv_check("emoji preserved",cda_text(emoji,out,CDA_TEXT_MAX)==cda_len(emoji)&&cda_eq(emoji,out)==1,c)
10 gv_check("ASCII preserved",cda_text(ascii,out,CDA_TEXT_MAX)==5&&cda_eq(ascii,out)==1,c)
11 out[6]=93 as u8
12 gv_check("exact capacity terminated",cda_text(ascii,out,5)==5&&out[5]==(0 as u8)&&out[6]==(93 as u8),c)
13 gv_check("oversize explicitly refused",cda_text(jp,out,14)==CDA_TEXT_TOO_LONG&&out[0]==(0 as u8),c)
14 let bad:*u8=sys_mmap(4);bad[0]=192 as u8;bad[1]=128 as u8;bad[2]=0 as u8
15 gv_check("malformed UTF8 refused",cda_text(bad,out,CDA_TEXT_MAX)==CDA_TEXT_BAD_UTF8,c)
16 let ctl:*u8=sys_mmap(4);ctl[0]=10 as u8;ctl[1]=9 as u8;ctl[2]=0 as u8
17 gv_check("linebreak and tab retained",cda_text(ctl,out,CDA_TEXT_MAX)==2&&out[0]==(10 as u8)&&out[1]==(9 as u8),c)
18 let json:*u8=sys_mmap(32);let n:i64=cda_jesc(json,0,ctl,2);json[n]=0 as u8
19 gv_check("JSON controls escaped",n==12&&cda_eq(json,"\\u000a\\u0009")==1,c)
20 gv_check("UTF8 JSON preserved",cda_jesc(json,0,jp,cda_len(jp))==cda_len(jp)&&utf8_validate(json,cda_len(jp))==cda_len(jp),c)
21 return gv_verdict("CHAT-UNICODE-CANDIDATE",c,"existing validator and JSON path; no store or HTTP acceptance")
22}