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}