code wiki / _hdl_build / nx_frame_sanity_gate.nx

nx_frame_sanity_gate.nx source

↩ module page · 181 lines · 6908 B

1// nx_frame_sanity_gate.nx -- certification for the experiential frame verifier. Every fail-tooth is a 2// REAL shipped bug class that numeric gates passed and only an eyeball caught: 3// T2 pure-sky frame = the Gx-7 win-frame bug (camera stared over falling ground) 4// T3 blown-white frame = the Gx-6 no-tonemap bug (50.4% of the frame clipped to 255) 5// T4 void frame = buried-camera / unlit class 6// T1 proves a REAL composed scene PASSES (a verifier that fails everything is not a verifier); 7// T5 determinism; T6 anti-vacuity (4 frames -> 4 distinct metric vectors). 8// MUTATION TARGET: the edge detector -- kill it and T1 must go RED while T2-T4 stay GREEN. 9// license_tier: ORIGINAL expect_exit: 0 10import "nx_syscalls.nx" 11import "nx_frame_sanity.nx" 12 13const W: i64 = 192 14const H: i64 = 108 15 16func ww(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 17func wn(v: i64) -> i64 { 18 if v==0 { sys_write(1,"0" as *u8,1); return 0 } 19 var m: i64=v; if m<0 { sys_write(1,"-" as *u8,1); m=0-m } 20 let t: *u8=sys_mmap(32); var k: i64=0 21 while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } 22 let o: *u8=sys_mmap(32); var q: i64=k-1; var i: i64=0 23 while q>=0 { o[i]=t[q]; i=i+1; q=q-1 } 24 sys_write(1,o,i); return 0 25} 26func px(fb: *u8, x: i64, y: i64, r: i64, g: i64, b: i64) -> i64 { 27 let o: i64 = (y*W + x)*3 28 fb[o]=r as u8; fb[o+1]=g as u8; fb[o+2]=b as u8 29 return 0 30} 31// deterministic texture noise (no rng dependency) 32func tex(x: i64, y: i64) -> i64 { return ((x*31 + y*17 + (x/3)*(y/5)) % 97) } 33 34// a REAL composed scene: gradient sky, textured ground with a horizon, a dark structure mid-frame 35func mkscene(fb: *u8) -> i64 { 36 var y: i64=0 37 while y<H { 38 var x: i64=0 39 while x<W { 40 if y < H*2/5 { 41 let sv: i64 = 120 + y 42 px(fb,x,y, sv, sv+20, 235) 43 } else { 44 let t: i64 = tex(x,y) 45 px(fb,x,y, 60+t, 90+t/2, 40+t/3) 46 } 47 x=x+1 48 } 49 y=y+1 50 } 51 // the SUBJECT: a dark keep with a lit door, center third 52 var sy: i64 = H*2/5 - 18 53 while sy < H*3/5 { 54 var sx: i64 = W*2/5 55 while sx < W*3/5 { 56 px(fb,sx,sy, 40, 35, 30) 57 sx=sx+1 58 } 59 sy=sy+1 60 } 61 var dy: i64 = H/2 62 while dy < H*3/5 { 63 var dx: i64 = W/2 - 3 64 while dx < W/2 + 3 { px(fb,dx,dy, 230, 200, 90); dx=dx+1 } 65 dy=dy+1 66 } 67 return 0 68} 69func mksky(fb: *u8) -> i64 { 70 var y: i64=0 71 while y<H { 72 var x: i64=0 73 while x<W { let sv: i64 = 110 + y/2; px(fb,x,y, sv, sv+18, 232); x=x+1 } 74 y=y+1 75 } 76 return 0 77} 78func mkblown(fb: *u8) -> i64 { 79 mkscene(fb) 80 var y: i64=0 81 while y<H { 82 var x: i64=0 83 while x<W { 84 var hot: i64 = 0 85 if y < H/2 { hot = 1 } 86 if y >= H/2 { if x < W/3 { hot = 1 } } 87 if hot==1 { px(fb,x,y, 255, 255, 255) } 88 x=x+1 89 } 90 y=y+1 91 } 92 return 0 93} 94func mkvoid(fb: *u8) -> i64 { 95 var y: i64=0 96 while y<H { 97 var x: i64=0 98 while x<W { px(fb,x,y, 2, 1, 3); x=x+1 } 99 y=y+1 100 } 101 return 0 102} 103 104func main() -> i64 { 105 var pass: i64=0 106 let th: *i64 = sys_mmap(FS_NMETRIC*8) as *i64 107 fs_default_th(th) 108 let fscene: *u8 = sys_mmap(W*H*3) 109 let fsky: *u8 = sys_mmap(W*H*3) 110 let fblown: *u8 = sys_mmap(W*H*3) 111 let fvoid: *u8 = sys_mmap(W*H*3) 112 mkscene(fscene) 113 mksky(fsky) 114 mkblown(fblown) 115 mkvoid(fvoid) 116 let ms: *i64 = sys_mmap(FS_NMETRIC*8) as *i64 117 let mk: *i64 = sys_mmap(FS_NMETRIC*8) as *i64 118 let mb: *i64 = sys_mmap(FS_NMETRIC*8) as *i64 119 let mv: *i64 = sys_mmap(FS_NMETRIC*8) as *i64 120 fs_score(fscene, W, H, ms) 121 fs_score(fsky, W, H, mk) 122 fs_score(fblown, W, H, mb) 123 fs_score(fvoid, W, H, mv) 124 ww("=== nx_frame_sanity_gate (the mechanized eyeball) ===\n") 125 ww("scene blown/black/edge/cedge/flat = "); wn(ms[0]); ww("/"); wn(ms[1]); ww("/"); wn(ms[2]); ww("/"); wn(ms[3]); ww("/"); wn(ms[4]); ww("\n") 126 ww("sky = "); wn(mk[0]); ww("/"); wn(mk[1]); ww("/"); wn(mk[2]); ww("/"); wn(mk[3]); ww("/"); wn(mk[4]); ww("\n") 127 ww("blown = "); wn(mb[0]); ww("/"); wn(mb[1]); ww("/"); wn(mb[2]); ww("/"); wn(mb[3]); ww("/"); wn(mb[4]); ww("\n") 128 ww("void = "); wn(mv[0]); ww("/"); wn(mv[1]); ww("/"); wn(mv[2]); ww("/"); wn(mv[3]); ww("/"); wn(mv[4]); ww("\n") 129 130 // T1 a real composed scene PASSES 131 var t1: i64=0 132 if fs_verdict(ms, th)==1 { t1=1 } 133 if t1==1 { ww("T1 GREEN real scene passes the experiential verdict\n"); pass=pass+1 } 134 if t1==0 { ww("T1 RED real scene refused\n") } 135 // T2 pure sky (the Gx-7 win-frame class) REFUSED on the framing axis specifically 136 var t2: i64=0 137 if fs_verdict(mk, th)==0 { if mk[FS_M_CEDGE] < th[3] { t2=1 } } 138 if t2==1 { ww("T2 GREEN pure-sky frame refused (center content "); wn(mk[FS_M_CEDGE]); ww(" < "); wn(th[3]); ww(" permil)\n"); pass=pass+1 } 139 if t2==0 { ww("T2 RED sky frame not refused on framing\n") } 140 // T3 blown-white (the Gx-6 class) REFUSED on the exposure axis 141 var t3: i64=0 142 if fs_verdict(mb, th)==0 { if mb[FS_M_BLOWN] > th[0] { t3=1 } } 143 if t3==1 { ww("T3 GREEN blown frame refused ("); wn(mb[FS_M_BLOWN]); ww(" permil clipped > "); wn(th[0]); ww(")\n"); pass=pass+1 } 144 if t3==0 { ww("T3 RED blown frame not refused\n") } 145 // T4 void REFUSED 146 var t4: i64=0 147 if fs_verdict(mv, th)==0 { if mv[FS_M_BLACK] > th[1] { t4=1 } } 148 if t4==1 { ww("T4 GREEN void frame refused ("); wn(mv[FS_M_BLACK]); ww(" permil black)\n"); pass=pass+1 } 149 if t4==0 { ww("T4 RED void frame not refused\n") } 150 // T5 determinism 151 let ms2: *i64 = sys_mmap(FS_NMETRIC*8) as *i64 152 fs_score(fscene, W, H, ms2) 153 var same: i64=1 154 var i: i64=0 155 while i<FS_NMETRIC { if ms[i]!=ms2[i] { same=0 } i=i+1 } 156 if same==1 { ww("T5 GREEN deterministic re-score\n"); pass=pass+1 } 157 if same==0 { ww("T5 RED nondeterministic scores\n") } 158 // T6 anti-vacuity: 4 frames -> 4 DISTINCT metric vectors (a constant scorer proves nothing) 159 var dpairs: i64=0 160 var da: i64=0 161 i=0 162 while i<FS_NMETRIC { if ms[i]!=mk[i] { da=1 } i=i+1 } 163 dpairs=dpairs+da 164 da=0; i=0 165 while i<FS_NMETRIC { if ms[i]!=mb[i] { da=1 } i=i+1 } 166 dpairs=dpairs+da 167 da=0; i=0 168 while i<FS_NMETRIC { if ms[i]!=mv[i] { da=1 } i=i+1 } 169 dpairs=dpairs+da 170 da=0; i=0 171 while i<FS_NMETRIC { if mk[i]!=mv[i] { da=1 } i=i+1 } 172 dpairs=dpairs+da 173 var t6: i64=0 174 if dpairs==4 { if ms[FS_M_EDGE]>0 { t6=1 } } 175 if t6==1 { ww("T6 GREEN anti-vacuity: 4 frames scored 4 distinct vectors, scene edges nonzero\n"); pass=pass+1 } 176 if t6==0 { ww("T6 RED vacuous scorer: distinct-pairs="); wn(dpairs); ww("\n") } 177 178 ww("nx_frame_sanity_gate: "); wn(pass); ww("/6\n") 179 if pass==6 { return 0 } 180 return 1 181}