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}