code wiki / (root) / nx_event_queue_test.nx

nx_event_queue_test.nx source

↩ module page · 67 lines · 2706 B

1// nx_event_queue_test.nx -- smoke for nx_event_queue. 2 3import "nx_syscalls.nx" 4import "nx_event_queue.nx" 5 6func main() -> i64 { 7 if NX_EV_N_KINDS != 9 { return 1 } 8 if nx_ev_kind_is_known(NX_EV_XENO_OBSERVATION) != 1 { return 2 } 9 if nx_ev_kind_is_known(NX_EV_RECOVERY_TRIGGERED) != 1 { return 3 } 10 if nx_ev_kind_is_known(9) != 0 { return 4 } 11 12 let q: *NxEventQueue = nx_event_queue_new(4) 13 if q.capacity != 4 { return 5 } 14 if q.count != 0 { return 6 } 15 16 // Empty: peek returns -1 17 if nx_event_queue_peek_kind(q) != -1 { return 7 } 18 let out_k: *i64 = (sys_mmap(8)) as *i64 19 let out_s: *i64 = (sys_mmap(8)) as *i64 20 let out_p: *i64 = (sys_mmap(8)) as *i64 21 let out_t: *i64 = (sys_mmap(8)) as *i64 22 if nx_event_queue_drain_one(q, out_k, out_s, out_p, out_t) != NX_EQ_ERR_EMPTY { return 8 } 23 24 // Emit 3 events 25 nx_event_queue_emit(q, 1000, NX_EV_XENO_OBSERVATION, 100, 0xaa, 200) 26 nx_event_queue_emit(q, 1100, NX_EV_TREATY_BREACHED, 200, 0xbb, 100) 27 nx_event_queue_emit(q, 1200, NX_EV_HEALTH_TRANSITION, 300, 0xcc, 100) 28 if q.count != 3 { return 9 } 29 if nx_event_queue_total_emitted(q) != 3 { return 10 } 30 31 // Peek next (oldest) 32 if nx_event_queue_peek_kind(q) != NX_EV_XENO_OBSERVATION { return 11 } 33 34 // Drain one -> FIFO oldest first 35 nx_event_queue_drain_one(q, out_k, out_s, out_p, out_t) 36 if out_k[0] != NX_EV_XENO_OBSERVATION { return 12 } 37 if out_s[0] != 100 { return 13 } 38 if out_p[0] != 0xaa { return 14 } 39 if out_t[0] != 1000 { return 15 } 40 if q.count != 2 { return 16 } 41 42 // count_by_kind 43 if nx_event_queue_count_by_kind(q, NX_EV_TREATY_BREACHED) != 1 { return 17 } 44 if nx_event_queue_count_by_kind(q, NX_EV_XENO_OBSERVATION) != 0 { return 18 } // already drained 45 46 // FULL behavior 47 nx_event_queue_emit(q, 1300, NX_EV_SCAM_FLAGGED, 400, 0, 100) 48 nx_event_queue_emit(q, 1400, NX_EV_VESICLE_DELIVERED, 500, 0, 100) 49 if q.count != 4 { return 19 } 50 if nx_event_queue_emit(q, 1500, NX_EV_SCAM_FLAGGED, 600, 0, 100) != NX_EQ_ERR_FULL { return 20 } 51 52 // Drain remaining 53 nx_event_queue_drain_one(q, out_k, out_s, out_p, out_t) 54 if out_k[0] != NX_EV_TREATY_BREACHED { return 21 } 55 nx_event_queue_drain_one(q, out_k, out_s, out_p, out_t) 56 if out_k[0] != NX_EV_HEALTH_TRANSITION { return 22 } 57 nx_event_queue_drain_one(q, out_k, out_s, out_p, out_t) 58 if out_k[0] != NX_EV_SCAM_FLAGGED { return 23 } 59 nx_event_queue_drain_one(q, out_k, out_s, out_p, out_t) 60 if out_k[0] != NX_EV_VESICLE_DELIVERED { return 24 } 61 if q.count != 0 { return 25 } 62 63 // total_emitted monotonic across drains 64 if nx_event_queue_total_emitted(q) != 5 { return 26 } 65 66 return 0 67}