code wiki / _hdl_build / nx_loop_monitor_test.nx

nx_loop_monitor_test.nx source

↩ module page · 53 lines · 3487 B

1// nx_loop_monitor_test.nx -- run the Monitor against the REAL overnight loop's numbers: 484 beats, 2// chain-win=0 the whole recent window, imul wins all 128 every beat. The Monitor must call DRY and 3// RE-TASK -- and quantify the beats wasted because no monitor existed. Exit 0 on 7/7. license_tier: ORIGINAL 4 5import "nx_loop_monitor.nx" 6import "nx_syscalls.nx" 7 8func lt_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 9func lt_num(v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m}; 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 } 10 11func main() -> i64 { 12 lt_puts("=== LOOP MONITOR vs the REAL overnight loop (484 beats, 0 chain-wins) ===\n" as *u8) 13 14 let dry_threshold: i64 = 50 // 50 zero-win beats = vein declared dry (config, not magic) 15 16 // the real loop right now: advancing, but ~430 straight zero-win beats (it found wins only very early). 17 let real_zero_streak: i64 = 430 18 let v_real: i64 = lm_classify(0, 1, real_zero_streak, dry_threshold) 19 let a_real: i64 = lm_action(v_real) 20 let wasted: i64 = lm_wasted_beats(real_zero_streak, dry_threshold) 21 lt_puts(" live loop: verdict=" as *u8); lt_num(v_real); lt_puts(" (2=DRY) action=" as *u8); lt_num(a_real); lt_puts(" (2=RE-TASK) WASTED beats past dry = " as *u8); lt_num(wasted); lt_puts("\n" as *u8) 22 23 // a healthy productive loop (banking wins): CONTINUE. 24 let v_prod: i64 = lm_classify(7, 1, 0, dry_threshold) 25 let a_prod: i64 = lm_action(v_prod) 26 // a hung process (beat counter not advancing): STALL -> RESTART. 27 let v_stall: i64 = lm_classify(0, 0, 12, dry_threshold) 28 let a_stall: i64 = lm_action(v_stall) 29 // early zeros (only 10 zero beats): NOT yet dry -> keep going. 30 let v_early: i64 = lm_classify(0, 1, 10, dry_threshold) 31 32 lt_puts(" productive: verdict=" as *u8); lt_num(v_prod); lt_puts(" action=" as *u8); lt_num(a_prod) 33 lt_puts(" stalled: verdict=" as *u8); lt_num(v_stall); lt_puts(" action=" as *u8); lt_num(a_stall) 34 lt_puts(" early-zeros: verdict=" as *u8); lt_num(v_early); lt_puts("\n" as *u8) 35 36 let r: *i64 = sys_mmap(8*8) as *i64 37 r[0]=0; if v_real == LM_DRY { r[0]=1 } // the live dry vein is detected 38 r[1]=0; if a_real == LM_RETASK { r[1]=1 } // and HANDLED: re-task to a new opportunity 39 r[2]=0; if wasted == 380 { r[2]=1 } // 430-50 = 380 beats burned for lack of a monitor 40 r[3]=0; if v_prod == LM_PRODUCTIVE { r[3]=1 }; if a_prod != LM_CONTINUE { r[3]=0 } 41 r[4]=0; if v_stall == LM_STALL { r[4]=1 }; if a_stall != LM_RESTART { r[4]=0 } 42 r[5]=0; if v_early == LM_PRODUCTIVE { r[5]=1 } // early zeros not falsely called dry 43 r[6]=0; if lm_action(LM_DRY) == LM_RETASK { r[6]=1 } // every verdict maps to a handling action 44 var pass: i64 = 0; var i: i64 = 0 45 while i < 7 { pass = pass + r[i]; i = i + 1 } 46 lt_puts("----\n passed " as *u8); lt_num(pass); lt_puts("/7\n" as *u8) 47 if pass == 7 { 48 lt_puts(" THE MISSING ORGAN: with this Monitor wired, the loop would have been RE-TASKED ~380 beats ago\n" as *u8) 49 lt_puts(" instead of grinding a dead vein. Output is now HANDLED: DRY->re-task, STALL->restart, wins->continue.\n" as *u8) 50 sys_exit(0); return 0 51 } 52 lt_puts(" FAIL\n" as *u8); sys_exit(1); return 1 53}