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}