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}