code wiki / _hdl_build / nx_vec_kernel_gate.nx
nx_vec_kernel_gate.nx source
↩ module page · 38 lines · 4081 B
1// nx_vec_kernel_gate.nx -- KAT gate for R-VEC-0 (nx_vec_kernel). Known cosines a human can verify by hand:
2// identical=1000, orthogonal=0, 45deg=707, opposite=-1000, collinear=1000 + isqrt spot-checks. expect_exit: 0
3import "nx_syscalls.nx"
4import "nx_vec_kernel.nx"
5
6func vk_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
7func vk_pn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=(48 as u8);k=1}; while m>0{t[k]=((48+(m%10)) as u8);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 }
8func vk_w(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 }
9func vk_wn(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=(48 as u8);k=1}; while m>0{t[k]=((48+(m%10)) as u8);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(fd,bb,k); return 0 }
10
11func main() -> i64 {
12 vk_puts("=== R-VEC-0 VECTOR-MATH KERNEL -- KAT (integer cosine, milli-scale) ===\n" as *u8)
13 var pass: i64=0; var total: i64=0
14 let a1: *i64=sys_mmap(8*4) as *i64; a1[0]=3; a1[1]=4
15 let b1: *i64=sys_mmap(8*4) as *i64; b1[0]=3; b1[1]=4
16 let a2: *i64=sys_mmap(8*4) as *i64; a2[0]=1; a2[1]=0
17 let b2: *i64=sys_mmap(8*4) as *i64; b2[0]=0; b2[1]=1
18 let a3: *i64=sys_mmap(8*4) as *i64; a3[0]=1; a3[1]=0
19 let b3: *i64=sys_mmap(8*4) as *i64; b3[0]=1; b3[1]=1
20 let a4: *i64=sys_mmap(8*4) as *i64; a4[0]=2; a4[1]=0; a4[2]=0
21 let b4: *i64=sys_mmap(8*4) as *i64; b4[0]=0-1; b4[1]=0; b4[2]=0
22 let a5: *i64=sys_mmap(8*4) as *i64; a5[0]=1; a5[1]=2; a5[2]=3
23 let b5: *i64=sys_mmap(8*4) as *i64; b5[0]=2; b5[1]=4; b5[2]=6
24
25 let r1: i64=vr_cos_milli(a1,b1,2); total=total+1; vk_puts(" identical [3,4]/[3,4] cos_milli=" as *u8); vk_pn(r1); vk_puts(" exp=1000 " as *u8); if r1==1000 { pass=pass+1; vk_puts("PASS\n" as *u8) } else { vk_puts("FAIL\n" as *u8) }
26 let r2: i64=vr_cos_milli(a2,b2,2); total=total+1; vk_puts(" orthogonal [1,0]/[0,1] cos_milli=" as *u8); vk_pn(r2); vk_puts(" exp=0 " as *u8); if r2==0 { pass=pass+1; vk_puts("PASS\n" as *u8) } else { vk_puts("FAIL\n" as *u8) }
27 let r3: i64=vr_cos_milli(a3,b3,2); total=total+1; vk_puts(" 45deg [1,0]/[1,1] cos_milli=" as *u8); vk_pn(r3); vk_puts(" exp=707 " as *u8); if r3==707 { pass=pass+1; vk_puts("PASS\n" as *u8) } else { vk_puts("FAIL\n" as *u8) }
28 let r4: i64=vr_cos_milli(a4,b4,3); total=total+1; vk_puts(" opposite [2,0,0]/[-1,0,0] cos_milli=" as *u8); vk_pn(r4); vk_puts(" exp=-1000" as *u8); if r4==(0-1000) { pass=pass+1; vk_puts(" PASS\n" as *u8) } else { vk_puts(" FAIL\n" as *u8) }
29 let r5: i64=vr_cos_milli(a5,b5,3); total=total+1; vk_puts(" collinear [1,2,3]/[2,4,6] cos_milli=" as *u8); vk_pn(r5); vk_puts(" exp=1000 " as *u8); if r5==1000 { pass=pass+1; vk_puts("PASS\n" as *u8) } else { vk_puts("FAIL\n" as *u8) }
30 let s1: i64=vr_isqrt(25); total=total+1; vk_puts(" isqrt(25)=" as *u8); vk_pn(s1); vk_puts(" exp=5 " as *u8); if s1==5 { pass=pass+1; vk_puts("PASS\n" as *u8) } else { vk_puts("FAIL\n" as *u8) }
31 let s2: i64=vr_isqrt(500000); total=total+1; vk_puts(" isqrt(500000)=" as *u8); vk_pn(s2); vk_puts(" exp=707 " as *u8); if s2==707 { pass=pass+1; vk_puts("PASS\n" as *u8) } else { vk_puts("FAIL\n" as *u8) }
32
33 vk_puts("----\nVEC-KERNEL KAT " as *u8); vk_pn(pass); vk_puts("/" as *u8); vk_pn(total); vk_puts(" passed\n" as *u8)
34 let lg: i64=sys_openat_append("knowledge/status/vec_kernel_gate.log" as *u8, 0x1a4)
35 if lg>=0 { vk_w(lg, "R-VEC-0 vec_kernel KAT pass=" as *u8); vk_wn(lg, pass); vk_w(lg, "/" as *u8); vk_wn(lg, total); if pass==total { vk_w(lg, " GREEN\n" as *u8) } else { vk_w(lg, " RED\n" as *u8) } sys_close(lg) }
36 if pass==total { vk_puts("R-VEC-0 GREEN (sovereign integer vector-math kernel proven)\n" as *u8); sys_exit(0); return 0 }
37 vk_puts("R-VEC-0 RED\n" as *u8); sys_exit(1); return 1
38}