_ft_diag.nx source
↩ module page · 48 lines · 2237 B
1// _ft_diag.nx -- diagnostic twin for the P3 KAT4 context-flake (2026-06-10):
2// prints n_features + variety per seed so the failing context names its data.
3import "nx_syscalls.nx"
4import "nx_tier.nx"
5import "nx_procgen_preset.nx"
6import "nx_procgen_biome.nx"
7import "nx_procgen_features.nx"
8import "nx_world_quality_grader.nx"
9
10const FW: nx_int = 64
11const FH: nx_int = 64
12
13func d_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
14func d_putn(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;k=1}; while m>0 {t[k]=48+(m%10); 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 }
15
16func main() -> i64 {
17 let n: nx_int = FW * FH
18 let bm: *i64 = sys_mmap(n * 8) as *i64
19 let v: *i64 = sys_mmap(8 * 12) as *i64
20 let hist: *i64 = sys_mmap(NX_FEAT_N_KINDS * 8) as *i64
21 let null_ptr: *i64 = 0 as *i64
22 var preset: nx_int = 0
23 while preset < NX_PROCGEN_N_PRESETS {
24 var s: nx_int = 0
25 while s < 3 {
26 let seed: nx_int = 1000 + s * 777
27 let wl: *Landscape = nx_procgen_landscape(seed, preset, FW, FH, 1024)
28 d_puts("preset=" as *u8); d_putn(preset)
29 d_puts(" seed=" as *u8); d_putn(seed)
30 d_puts(" nf=" as *u8); d_putn(wl.n_features)
31 if wl.n_features > 0 {
32 let wk: *i64 = sys_mmap(wl.n_features * 8) as *i64
33 nx_biome_map_build(wl.heightmap, FW, FH, seed, bm)
34 nx_feature_assign(wl.feature_xs, wl.feature_ys, wl.n_features, bm, FW, FH, seed, wk)
35 nx_feature_hist_build(wk, wl.n_features, hist)
36 d_puts(" hist=" as *u8)
37 var k: nx_int = 0
38 while k < NX_FEAT_N_KINDS { d_putn(hist[k]); d_puts("," as *u8); k = k + 1 }
39 nx_world_quality_grade(wl.heightmap, FW, FH, 1024, null_ptr, hist, NX_FEAT_N_KINDS, v)
40 d_puts(" variety=" as *u8); d_putn(v[NX_WQG_OFF_FEATURE_VARIETY])
41 }
42 d_puts("\n" as *u8)
43 s = s + 1
44 }
45 preset = preset + 1
46 }
47 return 0
48}