code wiki / (root) / nx_timeline_gate.nx

nx_timeline_gate.nx source

↩ module page · 96 lines · 4077 B

1// nx_timeline_gate.nx -- REFEREE for R4b (nx_timeline schedule). 2// Q=16384. Case A: 2 clips len[5,5], window[2] -> overlap crossfade. 3// expect 8 frames: A0,A1,A2 ; xfade(A3,B0)@Q/3, xfade(A4,B1)@2Q/3 ; B2,B3,B4 4// Case B: 2 clips len[5,5], window[0] -> hard cut, 10 straight frames, no blend. 5// Asserts the full schedule by record. Every value PRINTED. Exit 0/1. 6// Sovereign: nx_syscalls + nx_timeline. license_tier: ORIGINAL 7import "nx_syscalls.nx" 8import "nx_timeline.nx" 9 10func gp(logfd: i64, s: *u8) -> i64 { 11 var n: i64 = 0 12 while s[n] != (0 as u8) { n = n + 1 } 13 sys_write(1, s, n) 14 if logfd > 0 { sys_write(logfd, s, n) } 15 return 0 16} 17func gn(logfd: i64, v: i64) -> i64 { 18 let bb: *u8 = sys_mmap(28) 19 var m: i64 = v 20 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m } 21 let t: *u8 = sys_mmap(28) 22 var k: i64 = 0 23 if m == 0 { t[0] = 48 as u8; k = 1 } 24 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 25 var i: i64 = 0 26 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 27 sys_write(1, bb, k) 28 if logfd > 0 { sys_write(logfd, bb, k) } 29 return 0 30} 31func rec_eq(recs: *i64, i: i64, mode: i64, sa: i64, fa: i64, sb: i64, fb: i64, pr: i64) -> i64 { 32 if recs[i * 6 + 0] != mode { return 0 } 33 if recs[i * 6 + 1] != sa { return 0 } 34 if recs[i * 6 + 2] != fa { return 0 } 35 if recs[i * 6 + 3] != sb { return 0 } 36 if recs[i * 6 + 4] != fb { return 0 } 37 if recs[i * 6 + 5] != pr { return 0 } 38 return 1 39} 40func dump(logfd: i64, recs: *i64, n: i64) -> i64 { 41 var i: i64 = 0 42 while i < n { 43 gp(logfd, " [\x00" as *u8); gn(logfd, i); gp(logfd, "] mode=\x00" as *u8); gn(logfd, recs[i*6+0]) 44 gp(logfd, " A=\x00" as *u8); gn(logfd, recs[i*6+1]); gp(logfd, ":\x00" as *u8); gn(logfd, recs[i*6+2]) 45 gp(logfd, " B=\x00" as *u8); gn(logfd, recs[i*6+3]); gp(logfd, ":\x00" as *u8); gn(logfd, recs[i*6+4]) 46 gp(logfd, " prog=\x00" as *u8); gn(logfd, recs[i*6+5]); gp(logfd, "\n\x00" as *u8) 47 i = i + 1 48 } 49 return 0 50} 51 52func main() -> i64 { 53 let logfd: i64 = sys_openat_append("knowledge/status/timeline_gate.log\x00" as *u8, 0x1a4) 54 gp(logfd, "TIMELINE-GATE R4b (clip schedule)\n\x00" as *u8) 55 let Q: i64 = 16384 56 let lens: *i64 = sys_mmap(64) as *i64 57 let wins: *i64 = sys_mmap(64) as *i64 58 let recs: *i64 = sys_mmap(64 * 6 * 8) as *i64 59 60 // Case A: crossfade window 2 61 lens[0] = 5; lens[1] = 5; wins[0] = 2 62 let nA: i64 = nx_timeline_plan(lens, 2, wins, Q, recs, 64) 63 gp(logfd, " CASE A len[5,5] win[2] -> frames=\x00" as *u8); gn(logfd, nA); gp(logfd, "\n\x00" as *u8) 64 dump(logfd, recs, nA) 65 var ok: i64 = 1 66 if nA != 8 { ok = 0 } 67 if rec_eq(recs, 0, 0, 0, 0, 0, 0, 0) != 1 { ok = 0 } 68 if rec_eq(recs, 2, 0, 0, 2, 0, 0, 0) != 1 { ok = 0 } 69 if rec_eq(recs, 3, 1, 0, 3, 1, 0, Q / 3) != 1 { ok = 0 } 70 if rec_eq(recs, 4, 1, 0, 4, 1, 1, 2 * Q / 3) != 1 { ok = 0 } 71 if rec_eq(recs, 5, 0, 1, 2, 0, 0, 0) != 1 { ok = 0 } 72 if rec_eq(recs, 7, 0, 1, 4, 0, 0, 0) != 1 { ok = 0 } 73 74 // Case B: hard cut 75 lens[0] = 5; lens[1] = 5; wins[0] = 0 76 let nB: i64 = nx_timeline_plan(lens, 2, wins, Q, recs, 64) 77 gp(logfd, " CASE B len[5,5] win[0] -> frames=\x00" as *u8); gn(logfd, nB); gp(logfd, "\n\x00" as *u8) 78 if nB != 10 { ok = 0 } 79 if rec_eq(recs, 4, 0, 0, 4, 0, 0, 0) != 1 { ok = 0 } // last A frame, straight 80 if rec_eq(recs, 5, 0, 1, 0, 0, 0, 0) != 1 { ok = 0 } // first B frame, straight (no blend) 81 var anyblend: i64 = 0 82 var z: i64 = 0 83 while z < nB { if recs[z * 6 + 0] == 1 { anyblend = 1 } z = z + 1 } 84 if anyblend != 0 { ok = 0 } // hard cut has zero blends 85 86 if ok == 1 { 87 gp(logfd, "TIMELINE-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8) 88 if logfd > 0 { sys_close(logfd) } 89 sys_exit(0) 90 return 0 91 } 92 gp(logfd, "TIMELINE-GATE result=FAIL verdict=RED\n\x00" as *u8) 93 if logfd > 0 { sys_close(logfd) } 94 sys_exit(1) 95 return 1 96}