code wiki / (root) / nx_dyad_test.nx

nx_dyad_test.nx source

↩ module page · 86 lines · 2733 B

1// nx_dyad_test.nx -- smoke for nx_dyad. 2 3import "nx_syscalls.nx" 4import "nx_attention_class.nx" 5import "nx_dyad.nx" 6 7func main() -> i64 { 8 let a_in: *u8 = (sys_mmap(32)) as *u8 9 let a_out: *u8 = (sys_mmap(32)) as *u8 10 let b_in: *u8 = (sys_mmap(32)) as *u8 11 let b_out: *u8 = (sys_mmap(32)) as *u8 12 13 // 1: construct dyad with isolated buffers 14 let d: *NxDyad = nx_dyad_new( 15 100, NX_AC_INTERACTIVE_FOREGROUND_GAME, a_in, 32, a_out, 32, 16 200, NX_AC_INTERACTIVE_FOREGROUND_GAME, b_in, 32, b_out, 32) 17 if (d as i64) == 0 { return 1 } 18 if d.cell_a_id != 100 { return 2 } 19 if d.cell_b_id != 200 { return 3 } 20 21 // 2: shared buffer rejected (cross-leak) 22 let d_bad: *NxDyad = nx_dyad_new( 23 100, NX_AC_DEV, a_in, 32, a_out, 32, 24 200, NX_AC_DEV, a_in, 32, b_out, 32) 25 if (d_bad as i64) != 0 { return 4 } 26 27 // 3: a_out aliasing b_out refused 28 let d_bad2: *NxDyad = nx_dyad_new( 29 100, NX_AC_DEV, a_in, 32, a_out, 32, 30 200, NX_AC_DEV, b_in, 32, a_out, 32) 31 if (d_bad2 as i64) != 0 { return 5 } 32 33 // 4: bad class rejected 34 let d_bad3: *NxDyad = nx_dyad_new( 35 100, 99, a_in, 32, a_out, 32, 36 200, NX_AC_DEV, b_in, 32, b_out, 32) 37 if (d_bad3 as i64) != 0 { return 6 } 38 39 // 5: null buffer rejected 40 let null_buf: *u8 = (0 as i64) as *u8 41 let d_bad4: *NxDyad = nx_dyad_new( 42 100, NX_AC_DEV, null_buf, 32, a_out, 32, 43 200, NX_AC_DEV, b_in, 32, b_out, 32) 44 if (d_bad4 as i64) != 0 { return 7 } 45 46 // 6: feed same input -- both buffers receive it 47 let src: *u8 = (sys_mmap(16)) as *u8 48 var i: nx_size = 0 49 while i < 16 { 50 src[i] = (65 + i) as u8 51 i = i + 1 52 } 53 if nx_dyad_feed_same_input(d, src, 16) != NX_DY_OK { return 8 } 54 55 // 7: inputs match 56 if nx_dyad_inputs_match(d, 16) != 1 { return 9 } 57 58 // 8: outputs all zero -- they differ from each other zero times 59 if nx_dyad_outputs_differ(d, 16) != 0 { return 10 } 60 61 // 9: write divergent outputs and count 62 var j: nx_size = 0 63 while j < 16 { 64 a_out[j] = (50 + j) as u8 65 b_out[j] = (60 + j) as u8 // every position differs 66 j = j + 1 67 } 68 if nx_dyad_outputs_differ(d, 16) != 16 { return 11 } 69 70 // 10: identical outputs are not divergent 71 var k: nx_size = 0 72 while k < 16 { 73 b_out[k] = a_out[k] 74 k = k + 1 75 } 76 if nx_dyad_outputs_differ(d, 16) != 0 { return 12 } 77 78 // 11: buffers_isolated predicate 79 if nx_dyad_buffers_isolated(d) != 1 { return 13 } 80 81 // 12: feed-same-input refused when too large 82 let big_src: *u8 = (sys_mmap(128)) as *u8 83 if nx_dyad_feed_same_input(d, big_src, 100) != NX_DY_ERR_INPUT_DIVERGED { return 14 } 84 85 return 0 86}