code wiki / (root) / nx_audio_web_test.nx

nx_audio_web_test.nx source

↩ module page · 62 lines · 2651 B

1// nx_audio_web_test.nx -- KAT gate: the audio->web bridge emits a valid HTML page 2// that plays a sovereign tone via a base64 data: URI; saves /tmp/audio.html. 3// expect_exit: 0. 4 5import "nx_syscalls.nx" 6import "nx_audio_mix.nx" 7import "nx_audio_synth.nx" 8import "nx_audio_wav.nx" 9import "nx_base64.nx" 10import "nx_audio_web.nx" 11 12func w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 13func wn(v: i64) -> i64 { 14 let b: *u8 = sys_mmap(28); var m: i64 = v 15 if m < 0 { m = 0 - m; sys_write(1, "-" as *u8, 1) } 16 let t: *u8 = sys_mmap(28); var k: i64 = 0 17 if m == 0 { t[0] = 48 as u8; k = 1 } 18 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 19 var i: i64 = 0; while i < k { b[i] = t[k - 1 - i]; i = i + 1 } 20 sys_write(1, b, k); return 0 21} 22func contains(hay: *u8, hn: i64, ndl: *u8) -> i64 { 23 var m: i64 = 0; while ndl[m] != (0 as u8) { m = m + 1 } 24 if m == 0 { return 1 } 25 var i: i64 = 0 26 while i + m <= hn { 27 var j: i64 = 0; var ok: i64 = 1 28 while j < m { if hay[i + j] != ndl[j] { ok = 0; j = m } else { j = j + 1 } } 29 if ok == 1 { return 1 } 30 i = i + 1 31 } 32 return 0 33} 34func chk(cond: i64, pass: *i64, fail: *i64, label: *u8) -> i64 { 35 if cond == 1 { pass[0] = pass[0] + 1; w(" ok " as *u8); w(label); w("\n" as *u8) } 36 else { fail[0] = fail[0] + 1; w(" XX " as *u8); w(label); w("\n" as *u8) } 37 return 0 38} 39 40func main() -> i64 { 41 let pass: *i64 = (sys_mmap(8)) as *i64 42 let fail: *i64 = (sys_mmap(8)) as *i64 43 pass[0] = 0 44 fail[0] = 0 45 w("=== nx_audio_web KAT (sovereign tone -> browser-playable page) ===\n" as *u8) 46 47 let out: *u8 = sys_mmap(65536) 48 let len: i64 = nx_audio_web_page(out, 65536) 49 chk(len > 5000, pass, fail, "html non-trivial (>5000B, base64 WAV embedded)" as *u8) 50 chk(contains(out, len, "data:audio/wav;base64," as *u8) == 1, pass, fail, "data: audio URI present" as *u8) 51 chk(contains(out, len, "<audio controls" as *u8) == 1, pass, fail, "<audio> player present" as *u8) 52 chk(contains(out, len, "</html>" as *u8) == 1, pass, fail, "well-formed (closed </html>)" as *u8) 53 chk(contains(out, len, "No FMOD" as *u8) == 1, pass, fail, "sovereignty note present" as *u8) 54 55 let wr: i64 = nx_audio_web_save("/tmp/audio.html" as *u8) 56 w("wrote /tmp/audio.html bytes=" as *u8); wn(wr); w(" (open it to hear the sovereign tone)\n" as *u8) 57 chk(wr > 5000, pass, fail, "/tmp/audio.html saved" as *u8) 58 59 w("=== VERDICT pass=" as *u8); wn(pass[0]); w(" fail=" as *u8); wn(fail[0]); w(" ===\n" as *u8) 60 if fail[0] == 0 { return 0 } 61 return 1 62}