code wiki / (root) / nx_array_kat.nx

nx_array_kat.nx source

↩ module page · 42 lines · 1343 B

1// KAT for the new [N]T stack-array feature. Expect stdout: 2// Hi! 3// ABCDE 4// SUM100_OK 5// idx3=40 OK 6import "nx_syscalls.nx" 7 8// arrays passed to a helper (decay to address) work across a call boundary 9func emit(p: *u8, n: i64) -> i64 { sys_write(1, p, n); return 0 } 10 11func main() -> i64 { 12 // u8 array: literal-index writes, pass whole array (decays to address) to sys_write + a helper 13 var buf: [8]u8 14 buf[0] = 72 as u8 // 'H' 15 buf[1] = 105 as u8 // 'i' 16 buf[2] = 33 as u8 // '!' 17 buf[3] = 10 as u8 // '\n' 18 emit(buf, 4) 19 20 // u8 array: loop write, then read+verify by re-emitting 21 var i: i64 = 0 22 while i < 5 { buf[i] = (65 + i) as u8; i = i + 1 } // A B C D E 23 sys_write(1, buf, 5) 24 sys_write(1, "\n" as *u8, 1) 25 26 // i64 array: write + read-back sum (stride 8 must be correct) 27 var nums: [4]i64 28 nums[0] = 10 29 nums[1] = 20 30 nums[2] = 30 31 nums[3] = 40 32 var sum: i64 = 0 33 var j: i64 = 0 34 while j < 4 { sum = sum + nums[j]; j = j + 1 } 35 if sum == 100 { sys_write(1, "SUM100_OK\n" as *u8, 10) } else { sys_write(1, "SUM_BAD\n" as *u8, 8) } 36 37 // read a specific i64 element back (index-3 = 40) 38 let x: i64 = nums[3] 39 if x == 40 { sys_write(1, "idx3=40 OK\n" as *u8, 11) } else { sys_write(1, "idx3 BAD\n" as *u8, 9) } 40 41 sys_exit(0); return 0 42}