code wiki / (root) / _ft_diag.nx

_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}