code wiki / _hdl_build / nx_viz_random_gate.nx

nx_viz_random_gate.nx source

↩ module page · 62 lines · 2501 B

1// nx_viz_random_gate.nx -- REFEREE for the data-random layer (property-based + deterministic). 2// T1 deterministic (same seed -> same stream) T2 uniform(100) in [0,100) 3// T3 gaussian mean over 2000 ~ 0 (|mean|<150) T4 gaussian has tails (max>1500 AND min<-1500) 4// GREEN iff all. Sovereign: nx_viz_random + nx_syscalls. license_tier: ORIGINAL 5import "nx_viz_random.nx" 6import "nx_syscalls.nx" 7import "nx_gate_verdict.nx" 8 9func g_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 10func g_row(name: *u8, ok: i64) -> i64 { 11 if ok == 1 { g_w(" PASS " as *u8) } 12 if ok != 1 { g_w(" FAIL " as *u8) } 13 g_w(name); g_w("\n" as *u8) 14 return ok 15} 16 17func main() -> i64 { 18 g_w("viz-random gate (seeded LCG + central-limit gaussian)\n" as *u8) 19 let st: *i64 = sys_mmap(16) as *i64 20 let st2: *i64 = sys_mmap(16) as *i64 21 var pass: i64 = 0 22 23 st[0] = 12345; st2[0] = 12345 24 var t1: i64 = 1; var i: i64 = 0 25 while i < 8 { if vr_next(st) != vr_next(st2) { t1 = 0 } i = i + 1 } 26 pass = pass + g_row("T1 deterministic (same seed -> same stream)\x00" as *u8, t1) 27 28 st[0] = 777 29 var t2: i64 = 1; i = 0 30 while i < 200 { let u: i64 = vr_uniform(st, 100); if u < 0 { t2 = 0 } if u >= 100 { t2 = 0 } i = i + 1 } 31 pass = pass + g_row("T2 uniform(100) in [0,100)\x00" as *u8, t2) 32 33 st[0] = 424242 34 var sum: i64 = 0; var mx: i64 = 0 - 1000000; var mn: i64 = 1000000 35 i = 0 36 while i < 2000 { 37 let g: i64 = vr_gaussian(st) 38 sum = sum + g 39 if g > mx { mx = g } 40 if g < mn { mn = g } 41 i = i + 1 42 } 43 let mean: i64 = sum / 2000 44 var t3: i64 = 0 45 var am: i64 = mean; if am < 0 { am = 0 - am } 46 if am < 150 { t3 = 1 } 47 pass = pass + g_row("T3 gaussian mean ~ 0\x00" as *u8, t3) 48 49 var t4: i64 = 0 50 if mx > 1500 { if mn < (0 - 1500) { t4 = 1 } } 51 pass = pass + g_row("T4 gaussian has tails (max>1500, min<-1500)\x00" as *u8, t4) 52 53 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 54 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 55 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 56 let ctr__dry: *i64 = gv_ctr() 57 ctr__dry[0] = pass 58 ctr__dry[1] = 4 59 let rc__dry: i64 = gv_verdict("VIZ-RANDOM-GATE" as *u8, ctr__dry, "4/4 (seeded PRNG + gaussian, deterministic)" as *u8) 60 sys_exit(rc__dry) 61 return rc__dry 62}