code wiki / _hdl_build / _ttt_diag.nx

_ttt_diag.nx source

↩ module page · 34 lines · 1687 B

1// _ttt_diag.nx -- diagnostic twin of nx_tictactoe_test assertion 8: play the 2// 9-move draw sequence, then PRINT each cell, the per-move try_apply results, 3// and the final outcome. Run under bash vs under the NishiLang exec probe to 4// see exactly where the two execution contexts diverge (2026-06-09). 5import "nx_syscalls.nx" 6import "nx_tier.nx" 7import "nx_tictactoe.nx" 8 9func td_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 10func td_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 } 11 12func main() -> nx_int { 13 let s4: *i64 = nx_ttt_new(NX_TTT_X) 14 td_puts("state-ptr=" as *u8); td_putn(s4 as i64); td_puts("\n" as *u8) 15 16 let seq: *i64 = sys_mmap(8*9) as *i64 17 seq[0]=0; seq[1]=1; seq[2]=2; seq[3]=4; seq[4]=3; seq[5]=6; seq[6]=7; seq[7]=8; seq[8]=5 18 19 var m: i64 = 0 20 while m < 9 { 21 let r: i64 = nx_ttt_try_apply(s4, seq[m]) 22 td_puts("move " as *u8); td_putn(m); td_puts(" cell=" as *u8); td_putn(seq[m]) 23 td_puts(" applied=" as *u8); td_putn(r) 24 td_puts(" outcome-now=" as *u8); td_putn(nx_ttt_outcome(s4)) 25 td_puts("\n" as *u8) 26 m = m + 1 27 } 28 td_puts("cells:" as *u8) 29 var i: i64 = 0 30 while i < 9 { td_puts(" " as *u8); td_putn(s4[i]); i = i + 1 } 31 td_puts("\nfinal outcome=" as *u8); td_putn(nx_ttt_outcome(s4)) 32 td_puts(" (DRAW=" as *u8); td_putn(NX_TTT_DRAW); td_puts(")\n" as *u8) 33 return 0 34}