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}