nx_integral_gate.nx source
↩ module page · 97 lines · 3581 B
1// nx_integral_gate.nx -- REFEREE for R-FACE-0 (nx_integral).
2// Fills an 8x6 grayscale image with a deterministic varied pattern, builds the
3// SAT, and checks nx_integral_rect_sum against a BRUTE-FORCE pixel sum for a
4// range of rectangles (full frame, interior sub-rect, single pixel, the four
5// edges/corners). Every pair PRINTED. Exit 0 GREEN / 1 RED.
6// Sovereign: syscalls + nx_image + nx_integral. license_tier: ORIGINAL
7import "syscalls.nx"
8import "nx_image.nx"
9import "nx_integral.nx"
10
11const W: i64 = 8
12const H: i64 = 6
13
14func gp(logfd: i64, s: *u8) -> i64 {
15 var n: i64 = 0
16 while s[n] != (0 as u8) { n = n + 1 }
17 sys_write(1, s, n)
18 if logfd > 0 { sys_write(logfd, s, n) }
19 return 0
20}
21func gn(logfd: i64, v: i64) -> i64 {
22 let bb: *u8 = sys_mmap(28)
23 var m: i64 = v
24 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m }
25 let t: *u8 = sys_mmap(28)
26 var k: i64 = 0
27 if m == 0 { t[0] = 48 as u8; k = 1 }
28 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
29 var i: i64 = 0
30 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
31 sys_write(1, bb, k)
32 if logfd > 0 { sys_write(logfd, bb, k) }
33 return 0
34}
35
36func brute(img: *Image, x0: i64, y0: i64, x1: i64, y1: i64) -> i64 {
37 var s: i64 = 0
38 var y: i64 = y0
39 while y <= y1 {
40 var x: i64 = x0
41 while x <= x1 { s = s + nx_image_get(img, x, y, 0); x = x + 1 }
42 y = y + 1
43 }
44 return s
45}
46
47func main() -> i64 {
48 let logfd: i64 = sys_openat_append("knowledge/status/integral_gate.log\x00" as *u8, 0x1a4)
49 gp(logfd, "INTEGRAL-GATE R-FACE-0 frame=8x6\n\x00" as *u8)
50
51 let img: *Image = nx_image_alloc(W, H, 1)
52 var y: i64 = 0
53 while y < H {
54 var x: i64 = 0
55 while x < W { nx_image_set(img, x, y, 0, (x * 7 + y * 13) % 200); x = x + 1 }
56 y = y + 1
57 }
58 let ii: *IntegralImage = nx_integral_build(img)
59
60 // rectangles to test: x0,y0,x1,y1
61 let rx0: *i64 = sys_mmap(64) as *i64
62 let ry0: *i64 = sys_mmap(64) as *i64
63 let rx1: *i64 = sys_mmap(64) as *i64
64 let ry1: *i64 = sys_mmap(64) as *i64
65 rx0[0]=0; ry0[0]=0; rx1[0]=7; ry1[0]=5 // full frame
66 rx0[1]=2; ry0[1]=1; rx1[1]=5; ry1[1]=4 // interior
67 rx0[2]=3; ry0[2]=3; rx1[2]=3; ry1[2]=3 // single pixel
68 rx0[3]=0; ry0[3]=0; rx1[3]=0; ry1[3]=0 // top-left corner pixel
69 rx0[4]=7; ry0[4]=0; rx1[4]=7; ry1[4]=5 // right column
70 rx0[5]=0; ry0[5]=5; rx1[5]=7; ry1[5]=5 // bottom row
71 rx0[6]=4; ry0[6]=2; rx1[6]=7; ry1[6]=5 // bottom-right block
72 let nr: i64 = 7
73
74 var ok: i64 = 1
75 var i: i64 = 0
76 while i < nr {
77 let sat: i64 = nx_integral_rect_sum(ii, rx0[i], ry0[i], rx1[i], ry1[i])
78 let bf: i64 = brute(img, rx0[i], ry0[i], rx1[i], ry1[i])
79 gp(logfd, " rect[\x00" as *u8); gn(logfd, rx0[i]); gp(logfd, ",\x00" as *u8); gn(logfd, ry0[i])
80 gp(logfd, "..\x00" as *u8); gn(logfd, rx1[i]); gp(logfd, ",\x00" as *u8); gn(logfd, ry1[i])
81 gp(logfd, "] sat=\x00" as *u8); gn(logfd, sat); gp(logfd, " brute=\x00" as *u8); gn(logfd, bf)
82 if sat != bf { ok = 0; gp(logfd, " MISMATCH\x00" as *u8) }
83 gp(logfd, "\n\x00" as *u8)
84 i = i + 1
85 }
86
87 if ok == 1 {
88 gp(logfd, "INTEGRAL-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8)
89 if logfd > 0 { sys_close(logfd) }
90 sys_exit(0)
91 return 0
92 }
93 gp(logfd, "INTEGRAL-GATE result=FAIL verdict=RED\n\x00" as *u8)
94 if logfd > 0 { sys_close(logfd) }
95 sys_exit(1)
96 return 1
97}