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}