code wiki / (root) / nx_endgame_gate.nx

nx_endgame_gate.nx source

↩ module page · 104 lines · 5704 B

1// nx_endgame_gate.nx -- KAT + negative controls for endgame last-piece racing. 2// Native sovereign lane; exit 0 = all pass, N = assertion N failed. Prints measured values. 3// 4// T1 in-flight refcount: eg_mark/eg_clear are exact and floor at 0 5// T2 NORMAL pick avoids an in-flight piece (no duplicate work) -> next-rarest 6// T3 NEG-CONTROL: NOT endgame (many pieces outstanding) -> never duplicate (-1), don't waste bw 7// T4 ENDGAME (few obtainable left, all in-flight) -> RACE the rarest in-flight needed piece 8// T5 NEG-CONTROL: in endgame, still only race a piece THIS peer HAS (peer-filter holds) 9// T6 NEG-CONTROL: a piece NO peer has (avail 0) is NEVER raced (honest 99.x% boundary) -> -1 10 11import "nx_endgame.nx" 12import "nx_assert.nx" 13 14func gset(bits: *u8, p: i64) -> i64 { 15 let byte: i64 = p / 8 16 let bit: i64 = 7 - (p - byte * 8) 17 bits[byte] = ((bits[byte] as i64) | (1 << bit)) as u8 18 return 0 19} 20 21// write the first n bytes of `path` from i64 values (precise availability/inflight setup). 22func setbytes(path: *u8, vals: *i64, n: i64) -> i64 { 23 let fd: i64 = am_open(path); if fd < 0 { return 0 - 1 } 24 let b: *u8 = sys_mmap(n + 16); var i: i64 = 0; while i < n { b[i] = vals[i] as u8; i = i + 1 } 25 sys_lseek(fd, 0, 0); sys_write(fd, b, n); sys_close(fd); return 0 26} 27 28func main() -> i64 { 29 let A: *u8 = "/tmp/_nx_eg_avail.bin" as *u8 30 let F: *u8 = "/tmp/_nx_eg_inflight.bin" as *u8 31 let npc: i64 = 8 32 let av: *i64 = sys_mmap(8*64) as *i64 33 let eff: *i64 = sys_mmap(8*64) as *i64 34 let inf: *i64 = sys_mmap(8*64) as *i64 35 let vals: *i64 = sys_mmap(8*64) as *i64 36 37 // ---- T1: in-flight refcount ---- 38 eg_init(F, npc) 39 eg_mark(F, 3); eg_mark(F, 3) // inflight[3] = 2 40 am_load(F, inf, npc) 41 nx_puts_err("T1 inflight[3] after 2 marks="); nx_puti_err(inf[3]) 42 if inf[3] != 2 { return 1 } 43 eg_clear(F, 3); am_load(F, inf, npc) 44 nx_puts_err("T1 inflight[3] after 1 clear="); nx_puti_err(inf[3]) 45 if inf[3] != 1 { return 2 } 46 eg_clear(F, 3); eg_clear(F, 3); am_load(F, inf, npc) // floor at 0 (extra clear no-op) 47 nx_puts_err("T1 inflight[3] floored="); nx_puti_err(inf[3]) 48 if inf[3] != 0 { return 3 } 49 50 // availability counts for pieces 0..7 = [1,2,3,4,5,6,7,8] (piece 0 = rarest) 51 var i: i64 = 0; while i < npc { vals[i] = i + 1; i = i + 1 } 52 setbytes(A, vals, npc) 53 54 let done: *u8 = sys_mmap(64) // all 0 = nothing downloaded 55 let peerAll: *u8 = sys_mmap(16); var pp: i64 = 0; while pp < npc { gset(peerAll, pp); pp = pp + 1 } // peer has all 56 57 // ---- T2: NORMAL avoids the in-flight rarest -> picks next-rarest ---- 58 eg_init(F, npc); eg_mark(F, 0) // piece 0 (rarest) already in-flight elsewhere 59 let g2: i64 = eg_pick(A, F, done, peerAll, 16, 1, npc, 2, av, eff, inf) 60 nx_puts_err("T2 pick(piece0 in-flight)="); nx_puti_err(g2) 61 if g2 != 1 { return 4 } // skips in-flight 0, rarest fresh = 1 62 63 // ---- T3 NEG-CONTROL: not endgame (8 obtainable outstanding) -> no duplication ---- 64 eg_init(F, npc); var m: i64 = 0; while m < npc { eg_mark(F, m); m = m + 1 } // ALL in-flight 65 let g3: i64 = eg_pick(A, F, done, peerAll, 16, 1, npc, 2, av, eff, inf) // threshold 2 << 8 outstanding 66 nx_puts_err("T3 pick(all in-flight, NOT endgame)="); nx_puti_err(g3) 67 if g3 != (0 - 1) { return 5 } // refuse to duplicate early -> -1 68 69 // ---- T4: ENDGAME -> race the rarest in-flight needed piece ---- 70 // pieces 0..5 done; 6,7 needed (avail 7,8); both in-flight elsewhere; obtainable-remaining = 2 <= 2 71 let done2: *u8 = sys_mmap(64); var d: i64 = 0; while d < 6 { done2[d] = 1 as u8; d = d + 1 } 72 eg_init(F, npc); eg_mark(F, 6); eg_mark(F, 7) 73 let g4: i64 = eg_pick(A, F, done2, peerAll, 16, 1, npc, 2, av, eff, inf) 74 nx_puts_err("T4 pick(endgame, race)="); nx_puti_err(g4) 75 if g4 != 6 { return 6 } // rarest of {6:7, 7:8} = 6 76 77 // ---- T5 NEG-CONTROL: endgame still respects peer-has (peer only has 7, not 6) ---- 78 let peer7: *u8 = sys_mmap(16); gset(peer7, 7) 79 let g5: i64 = eg_pick(A, F, done2, peer7, 16, 1, npc, 2, av, eff, inf) 80 nx_puts_err("T5 pick(endgame, peer has only 7)="); nx_puti_err(g5) 81 if g5 != 7 { return 7 } // races 7 (the one it has), never 6 it lacks 82 83 // ---- T6 NEG-CONTROL: a piece NO peer has (avail 0) is never raced ---- 84 // pieces 0..6 done; piece 7 needed but avail[7]=0 (no seeder has it); obtainable-remaining = 0 85 var w: i64 = 0; while w < npc { vals[w] = w + 1; w = w + 1 } vals[7] = 0 // avail = [1..7,0] 86 setbytes(A, vals, npc) 87 let done3: *u8 = sys_mmap(64); var e: i64 = 0; while e < 7 { done3[e] = 1 as u8; e = e + 1 } 88 eg_init(F, npc); eg_mark(F, 7) 89 let g6: i64 = eg_pick(A, F, done3, peerAll, 16, 1, npc, 2, av, eff, inf) 90 nx_puts_err("T6 pick(piece7 unobtainable, avail=0)="); nx_puti_err(g6) 91 if g6 != (0 - 1) { return 8 } // no phantom race for data the swarm lacks 92 93 // ---- T7: have-all seeder (havebits=0, no bitfield, avail all 0) still picks ---- 94 // pieces 0,1,2 done; 3..7 needed; no in-flight. Seeder has everything -> lowest-index needed = 3. 95 var zr: i64 = 0; while zr < npc { vals[zr] = 0; zr = zr + 1 } setbytes(A, vals, npc) // avail all 0 96 eg_init(F, npc) 97 let done4: *u8 = sys_mmap(64); done4[0]=1 as u8; done4[1]=1 as u8; done4[2]=1 as u8 98 let g7: i64 = eg_pick(A, F, done4, peerAll, 16, 0, npc, 2, av, eff, inf) // havebits=0 99 nx_puts_err("T7 pick(have-all seeder, avail=0)="); nx_puti_err(g7) 100 if g7 != 3 { return 9 } 101 102 nx_puts_err("nx_endgame_gate verdict=GREEN pass="); nx_puti_err(9) 103 return 0 104}