code wiki / (root) / nx_swarm_sim_test.nx

nx_swarm_sim_test.nx source

↩ module page · 88 lines · 4080 B

1// nx_swarm_sim_test.nx -- KAT for the deterministic swarm simulator / download engine. 2// Native sovereign lane; exit 0 = pass, N = assertion N failed. 3// Every expected value is hand-computed in the comments (evidence-driven, no oracle drift). 4 5import "nx_str.nx" 6import "nx_swarm_sim.nx" 7 8func _zero(a: *i64, n: i64) -> i64 { var i: i64 = 0; while i < n { a[i] = 0; i = i + 1 } return 0 } 9 10func main() -> i64 { 11 let ph: *i64 = sys_mmap(64 * 8) as *i64 // peer_has flattened (peer*n + piece) 12 let bh: *i64 = sys_mmap(8 * 8) as *i64 // behavior per peer 13 let have: *i64 = sys_mmap(16 * 8) as *i64 14 let av: *i64 = sys_mmap(16 * 8) as *i64 15 let tr: *i64 = sys_mmap(2 * 8) as *i64 16 17 // ===== Scenario H: 4 pieces, 3 honest peers, skewed availability ===== 18 // peer0=[1,1,1,1] peer1=[1,1,0,0] peer2=[1,0,0,0] (n=4) 19 ph[0]=1; ph[1]=1; ph[2]=1; ph[3]=1 20 ph[4]=1; ph[5]=1; ph[6]=0; ph[7]=0 21 ph[8]=1; ph[9]=0; ph[10]=0; ph[11]=0 22 bh[0]=0; bh[1]=0; bh[2]=0 // all honest 23 24 // availability = [3,2,1,1] 25 nx_ss_availability(ph, 3, 4, av) 26 if av[0] != 3 { return 1 } 27 if av[1] != 2 { return 2 } 28 if av[2] != 1 { return 3 } 29 if av[3] != 1 { return 4 } 30 31 // helpers 32 if nx_ss_holder(ph, 3, 4, 0) != 0 { return 5 } // peer0 lowest holder of piece0 33 if nx_ss_holder(ph, 3, 4, 2) != 0 { return 6 } // only peer0 has piece2 34 if nx_ss_any_honest_holder(ph, bh, 3, 4, 3) != 1 { return 7 } 35 36 // rarest-first run completes in 4 rounds, trace = 155776 (hand-traced) 37 _zero(have, 4) 38 if nx_ss_run(ph, bh, 3, 4, have, 0, 2, 0, 1, 50, tr) != 4 { return 8 } 39 if tr[0] != 155776 { return 9 } 40 41 // DETERMINISM: identical scenario+flags replays bit-for-bit (rounds AND trace) 42 _zero(have, 4) 43 let r2: i64 = nx_ss_run(ph, bh, 3, 4, have, 0, 2, 0, 1, 50, tr) 44 if r2 != 4 { return 10 } 45 if tr[0] != 155776 { return 11 } 46 47 // streaming-to-playable: rarest order reaches lookahead=2 only at round 4 ... 48 _zero(have, 4) 49 if nx_ss_rounds_to_playable(ph, bh, 3, 4, have, 0, 2, 2, 50) != 4 { return 12 } 50 // ... but streaming (window 2) reaches it at round 2 -- the watch-while-download win 51 _zero(have, 4) 52 if nx_ss_rounds_to_playable(ph, bh, 3, 4, have, 1, 2, 2, 50) != 2 { return 13 } 53 54 // ===== Scenario A: 3 pieces; the common last piece has a STALLER as lowest holder ===== 55 // peer0=STALL has[piece2], peer1=HONEST has[all], peer2=HONEST has[piece2] (n=3) 56 _zero(ph, 64) 57 ph[0]=0; ph[1]=0; ph[2]=1 // peer0 -> piece2 only 58 ph[3]=1; ph[4]=1; ph[5]=1 // peer1 -> all 59 ph[6]=0; ph[7]=0; ph[8]=1 // peer2 -> piece2 only 60 bh[0]=1; bh[1]=0; bh[2]=0 // peer0 STALL, peer1/2 honest 61 62 // availability = [1,1,3]; lowest holder of piece2 is peer0 (the staller) 63 nx_ss_availability(ph, 3, 3, av) 64 if av[2] != 3 { return 14 } 65 if nx_ss_holder(ph, 3, 3, 2) != 0 { return 15 } 66 if nx_ss_any_honest_holder(ph, bh, 3, 3, 2) != 1 { return 16 } 67 68 // NAIVE (endgame off): fixates on the stalling lowest-holder of the last piece -> DNF 69 _zero(have, 3) 70 if nx_ss_run(ph, bh, 3, 3, have, 0, 2, 0, 1, 20, tr) != NX_SS_DNF { return 17 } 71 72 // ENDGAME (threshold=1): broadcasts the last piece to all peers -> honest peer delivers -> 3 rounds 73 _zero(have, 3) 74 if nx_ss_run(ph, bh, 3, 3, have, 0, 2, 1, 1, 20, tr) != 3 { return 18 } 75 76 // ===== Scenario N: a needed piece has NO honest holder -> even endgame must DNF (no faking) ===== 77 // peer0=LIE has[piece0,piece1] (advertises, never delivers), peer1=HONEST has[piece0] (n=2) 78 _zero(ph, 64) 79 ph[0]=1; ph[1]=1 // peer0 LIE -> advertises both 80 ph[2]=1; ph[3]=0 // peer1 HONEST -> piece0 only 81 bh[0]=2; bh[1]=0 // peer0 LIE, peer1 honest 82 83 if nx_ss_any_honest_holder(ph, bh, 2, 2, 1) != 0 { return 19 } // no honest source for piece1 84 _zero(have, 2) 85 if nx_ss_run(ph, bh, 2, 2, have, 0, 2, 1, 2, 10, tr) != NX_SS_DNF { return 20 } 86 87 return 0 88}