code wiki / _hdl_build / nx_geo_route_gate.nx

nx_geo_route_gate.nx source

↩ module page · 86 lines · 4156 B

1// nx_geo_route_gate.nx -- GATE for GEO-008 routing. A baked 5-node weighted graph where the OPTIMAL 2// path is NOT the direct edge (proves Dijkstra finds the true shortest, not a greedy direct hop): 3// undirected edges: 0-1=4, 0-2=1, 2-1=2, 1-3=1, 2-3=5, 3-4=3 4// from 0: dist[2]=1, dist[1]=3 (0-2-1, beating direct 0-1=4), dist[3]=4 (0-2-1-3), dist[4]=7 5// path 0->3 = [0,2,1,3]; isochrone(budget 4) = {0,2,1,3} (node 4 at 7 excluded); node 5 unreachable 6// 7// Evidence -> knowledge/status/geo_route.log (GEOROUTEGATE authored=organ ... verdict=GREEN). 8// license_tier: ORIGINAL 9import "nx_geo_route.nx" 10import "nx_syscalls.nx" 11import "nx_gate_verdict.nx" 12 13const GR_LOG: *u8 = "knowledge/status/geo_route.log" 14 15func gr_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 16func gr_wn(fd: i64, v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m; sys_write(fd,"-" as *u8,1)}; let t: *u8 = sys_mmap(28); var k: i64=0; if m==0 {t[0]=48;k=1}; while m>0 {t[k]=(48+(m%10)) as u8; m=m/10; k=k+1}; var i: i64=0; while i<k {bb[i]=t[k-1-i]; i=i+1}; sys_write(fd, bb, k); return 0 } 17 18func gr_edge(adj: *i64, n: i64, a: i64, b: i64, w: i64) -> i64 { adj[a * n + b] = w; adj[b * n + a] = w; return 0 } 19 20func gr_emit(fd: i64, d1: i64, d3: i64, d4: i64, p3: i64, plen: i64, phead: i64, ptail: i64, iso: i64, unreach: i64, ok: i64) -> i64 { 21 gr_w(fd, "GEOROUTEGATE authored=organ exact=integer-dijkstra dist_node1=" as *u8); gr_wn(fd, d1) 22 gr_w(fd, " dist_node3=" as *u8); gr_wn(fd, d3) 23 gr_w(fd, " dist_node4=" as *u8); gr_wn(fd, d4) 24 gr_w(fd, " prev_node3=" as *u8); gr_wn(fd, p3) 25 gr_w(fd, " path03_len=" as *u8); gr_wn(fd, plen) 26 gr_w(fd, " path03_head=" as *u8); gr_wn(fd, phead) 27 gr_w(fd, " path03_tail=" as *u8); gr_wn(fd, ptail) 28 gr_w(fd, " isochrone_budget4=" as *u8); gr_wn(fd, iso) 29 gr_w(fd, " node5_unreachable=" as *u8); gr_wn(fd, unreach) 30 if ok == 1 { gr_w(fd, " verdict=GREEN\n" as *u8) } else { gr_w(fd, " verdict=RED\n" as *u8) } 31 return 0 32} 33 34func main() -> i64 { 35 let n: i64 = 6 // nodes 0..4 connected; node 5 isolated (unreachable) 36 let adj: *i64 = sys_mmap(8 * n * n) as *i64 37 var z: i64 = 0 38 while z < n * n { adj[z] = 0; z = z + 1 } 39 gr_edge(adj, n, 0, 1, 4) 40 gr_edge(adj, n, 0, 2, 1) 41 gr_edge(adj, n, 2, 1, 2) 42 gr_edge(adj, n, 1, 3, 1) 43 gr_edge(adj, n, 2, 3, 5) 44 gr_edge(adj, n, 3, 4, 3) 45 46 let dist: *i64 = sys_mmap(8 * n) as *i64 47 let prev: *i64 = sys_mmap(8 * n) as *i64 48 geo_dijkstra(adj, n, 0, dist, prev) 49 50 let path: *i64 = sys_mmap(8 * 64) as *i64 51 let plen: i64 = geo_path(prev, 0, 3, path) 52 var phead: i64 = 0 - 9 53 var ptail: i64 = 0 - 9 54 if plen > 0 { phead = path[0]; ptail = path[plen - 1] } 55 56 let iso_idx: *i64 = sys_mmap(8 * n) as *i64 57 let iso: i64 = geo_isochrone(dist, n, 4, iso_idx) 58 59 var unreach: i64 = 0 60 if dist[5] == GEO_INF { unreach = 1 } 61 62 var ok: i64 = 1 63 if dist[1] != 3 { ok = 0 } // 0-2-1 beats direct 0-1=4 64 if dist[3] != 4 { ok = 0 } // 0-2-1-3 65 if dist[4] != 7 { ok = 0 } 66 if prev[3] != 1 { ok = 0 } 67 if plen != 4 { ok = 0 } // [0,2,1,3] 68 if phead != 0 { ok = 0 } 69 if ptail != 3 { ok = 0 } 70 if iso != 4 { ok = 0 } // {0,2,1,3} 71 if unreach != 1 { ok = 0 } 72 73 gr_emit(1, dist[1], dist[3], dist[4], prev[3], plen, phead, ptail, iso, unreach, ok) 74 let lf: i64 = sys_openat_append(GR_LOG, 420) 75 if lf >= 0 { gr_emit(lf, dist[1], dist[3], dist[4], prev[3], plen, phead, ptail, iso, unreach, ok); sys_close(lf) } 76 77 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 78 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 79 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 80 let ctr__dry: *i64 = gv_ctr() 81 ctr__dry[0] = ok 82 ctr__dry[1] = 1 83 let rc__dry: i64 = gv_verdict("GEO-ROUTE-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 84 sys_exit(rc__dry) 85 return rc__dry 86}