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}