code wiki / (root) / nx_itoa_gate_t228.nx

nx_itoa_gate_t228.nx source

↩ module page · 40 lines · 1756 B

1import "nx_itoa_candidate_t228.nx" 2import "nx_gate_verdict.nx" 3const ITG_BYTES:i64=64 4const ITG_OFFSET:i64=3 5const ITG_POISON:u8=173 as u8 6func itg_case(v:i64,expected:*u8,c:*i64)->i64{ 7 let b:*u8=sys_mmap_try(ITG_BYTES);if (b as i64)<=0{return 3} 8 var n:i64=0;while expected[n]!=(0 as u8){n=n+1} 9 var kind:i64=0 10 while kind<2{ 11 var i:i64=0;while i<ITG_BYTES{b[i]=ITG_POISON;i=i+1} 12 var end:i64=0;if kind==0{end=nxi_buf(b,ITG_OFFSET,v)}else{end=ccz_cat_num(b,ITG_OFFSET,v)} 13 var ok:i64=1;if end!=ITG_OFFSET+n{ok=0} 14 i=0;while i<n{if b[ITG_OFFSET+i]!=expected[i]{ok=0};i=i+1} 15 i=0;while i<ITG_OFFSET{if b[i]!=ITG_POISON{ok=0};i=i+1} 16 var after:i64=ITG_OFFSET+n 17 if kind==1{if b[after]!=(0 as u8){ok=0};after=after+1} 18 i=after;while i<ITG_BYTES{if b[i]!=ITG_POISON{ok=0};i=i+1} 19 gv_check(expected,ok==1,c);kind=kind+1 20 } 21 sys_munmap_direct(b,ITG_BYTES);return 0 22} 23func main()->i64{ 24 let c:*i64=gv_ctr() 25 if itg_case(0,"0",c)!=0{return 3} 26 if itg_case(1,"1",c)!=0{return 3} 27 if itg_case(0-1,"-1",c)!=0{return 3} 28 if itg_case(9,"9",c)!=0{return 3} 29 if itg_case(10,"10",c)!=0{return 3} 30 if itg_case(0-10,"-10",c)!=0{return 3} 31 if itg_case(99,"99",c)!=0{return 3} 32 if itg_case(100,"100",c)!=0{return 3} 33 if itg_case(0-101,"-101",c)!=0{return 3} 34 if itg_case(1000000000000000000,"1000000000000000000",c)!=0{return 3} 35 if itg_case(0-1000000000000000000,"-1000000000000000000",c)!=0{return 3} 36 if itg_case(9223372036854775807,"9223372036854775807",c)!=0{return 3} 37 if itg_case(0-9223372036854775807,"-9223372036854775807",c)!=0{return 3} 38 if itg_case(0-9223372036854775807-1,"-9223372036854775808",c)!=0{return 3} 39 return gv_verdict("I64-DECIMAL",c,"Exact signed decimal values, nonzero offset and distinct NUL/no-NUL contracts; allocated buffers only") 40}