code wiki / (root) / nx_json_complete_gate.nx

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}