nx_json_complete_gate.nx source
↩ module page · 58 lines · 3015 B
1import "nx_value_parse_json.nx"
2func jpg_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != 0 as u8 { n = n + 1 }; return n }
3func jpg_check(s: *u8, want: i64, label: *u8) -> i64 {
4 let v: *i64 = sys_mmap(8) as *i64
5 let root: *NxValue = nx_value_parse_json(s,jpg_len(s),v)
6 if v[0] != want { sys_write(1,label,jpg_len(label)); return 1 }
7 if want != NX_VAL_PARSE_OK { if (root as i64) != 0 { sys_write(1,label,jpg_len(label)); return 1 } }
8 return 0
9}
10func main() -> i64 {
11 var fail: i64 = 0
12 fail = fail + jpg_check("{}" as *u8,1,"empty object failed
13" as *u8)
14 fail = fail + jpg_check("[1,2] " as *u8,1,"trailing whitespace failed
15" as *u8)
16 fail = fail + jpg_check("{}{}" as *u8,10,"second root accepted
17" as *u8)
18 fail = fail + jpg_check("true garbage" as *u8,10,"trailing junk accepted
19" as *u8)
20 fail = fail + jpg_check("[1]false" as *u8,10,"trailing literal accepted
21" as *u8)
22 let many: *u8 = sys_mmap(NX_VAL_PARSE_DEFAULT_MAX_ITEMS*2+8)
23 many[0] = 91 as u8
24 var i: i64 = 0
25 while i < NX_VAL_PARSE_DEFAULT_MAX_ITEMS { many[1+i*2] = 48 as u8; many[2+i*2] = 44 as u8; i = i + 1 }
26 many[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*2] = 93 as u8
27 many[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*2+1] = 0 as u8
28 fail = fail + jpg_check(many,1,"exact collection capacity refused
29" as *u8)
30 many[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*2] = 44 as u8
31 many[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*2+1] = 48 as u8
32 many[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*2+2] = 93 as u8
33 many[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*2+3] = 0 as u8
34 fail = fail + jpg_check(many,11,"partial over-capacity array accepted
35" as *u8)
36 let obj: *u8 = sys_mmap(NX_VAL_PARSE_DEFAULT_MAX_ITEMS*6+10)
37 obj[0] = 123 as u8
38 var oi: i64 = 0
39 let member: *u8 = "\"k\":0," as *u8
40 while oi < NX_VAL_PARSE_DEFAULT_MAX_ITEMS {
41 var mi: i64 = 0
42 while mi < 6 { obj[1+oi*6+mi] = member[mi]; mi = mi + 1 }
43 oi = oi + 1
44 }
45 obj[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*6] = 125 as u8
46 obj[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*6+1] = 0 as u8
47 fail = fail + jpg_check(obj,1,"exact object capacity refused\n" as *u8)
48 obj[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*6] = 44 as u8
49 var mi2: i64 = 0
50 while mi2 < 6 { obj[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*6+1+mi2] = member[mi2]; mi2 = mi2 + 1 }
51 obj[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*6+6] = 125 as u8
52 obj[NX_VAL_PARSE_DEFAULT_MAX_ITEMS*6+7] = 0 as u8
53 fail = fail + jpg_check(obj,11,"partial over-capacity object accepted\n" as *u8)
54 fail = fail + jpg_check("{\n \"rows\": 117,\n \"distinctFrameWindows\": 72,\n \"repeatedWindows\": 45,\n \"firstEpoch\": 1788410417,\n \"lastEpoch\": 1788838955,\n \"green\": 12,\n \"greenWithP50Over50ms\": 9,\n \"rawFrameMax\": 250,\n \"countMismatches\": [],\n \"latest\": {\n \"id\": \"beach_1788838955\",\n \"ts\": 1788838955,\n \"budget\": 111,\n \"n\": 256,\n \"page\": \"69/211/250\",\n \"sink\": \"69/211/250\",\n \"verdict\": \"RED:p95-over-band\",\n \"twins\": \"AGREE\"\n }\n}\n" as *u8,1,"captured telemetry audit refused\n" as *u8)
55 if fail == 0 { sys_write(1,"JSON COMPLETE 10/10
56" as *u8,20) }
57 return fail
58}