code wiki / _hdl_build / nx_geo_route_gate.nx

nx_geo_route_gate.nx source

↩ module page · 78 lines · 3621 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" 11 12const GR_LOG: *u8 = "knowledge/status/geo_route.log" 13 14func 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 } 15func 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 } 16 17func 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 } 18 19func 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 { 20 gr_w(fd, "GEOROUTEGATE authored=organ exact=integer-dijkstra dist_node1=" as *u8); gr_wn(fd, d1) 21 gr_w(fd, " dist_node3=" as *u8); gr_wn(fd, d3) 22 gr_w(fd, " dist_node4=" as *u8); gr_wn(fd, d4) 23 gr_w(fd, " prev_node3=" as *u8); gr_wn(fd, p3) 24 gr_w(fd, " path03_len=" as *u8); gr_wn(fd, plen) 25 gr_w(fd, " path03_head=" as *u8); gr_wn(fd, phead) 26 gr_w(fd, " path03_tail=" as *u8); gr_wn(fd, ptail) 27 gr_w(fd, " isochrone_budget4=" as *u8); gr_wn(fd, iso) 28 gr_w(fd, " node5_unreachable=" as *u8); gr_wn(fd, unreach) 29 if ok == 1 { gr_w(fd, " verdict=GREEN\n" as *u8) } else { gr_w(fd, " verdict=RED\n" as *u8) } 30 return 0 31} 32 33func main() -> i64 { 34 let n: i64 = 6 // nodes 0..4 connected; node 5 isolated (unreachable) 35 let adj: *i64 = sys_mmap(8 * n * n) as *i64 36 var z: i64 = 0 37 while z < n * n { adj[z] = 0; z = z + 1 } 38 gr_edge(adj, n, 0, 1, 4) 39 gr_edge(adj, n, 0, 2, 1) 40 gr_edge(adj, n, 2, 1, 2) 41 gr_edge(adj, n, 1, 3, 1) 42 gr_edge(adj, n, 2, 3, 5) 43 gr_edge(adj, n, 3, 4, 3) 44 45 let dist: *i64 = sys_mmap(8 * n) as *i64 46 let prev: *i64 = sys_mmap(8 * n) as *i64 47 geo_dijkstra(adj, n, 0, dist, prev) 48 49 let path: *i64 = sys_mmap(8 * 64) as *i64 50 let plen: i64 = geo_path(prev, 0, 3, path) 51 var phead: i64 = 0 - 9 52 var ptail: i64 = 0 - 9 53 if plen > 0 { phead = path[0]; ptail = path[plen - 1] } 54 55 let iso_idx: *i64 = sys_mmap(8 * n) as *i64 56 let iso: i64 = geo_isochrone(dist, n, 4, iso_idx) 57 58 var unreach: i64 = 0 59 if dist[5] == GEO_INF { unreach = 1 } 60 61 var ok: i64 = 1 62 if dist[1] != 3 { ok = 0 } // 0-2-1 beats direct 0-1=4 63 if dist[3] != 4 { ok = 0 } // 0-2-1-3 64 if dist[4] != 7 { ok = 0 } 65 if prev[3] != 1 { ok = 0 } 66 if plen != 4 { ok = 0 } // [0,2,1,3] 67 if phead != 0 { ok = 0 } 68 if ptail != 3 { ok = 0 } 69 if iso != 4 { ok = 0 } // {0,2,1,3} 70 if unreach != 1 { ok = 0 } 71 72 gr_emit(1, dist[1], dist[3], dist[4], prev[3], plen, phead, ptail, iso, unreach, ok) 73 let lf: i64 = sys_openat_append(GR_LOG, 420) 74 if lf >= 0 { gr_emit(lf, dist[1], dist[3], dist[4], prev[3], plen, phead, ptail, iso, unreach, ok); sys_close(lf) } 75 76 if ok == 1 { return 0 } 77 return 1 78}