code wiki / (root) / nx_worldpipe_relief_gate_t140.nx

nx_worldpipe_relief_gate_t140.nx source

↩ module page · 71 lines · 3943 B

1// Private extraction/analytic gate; does not claim current engine integration. 2import "nx_worldpipe_core_relief_t140.nx" 3import "nx_gate_verdict.nx" 4func main() -> i64 { 5 let ctr: *i64 = gv_ctr() 6 gv_head("WORLDPIPE / inland relief extraction" as *u8) 7 let amplitude: i64 = 768 8 let wavelength: i64 = 24 9 let packed: i64 = amplitude+(wavelength << GA_DUNE_WAVE_SHIFT) 10 gv_check_eq("existing packed recipe accepted",genp_dune_valid(packed),1,ctr) 11 gv_check_eq("invalid negative recipe refused",genp_dune_valid(0-1),0,ctr) 12 gv_check_eq("zero wavelength refused",genp_dune_valid(amplitude),0,ctr) 13 gv_check_eq("subgrid wavelength refused",genp_dune_valid(amplitude+(3 << GA_DUNE_WAVE_SHIFT)),0,ctr) 14 gv_check_eq("reserved bits refused",genp_dune_valid(GA_DUNE_PACK_MAX+1),0,ctr) 15 gv_check_eq("disabled basis exact zero",wp_dune_wave_q(0,0,0,0),0,ctr) 16 gv_check_eq("analytic crest at origin 9A/10",wp_dune_wave_q(packed,0,0,0),691,ctr) 17 gv_check_eq("analytic quarter phase A/2",wp_dune_wave_q(packed,6,0,0),384,ctr) 18 gv_check_eq("analytic trough A/10",wp_dune_wave_q(packed,12,0,0),76,ctr) 19 gv_check_eq("smoothstep midpoint half amplitude",wp_dune_coast_q(amplitude,12,wavelength),384,ctr) 20 gv_check_eq("coast exact zero",wp_dune_coast_q(amplitude,0,wavelength),0,ctr) 21 gv_check_eq("sea exact zero",wp_dune_coast_q(amplitude,0-1,wavelength),0,ctr) 22 gv_check_eq("full inland amplitude",wp_dune_coast_q(amplitude,wavelength,wavelength),amplitude,ctr) 23 gv_check_eq("first inland maximum only 3/256 block",wp_dune_coast_q(amplitude,1,wavelength),3,ctr) 24 var bad: i64 = 0; var raw_bad: i64 = 0; var coast_bad: i64 = 0 25 var minq: i64 = amplitude; var maxq: i64 = 0 26 var maxstep: i64 = 0; var changed: i64 = 0; var count: i64 = 0 27 var h: i64 = 0 28 let start: i64 = sys_clock_now_us() 29 while h < 4 { 30 let p: i64 = packed+((h*64) << GA_DUNE_HEADING_SHIFT) 31 var z: i64 = 0-32 32 while z < 128 { 33 var x: i64 = 0-32 34 while x < 128 { 35 let r: i64 = wp_dune_wave_q(p,x,z,0) 36 let c: i64 = wp_dune_coast_q(r,100-z,wavelength) 37 let cn: i64 = wp_dune_coast_q(wp_dune_wave_q(p,x,z+1,0),99-z,wavelength) 38 if r < 0 || r > amplitude { bad = bad + 1 } 39 if c < minq { minq = c }; if c > maxq { maxq = c } 40 let ds: i64 = wp_iabs(c-cn); if ds > maxstep { maxstep = ds } 41 if z >= 100 { if c != 0 { coast_bad = coast_bad + 1 } } 42 if c != 0 { changed = changed + 1 } 43 // Every possible Q8 remainder, evaluated over signed coordinates and headings. 44 let baseq: i64 = 11*WP_HEIGHT_Q+((x+32)%WP_HEIGHT_Q) 45 let raw: i64 = wp_dune_raw_delta(11,baseq,baseq+c) 46 if c == 0 { if raw != 11 { raw_bad = raw_bad + 1 } } 47 if raw-11 != (baseq+c)/WP_HEIGHT_Q-baseq/WP_HEIGHT_Q { raw_bad = raw_bad + 1 } 48 count = count + 1; x = x + 1 49 }; z = z + 1 50 }; h = h + 1 51 } 52 gv_check_eq("102400 signed-coordinate/cardinal samples bounded",bad,0,ctr) 53 gv_check_eq("all sampled coastal raw and Q8 unchanged",coast_bad+raw_bad,0,ctr) 54 gv_check("positive inland geometry exists" as *u8,changed>0,ctr) 55 gv_kv("sample_count",count); gv_kv("changed_samples",changed) 56 gv_kv("min_relief_q8",minq); gv_kv("max_relief_q8",maxq); gv_kv("max_adjacent_z_delta_q8",maxstep) 57 gv_kv("sample_elapsed_us",sys_clock_now_us()-start) 58 var remainder: i64 = 0; var seam_bad: i64 = 0 59 while remainder < WP_HEIGHT_Q { 60 let q: i64 = 11*WP_HEIGHT_Q+remainder 61 let atshore: i64 = wp_dune_raw_delta(11,q,q) 62 let firstinland: i64 = wp_dune_raw_delta(11,q,q+3) 63 if atshore != 11 { seam_bad = seam_bad + 1 } 64 if firstinland < 11 || firstinland > 12 { seam_bad = seam_bad + 1 } 65 if firstinland != 11 { if remainder < 253 { seam_bad = seam_bad + 1 } } 66 remainder = remainder + 1 67 } 68 gv_check_eq("all 256 remainders: onset only crosses real whole-block boundary",seam_bad,0,ctr) 69 gv_kv("producer_extra_allocation_bytes",0) 70 return gv_verdict("WORLDPIPE-RELIEF" as *u8,ctr,"pure producer qualified; current engine composition, GPU and served interactions remain pending" as *u8) 71}