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}